【发布时间】:2014-09-08 09:45:41
【问题描述】:
我有一个项目需要将一个视频文件与另一个音频文件合并。预期的输出是一个视频文件,其中包含来自实际视频的音频和合并的音频文件。输出视频文件的长度将与实际视频文件的大小相同。
是否有单行 FFMPEG 命令可以使用复制和 -map 参数来实现这一点?
我将使用的视频格式是 flv 或 mp4 音频文件格式为mp3
【问题讨论】:
我有一个项目需要将一个视频文件与另一个音频文件合并。预期的输出是一个视频文件,其中包含来自实际视频的音频和合并的音频文件。输出视频文件的长度将与实际视频文件的大小相同。
是否有单行 FFMPEG 命令可以使用复制和 -map 参数来实现这一点?
我将使用的视频格式是 flv 或 mp4 音频文件格式为mp3
【问题讨论】:
1.从视频文件中获取音频,音频文件名为a.mp3
ffmpeg.exe -i video.mp4 a.mp3
2。合并两个音频文件(audio.mp3+a.mp3=audiofinal.mp3)
ffmpeg.exe -i audio.mp3 -i a.mp3 -filter_complex amerge -c:a libmp3lame -q:a 4 audiofinal.mp3
3.合并视频文件和音频文件(video.mp4+audiofinal.mp3=output.mp4)
ffmpeg.exe -i video.mp4 -i audiofinal.mp3 -map 0:v -map 1:a -c copy -y output.mp4
【讨论】:
我认为没有必要从视频中提取音频。我们可以使用-filter_complex amix 来合并两个音频:
ffmpeg -i videowithaudio.mp4 -i audiotooverlay.mp3 -filter_complex amix -map 0:v -map 0:a -map 1:a -shortest videowithbothaudios.mp4
-filter_complex amix 将第一个输入文件的音频覆盖在第二个输入文件的音频之上。
-map 0:v第一个输入文件的视频流。
-map 0:a第一个输入文件的音频流。
-map 1:a第二个输入文件的音频流。
-shortest输出的长度是最短输入的长度
【讨论】:
用例:
假设
步骤:
1) 从视频中提取音频
ffmpeg -i test.mp4 1.mp3
test.mp4 - 你的文件
2) 合并 audio.mp3 和 1.mp3
ffmpeg -i audio.mp3 -i 1.mp3 -filter_complex amerge -c:a libmp3lame -q:a 4 audiofinal.mp3
audiofinal.mp3 - 带音乐的音频
3) 删除原始音频
ffmpeg -i example.mkv -c copy -an example-nosound.mkv
example-nosound.mkv - 没有音频的视频
4) 与适当的音频合并
ffmpeg -i audiofinal.mp3 -i example-nosound.wmv -c:v copy -vcodec copy final.wmv
final.wmv - 你的完美视频。
【讨论】:
不用地图也可以实现。
ffmpeg -i video.mp4 -i audio.mp3 output.mp4
如果您希望 output.mp4 在输入之一停止后立即停止(音频/视频) 然后使用
-shortest
例如:ffmpeg -i video.mp4 -i audio.mp3 -shortest output.mp4
这将确保输出在任何一个输入完成时停止。
既然你已经问过你想用地图做这件事。你就是这样做的:
ffmpeg -i video.mp4 -i audio.mp3 -map 0:0 -map 1:0 -shortest output.mp4
现在,由于您要保留视频文件的音频,请考虑合并audio.mp3 和video.mp4。这些是步骤:
ffmpeg -i video.mp4 1.mp3
ffmpeg -i audio.mp3 -i 1.mp3 -filter_complex amerge -c:a libmp3lame -q:a 4 audiofinal.mp3
ffmpeg -i video.mp4 -an videofinal.mp4
ffmpeg -i videofinal.mp4 -i audiofinal.mp3 -shortest final.mp4
注意:在最新版本的 ffmpeg 中,它只会提示您使用 '-strict -2',以防它使用此功能:
ffmpeg -i videofinal.mp4 -i audiofinal.mp3 -shortest -strict -2 final.mp4
希望这会有所帮助。
【讨论】:
如果您无法使用以下命令合并视频和音频,请首先从视频中删除声音: ffmpeg -i video.mp4 -an videofinal.mp4
【讨论】:
这很容易用FFmpeg:
ffmpeg -i vid.mp4 -i audio.mp3 -codec:a libmp3lame -ar 44100 -ab 64k -ac 1 -q:v 1 -pix_fmt yuv420p -map 0:0 -map 1:0
【讨论】: