我想使用ffmpeg将两个mp4视频合并成一个单独的mp4视频。
到目前为止,我尝试过的是:
到目前为止,我尝试过的是:
ffmpeg -i input1.mp4 -i input2.mp4 output.mp4
但是,每次我都只得到第一个输入的视频编解码器的视频,而不是其他的。如何将它们合并?对此有任何想法将不胜感激。
ffmpeg -i input1.mp4 -i input2.mp4 output.mp4
但是,每次我都只得到第一个输入的视频编解码器的视频,而不是其他的。如何将它们合并?对此有任何想法将不胜感激。
如之前的答案所示,您需要先将其转换为中间格式。如果mp4包含h264比特流,则可以使用:
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts
ffmpeg -i "concat:input1.ts|input2.ts" -c copy output.mp4
您可以在这里找到更详细的答案。
ffmpeg
来实现这一点,但也有一种名为MP4Box
的小工具(属于GPAC),可以连接多个MP4文件。
在你的情况下,语法如下:
MP4Box -cat input1.mp4 -cat input2.mp4 output.mp4
ffmpeg
中的 concat demuxer(如果你的输入都是相同格式,等等,并且你想要进行流拷贝)或者 concat filter(如果你想要重新编码,和/或者你的输入没有相同的格式、时间基准等)。 - llogan你不能将 .mp4 文件连接起来,但可以将 .mpg 文件连接起来。尝试使用 ffmpeg 将两个视频都转换为 .mpg 格式。然后,在两个 .mpg 文件上运行一个简单的 Linux cat 命令以创建一个组合的 .mpg 文件。之后,使用 ffmpeg 将连接的 .mpg 文件转换为 .mp4。这是一种迂回的方法,但它能够实现目标。你可以使用“命名管道”来减少命令的数量,但结果是相同的。
如果所有输入都具有相同的属性、格式和视频/音频流数量,则可以使用concat demuxer。这样可以在不需要重新编码的情况下进行连接,因此速度快且保留质量。
Make input.txt
containing the following:
file 'input1.mp4'
file 'input2.mp4'
Concatenate
ffmpeg -f concat -i input.txt -c copy output.mp4
If you get error Unsafe file name
add the -safe 0
concat demuxer input option (before -i
).
如果您的输入是不同的或是任意的,则可能会出现以下情况:
使用concat过滤器。查看如何在ffmpeg中连接具有不同属性的视频? 这需要重新编码,但当您的输入是随机的、混合的、不可预测的或任意的时,这是更好的选择。
还可以参见FFmpeg维基:连接。