我正在尝试将mp4
文件连接成一个文件。concat
由于与此问题无关的原因,我试图直接使用过滤器(因此-i list.txt
不是有效的解决方案)。所有有问题的视频文件的长度都在 4 到 20 分钟之间。
我正在执行的操作:
% ffmpeg -i f01.mp4 -i f02.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.mp4
Run Code Online (Sandbox Code Playgroud)
这是我从FFmpeg Filters Documentation: concat and Concatenate Videos Together Using FFMPEG等参考资料中对这个命令形式的理解!.
发生什么了:
ffmpeg
提供大量输出,因为它检查每个流的元数据,然后开始处理。在短暂的持续时间(几秒到一分钟左右,似乎与第一个视频的持续时间成正比)后,我开始看到这样的消息:
More than 1000 frames duplicated
More than 10000 frames duplicated 512kB time=00:00:00.12 bitrate=32771.0kbits/s dup=33365 drop=0 speed=0.00449x
More than 100000 frames duplicated 1280kB time=00:00:00.17 bitrate=61442.1kbits/s dup=66730 drop=0 speed=0.00272x
Run Code Online (Sandbox Code Playgroud)
...然后这个过程永远不会完成。如果我让我的计算机运行 24 小时,ffmpeg
仍在使用最大可用 CPU (200-300%)。输出文件的长度为 48 个字节。
注意:每个输入只有几分钟,因此单独重新编码每个输入只需要几分钟。
注意:如果我将命令更改f01.mp4
为用于源 0 和源 1,该命令将在 5 分钟内按预期完成:
More than 1000 frames duplicated
More than 10000 frames duplicated 512kB time=00:00:00.12 bitrate=32771.0kbits/s dup=33365 drop=0 speed=0.00449x
More than 100000 frames duplicated 1280kB time=00:00:00.17 bitrate=61442.1kbits/s dup=66730 drop=0 speed=0.00272x
Run Code Online (Sandbox Code Playgroud)
完整输出:
这是运行的完整输出,以防万一:
% # example that works:
% # note, however, that this just repeats the same source twice
% ffmpeg -i f01.mp4 -i f01.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" output.mp4
Run Code Online (Sandbox Code Playgroud)
Gya*_*yan 15
正如日志中的警告所说,Frame rate very high for a muxer not efficiently supporting it.
发生这种情况是因为 concat 取消了流帧速率,当tbr
所有视频流的 不匹配时就会发生这种情况。ffmpeg 然后将使用 time_base 作为有效帧速率,然后复制帧以匹配该帧速率。在这种情况下,它是 90000,因此这有效地增加了资源使用并减慢了进程。
添加-vsync 2
以避免帧重复。
ffmpeg -i f01.mp4 -i f02.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]" -vsync 2 -map "[v]" -map "[a]" output.mp4
归档时间: |
|
查看次数: |
1708 次 |
最近记录: |