首页 > 解决方案 > 转换失败。关闭 ffmpeg 时队列中剩余 2 帧

问题描述

我简化的 ffmpeg 命令(较长的有 300 多个文件)如下。

ffmpeg -i "v1.mp4" -i "v2.mp4" -i "v3.mp4"
    -filter_complex "[0:v:0][1:v:0][2:v:0]concat=n=3:v=1:a=0,fps=fps=30[cv1]; 
        [0:a:0][1:a:0][2:a:0]concat=n=3:v=0:a=1,asetpts=N/SR/TB[ca1]; 
        [cv1]setpts=0.25*PTS[v4]; 
        [ca1]atempo=4,asetpts=N/SR/TB[a4]" 
    -c:v h264_nvenc -map "[v4]" -map "[a4]" x4_output_0.mp4

视频编码正在工作,但随后中断,输出文件似乎被截断。输出文件的大小几乎是应有的大小,但无法读取。

Video encoding failed\r\n
[aac @ 00000248a7856840] Qavg: 325.600\r\n
[aac @ 00000248a7856840] 2 frames left in the queue on closing\r\n
[aac @ 00000248a78595c0] Qavg: 236.279\r\n[aac @ 00000248a78595c0] 
2 frames left in the queue on closing\r\n
[aac @ 00000248a7855140] Qavg: 2729.299\r\n
[aac @ 00000248a7855140] 2 frames left in the queue on closing\r\n
[aac @ 00000248a785bec0] Qavg: 1158.664\r\n
[aac @ 00000248a785bec0] 2 frames left in the queue on closing\r\n
Conversion failed!\r\n")
  1. 该错误是否与 .mp4 的音频部分有关aac @ ...
  2. 错误消息中的含义是什么Qavg
  3. codec_time_base和 the之间的视频流有什么区别time_base(请参阅下面的视频属性频率的区别)?

以下是具有超过 1 个不同值的所有视频的视频属性频率。它的形式[(value, frequency), (value, frequency),...]

codec_time_base --- [('1/60', 384), ('1001/60000', 7), ('50/2997', 1)]
has_b_frames --- [(0, 336), (2, 56)]
level --- [(31, 336), (30, 56)]
r_frame_rate --- [('30/1', 384), ('30000/1001', 7), ('2997/100', 1)]
avg_frame_rate --- [('30/1', 384), ('30000/1001', 7), ('2997/100', 1)]
time_base --- [('1/30', 383), ('1/30000', 7), ('1/2997', 1), ('1/15360', 1)]

所有这些视频文件中的音频属性都相同。

codec_time_base --- [('1/48000', 386), ('1/44100', 6)]
sample_rate --- [('48000', 386), ('44100', 6)]
time_base --- [('1/48000', 386), ('1/44100', 6)]
  1. 这里的某些视频文件是否有可能导致编码故障?

标签: videoffmpegvideo-processing

解决方案


我的视频在 0:08“开始”并且无法再往前搜索,尽管 0:08 是我大致想要的开始时间。

解决我的错误的是添加参数:

-max_muxing_queue_size 9999

这也解决了我的错误Too many packets buffered for output stream 0:1.

这似乎是初始音频和视频不同步的帧率问题(奇怪的帧率或时间异常),并且调整该-r值也可以解决它。

我得到答案的线程有更多技术故障,说明为什么会发生这种情况以及这个 3 年以上错误报告的替代解决方案https://trac.ffmpeg.org/ticket/6375

祝你好运!


推荐阅读