ffmpeg 加入两个 mp4 视频一个接一个

ffmpeg join two mp4 videos one after another

我有 2 个视频,我希望它们使用 ffmpeg 加入到一个视频中。我在 运行 这些命令中 Java 所以我需要它来使用命令行所以没有其他程序解决方案适用。我尝试了很多不同的方法,但似乎都不起作用。所以我得到了一个 35 秒的视频和一个 5 秒的视频,我需要 40 秒的输出,这似乎从未发生过。如果有人能提供帮助,将不胜感激

我自己找到了一个解决方案,我相信这对其他人有用,因为我花了很多时间才找到它。您不能通过 ffmpeg 将两个 mp4 连接在一起。但是,您可以将视频转换为 .ts 文件,然后一个接一个地加入它们并将其转换回 mp4。这听起来很复杂,但 ffmpeg 非常简单。

ffmpeg -i vid1.mp4 -c copy -bsf h264_mp4toannexb  vid1.ts
ffmpeg -i vid2.mp4 -c copy -bsf h264_mp4toannexb  vid2.ts
ffmpeg -i "concat:vid1.ts|vid2.ts" -c copy output.mp4       

所以前 2 行将视频转换为 .ts 文件,第 3 行将它们连接起来并制作一个 .mp4,显然你可以删除 .ts 文件,如果你在编程中 运行像 java 这样的语言。

希望有人发现这个有用,因为我花了很多时间试图找到这个解决方案。

不同的格式有不同的方法,但对于 mp4 视频视频编码方式相同,您可以使用 ffmpeg 中的 'concat' 选项连接文件:

创建一个文本文件,其中包含要连接的每个文件的完整路径 - 完成后看起来像这样:

file '/yourdirectory/yourotherdirectory/yourVideo1.mp4'
file '/yourdirectory/yourotherdirectory/yourVideo2.mp4'

将文件命名为 myVideosToJoin.txt(或您想要的任何名称),然后调用以下 ffmpeg 命令:

ffmpeg -f concat -i myVideosToJoin.txt -c copy joinedVideo.mp4

注意:如果上面第一行中的粗体位不清楚 - mp4 是视频和音频流的容器,视频流可以使用不同的编码器、不同的比特率等以不同的格式编码. 此方法适用于视频以相同方式编码的mp4文件。