gpt4 book ai didi

ffmpeg - 如何在不重新编码的情况下合并两个视频

转载 作者:行者123 更新时间:2023-12-04 05:11:28 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to concatenate two MP4 files using FFmpeg?

(27 个回答)


4年前关闭。




我正在尝试合并两个视频而不重新编码它们。

目前我使用的方法也非常耗时和资源。我只想合并而不重新编码它们。目前我正在使用

        exec ( "cpulimit -l 90 ffmpeg -i $filename1 -qscale 0  $intermediate1 &> stream1.log" );
exec ( "cpulimit -l 90 ffmpeg -i $filename2 -qscale 0 $intermediate2 &> stream2.log" );
$output = '/var/www/html/myserver/merg/'.uniqid().'_merge.'.$ext;
exec ( "cpulimit -l 90 cat $intermediate1 $intermediate2 | ffmpeg -i - -qscale 0 $output &> stream3.log" );

以上需要很多时间..我想要一个快速的方法来做到这一点。

最佳答案

具有相同编解码器的文件串联:

ffmpeg 中有两种方法可用于连接相同类型的文件:
the concat demuxer & the concat protocol

解复用器更加灵活——它需要相同的编解码器,但可以使用不同的容器格式;它可以与任何容器格式一起使用,而 concat 协议(protocol)仅适用于少数几个容器。

concat demuxer 指令:

创建一个名为 vidlist.txt 的文本文件,格式如下:

file '/path/to/clip1'
file '/path/to/clip2'
file '/path/to/clip3'

请注意,这些可以是相对路径或绝对路径。

然后发出命令:
ffmpeg -f concat -safe 0 -i vidlist.txt -c copy output
如果不是很清楚,请将 output 替换为您希望生成的视频文件名(无论是 output.mp4、output.mkv、output.avi)ffmpeg 将使用 container indicated通过扩展。

这些文件将按照它们在 vidlist.txt 中出现的顺序流式复制到输出容器中。 “复制编解码器”是 快速燃烧。

编辑:请注意,尽管文档说您不需要 -safe 0如果路径是相对的,我的测试表明这是一个要求。这可能会因您的 ffmpeg 版本而异。

the docs. 中有自动生成文件的提示。

注意:所有剪辑必须已经存在,否则命令将失败,因为在读取整个列表之前解码不会开始。

concat 协议(protocol)说明:
ffmpeg -i "concat:video1.ts|video2.ts|video3.ts" -c copy output.ts
注意:如上所述,concat 协议(protocol)在它支持的流和容器方面受到严格限制,所以我从不使用它。以上仅包含在试图创建一个彻底的答案中。对于大多数项目来说,concat demuxer 是一个更好的选择。

另一种建议:我个人更喜欢使用 Matroska 容器,因为它具有灵 active 和低开销,并使用 mkvmerge -o output.mkv input1.mkv + input2.mkv 加入具有相同编码的视频

具有不同编解码器的文件串联:

如果您的剪辑不使用相同的音频和视频编解码器和/或具有不同的速率,那么您在加入之前就卡住了对中间文件的重新编码,众所周知,这既耗费时间又耗费资源。

请注意 special characters可以破坏一些东西,所以如果你的文件名中有这些,你需要 deal with them.

资料来源:
经验

https://ffmpeg.org/ffmpeg-formats.html

关于ffmpeg - 如何在不重新编码的情况下合并两个视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49371422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com