我想使用ffmpeg将两个mp4视频组合成一个mp4视频。
我到目前为止尝试的是
ffmpeg -i input1.mp4 -i input2.mp4 output.mp4
但是,每次我使用第一个输入的视频编解码器获得视频而不是另一个。我该如何结合它们?对此的任何想法都将受到高度赞赏。
答案 0 :(得分:6)
请阅读FFMPEG FAQ,了解有关加入文件的信息。
不幸的是,由于您使用的是MP4文件,因此简单连接对您不起作用,因为MP4格式包含一个“标题”(尽管它不一定必须位于文件的开头)部分并包含媒体数据的偏移量。您需要将两个文件转码为可以连接的格式,然后从该格式生成MP4文件(这将生成适当的标题部分)。
答案 1 :(得分:5)
您无法连接.mp4文件,但可以连接.mpg文件。首先尝试使用ffmpeg将两个视频转换为.mpg。然后,在两个.mpg文件上运行一个简单的linux cat命令来创建一个组合的.mpg文件。之后,使用ffmpeg将连接的.mpg文件转换为.mp4。这是一种迂回的方法,但它有效。您可以使用“命名管道”来减少命令数量,但结果是相同的。
答案 2 :(得分:5)
如前所述,您需要先转换为中间格式。如果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
您可以找到更详细的答案here。
答案 3 :(得分:4)
您可以使用ffmpeg
执行此操作,但也有一个小工具,称为MP4Box
(GPAC的一部分),可以连接多个MP4文件。
在您的情况下,语法是
MP4Box -cat input1.mp4 -cat input2.mp4 output.mp4
答案 4 :(得分:2)
如果所有输入都具有 same attributes、格式和视频/音频流的数量,那么您可以使用 concat demuxer。这可以让您在不需要重新编码的情况下进行连接,因此速度快并保持质量。
使 input.txt
包含以下内容:
file 'input1.mp4'
file 'input2.mp4'
连接
ffmpeg -f concat -i input.txt -c copy output.mp4
如果出现错误 Unsafe file name
,请添加 -safe 0
concat demuxer 输入选项(在 -i
之前)。
如果您的输入不同或随意,则:
使用 concat filter。请参阅 How to concatenate videos in ffmpeg with different attributes? 需要重新编码,但当您的输入是随机的、混合的、不可预测的或任意的时,这是更好的选择。
或者重新编码与大多数输入不匹配的输入,然后使用 concat demuxer。此网站上有 many examples showing how to do this。