![使用 FFmpeg 将视频和音频合并,使最终时长与第一个输入相同](https://linux22.com/image/1484798/%E4%BD%BF%E7%94%A8%20FFmpeg%20%E5%B0%86%E8%A7%86%E9%A2%91%E5%92%8C%E9%9F%B3%E9%A2%91%E5%90%88%E5%B9%B6%EF%BC%8C%E4%BD%BF%E6%9C%80%E7%BB%88%E6%97%B6%E9%95%BF%E4%B8%8E%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%BE%93%E5%85%A5%E7%9B%B8%E5%90%8C.png)
我有两个文件 -video.mp4
和audio.mp3
,我想将它们合并。最终视频的时长必须是video.mp4
。
我不知道这两个文件哪个更长,所以我无法使用该-shortest
选项。
这是我目前所拥有的:
ffmpeg -y -i video.mp4 -i audio.mp3 -map 0:v -map 1:a -c copy final.mp4
答案1
使用
ffmpeg -y -i video.mp4 -i audio.mp3 -af apad -map 0:v -map 1:a -c:v copy -shortest final.mp4
这apad
会给音频添加无限期的静音,因此视频将始终是最短的流。
答案2
我发现的唯一方法是使用一个函数首先返回第一个文件的持续时间。这当然是 bash 脚本,您可以将其复制/粘贴到 shell 中,或者编写 .sh bash 脚本。
function getDuration() {
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video.mp4
}
然后使用该函数返回持续时间,并将其与-t
参数一起使用
ffmpeg -y -i video.mp4 -i audio.mp3 -map 0:v -map 1:a -t $(getDuration) -c copy final.mp4