我有两个文件 -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