ffmpeg concat 让视频更长

Posted

技术标签:

【中文标题】ffmpeg concat 让视频更长【英文标题】:ffmpeg concat makes video longer 【发布时间】:2017-09-20 14:11:46 【问题描述】:

我有 2 个要使用 ffmpeg 连接的视频文件

initial.mp4 视频:h264(高)(avc1 / 0x31637661)、yuv420p(tv)、720x720、1077 kb/s、15.98 fps、16 tbr、600 tbn、1200 tbc(默认)

结尾.mp4 视频:h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt470bg), 720x720 [SAR 1:1 DAR 1:1], 1287 kb/s, 25 fps, 25 tbr, 25k tbn, 50 tbc (默认

video_instructions_with_ending.txt

file initial.mp4
file initial.mp4
file initial.mp4
file ending.mp4

FFmpeg 命令

ffmpeg -f concat -i video_instructions_with_ending.txt -c copy output.mp4 -y

output.mp4 视频:h264 (High) (avc1 / 0x31637661), yuv420p(tv), 720x720, 27 kb/s, 0.43 fps, 48 tbr, 19200 tbn, 38400 tbc (默认)

输出文件应该是 6 秒。但是输出文件是3分32秒。

任何帮助将不胜感激

对于我使用的文件,您可以从:HERE获取它

【问题讨论】:

请参考this answer,我想这将是您的解决方案。 【参考方案1】:

我尝试了以下命令,它对我有用

ffmpeg -i initial.mp4 -i initial.mp4 -i initial.mp4 -i ending.mp4 -filter_complex concat=n=4:v=1:a=0 -f MOV output.mp4 -y

解释: FFmpeg 有三种 concat 方法

    concat 协议(ffmpeg -i 'concat:input1|input2' -codec 复制输出)。 - 将它用于二进制 concat 兼容文件,如 avi、mpeg-ts 文件 concat demuxer(您已经解释过的方法)- 当您想避免重新编码并且您的格式不支持文件级连接时使用。 concat 过滤器:(上面的答案)- 如果您需要重新编码,例如在应用过滤器时使用。

第三个选项适合这种情况,因为我们需要重新编码文件。

【讨论】:

嗨,阿伦,感谢您的解释。对于第三个选项,因为它是重新编码,我会遭受质量损失对吗? 不一定。我们可以应用其他参数来进行无损编码。有一个参数crf(0-51)。其中 0 表示完全无损,51 表示最有损。当我尝试使用 18 的 crf 时,我可以获得源比特率。以下是命令,我试过'ffmpeg -i initial.mp4 -i initial.mp4 -i initial.mp4 -i ending.mp4 -filter_complex concat=n=4:v=1:a=0 -crf 18 output.mp4 -y' 参考:trac.ffmpeg.org/wiki/Encode/H.264 这修复了我的issue,非常感谢!我以为我在使用 MP4 时要避免这种方法,但显然不是!非常感谢:)【参考方案2】:

ending.mp4 上运行此命令,然后与新文件连接:

ffmpeg -i ending.mp4 -c copy -video_track_timescale 600 newending.mp4

长话短说,时基不同,所以结尾视频会延长。有关时间戳和基准的上下文,请参阅 https://***.com/a/43337235/5726027。

【讨论】:

您好,感谢您的帮助。我试过了,不幸的是合并的视频没有 newending.mp4 。这是为什么呢? 您的视频没有相同的编码。一个或两个可能需要重新编码。

以上是关于ffmpeg concat 让视频更长的主要内容,如果未能解决你的问题,请参考以下文章

如何使用FFmpeg连接两个MP4文件? concat视频过滤器concat demuxer concat协议

FFmpeg concat 视频和音频不同步

ffmpeg concat demuxer 在加入视频时冻结我的视频帧

为啥带有 2 个视频的 ffmpeg concat 会丢失第二个音频?

FFmpeg用concat合并视频时,文件名中有单引号的转义方法

ffmpeg concat:“不安全的文件名”