使用 FFmpeg 将视频和音频合并,使最终时长与第一个输入相同

使用 FFmpeg 将视频和音频合并,使最终时长与第一个输入相同

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

相关内容