使用 ffmpeg 合并两个视频
我想使用 ffmpeg 将两个 mp4 视频组合成一个 mp4 视频。
到目前为止我尝试过的是:
ffmpeg -i input1.mp4 -i input2.mp4 output.mp4
但是,每次我使用第一个输入的视频编解码器而不是另一个输入的视频编解码器获取视频时。我怎样才能将它们结合起来?
I want to combine two mp4 videos to form a single mp4 video using ffmpeg.
what i tried so far is:
ffmpeg -i input1.mp4 -i input2.mp4 output.mp4
But, every time i get the video with video codec of first input and not the other. How can i combine them?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
正如前面的答案所示,您需要首先转换为中间格式。如果 mp4 包含 h264 比特流,您可以使用:
您可以在此处找到更详细的答案< /a>.
As previous answers show, you need to convert first to an intermediate format. If the mp4 contains h264 bitstream, you can use:
A more detailed answer you can find here.
请阅读 FFMPEG 常见问题解答,了解有关加入文件的信息。
不幸的是,由于您使用的是 MP4 文件,简单的串联对您不起作用,因为 MP4 格式包含一个描述和包含偏移量的“标头”(尽管它不一定位于文件的开头)部分进入媒体数据。您需要将两个文件转码为可以串联的格式,然后从该格式生成 MP4 文件(这将生成适当的标头部分)。
Please read the FFMPEG FAQ for information about joining files.
Unfortunately, since you're using MP4 files, simple concatenation won't work for you because the MP4 format contains a "header" (although it doesn't necessarily have to be at the beginning of the file) section that describes and contains offsets into the media data. You will need to transcode both files to a format that can be concatenated and then generate an MP4 file from that format (which will generate an appropriate header section).
您无法串联 .mp4 文件,但可以串联 .mpg 文件。首先尝试使用 ffmpeg 将两个视频转换为 .mpg。然后,对两个 .mpg 文件运行简单的 linux cat 命令以创建组合的 .mpg 文件。之后,使用 ffmpeg 将串联的 .mpg 文件转换为 .mp4。这是一种迂回的方法,但它确实有效。您可以使用“命名管道”来减少命令数量,但结果是相同的。
You can't concatenate .mp4 files but you can concatenate .mpg files. Try converting both videos to .mpg first using ffmpeg. Then, run a simple linux cat command on both .mpg files to create a combined .mpg file. After that, convert the concatenated .mpg file to .mp4 using ffmpeg. This is sort of a roundabout approach but it works. You can use "named pipes" to reduce the number of commands but the result is the same.
您可以使用 ffmpeg 来完成此操作,但还有一个小工具,称为 MP4Box(GPAC),可以连接多个 MP4 文件。
在你的情况下,语法是
You can do this with
ffmpeg
, but there's also a little tool out there, calledMP4Box
(part of GPAC), that can concatenate multiple MP4 files.In your case, the syntax is
concat demuxer:快速并保持质量
如果所有输入都具有 相同的属性、格式和视频/音频流数量,则可以使用concat 解复用器。这可以让您无需重新编码即可连接,因此速度很快并且可以保持质量。
制作包含以下内容的
input.txt
:连接
如果出现错误
不安全的文件名
,请添加-safe 0
concat demuxer输入选项(在-i
之前)。如果您的输入不匹配
如果您的输入不同或任意,则:
使用 concat过滤器。请参阅如何在 ffmpeg 中连接具有不同属性的视频? 需要重新编码,但当您的输入是随机的时,这是更好的选择、混合的、不可预测的或任意的。
或者重新编码与大多数输入不匹配的输入,然后使用 concat demuxer。有很多示例在此网站上显示 如何 到 执行这个。
另请参阅FFmpeg Wiki:连接。
concat demuxer: fast and preserves quality
If all of the inputs have the same attributes, formats, and number of video/audio streams, then you can use the concat demuxer. This can allow you to concatenate without needing to re-encode, so it is fast and preserves quality.
Make
input.txt
containing the following:Concatenate
If you get error
Unsafe file name
add the-safe 0
concat demuxer input option (before-i
).If your inputs do not match
If your inputs are different or are arbitrary then either:
Use the concat filter. See How to concatenate videos in ffmpeg with different attributes? The requires re-encoding, but is the better choice when your inputs are random, mixed, unpredictable, or arbitrary.
Or re-encode the inputs that do not match the majority of inputs, then use the concat demuxer. There are many examples on this site showing how to do this.
Also see FFmpeg Wiki: Concatenate.
这可能不是最好的解决方案,因为它会创建临时文件。但我想为人们提供一个简单的答案作为替代方案:
This may not be the best solution, since it creates temporary file. But I would like to provide people with a straightforward answer as an alternative: