【问题标题】:FFMPEG filtergraph 'warning, too many B-frames in a row' [closed]FFMPEG filtergraph'警告,连续的B帧太多'[关闭]
【发布时间】:2017-11-29 14:07:04
【问题描述】:

我正在尝试将两个视频与 FFmpeg 的过滤图一起附加。一个视频的大小为 1920x1080,速度为 30fps,另一个视频大小为 1280x720,速度为 25fps。两者都使用 yuv420p,并且具有相同的像素密度。我目前正在忽略音轨。以下是我的过滤图:

[video2]fifo[video3];
[video3]pad=width=1920:height=1080[video9];
[video9]fps=fps=25[video11];
[video11]setpts=expr=PTS-STARTPTS[video17];

[video6]fifo[video7];
[video7]pad=width=1920:height=1080[video13];
[video13]fps=fps=25[video15];
[video15]setpts=expr=PTS-STARTPTS[video19];

[video17][video19]concat=v=1:a=0:n=2[video21];
[video21]pad=width=1920:height=1080[video23];
[video23]fps=fps=25[video25];
[video25]format=pix_fmts=yuv420p[video27]

第一个链尝试将第一个视频转换为通用格式,该格式从 0 开始用于 concat 过滤器。第二条链的作用与第一条相同。最后,第三条链将它们连接在一起,并为生成的播放列表设置一些属性。

不幸的是,当我运行这个错误时,ffmpeg 反复输出:

[mpeg4 @ 0x7fc16a810600] warning, too many B-frames in a row

完成后,我看到第一个视频,填充到正确的分辨率和帧速率,但我看到的是黑色而不是第二个视频。此外,整个视频有几天的长度,从第一个视频开始,到几天的黑色结束。

我无法弄清楚为什么会出现此错误,因为我似乎将视频设置为具有相同的属性。我错过了什么?

另外,我使用的是 FFmpeg 的 C API,而不是命令行工具。我正在使用 libavformat/libavcodec/libavutil 为 filtergraph 进行编码/解码和 libavfilter。

【问题讨论】:

  • 这个问题似乎离题了,因为它不在帮助中心所述的讨论范围内。
  • 违反了哪一点?
  • 我的意思是,这似乎是一个特定的编程相关问题。
  • 用ffmpeg编码视频跟写软件到底有什么关系?
  • (FFmpeg CLI Qs go on SuperUser。)该错误看起来像解码器错误。当您在那里交叉发布时,请包含完整的日志。

标签: c video filter ffmpeg racket


【解决方案1】:

正如@Mulvya 在 cmets 中指出的那样,这个错误实际上与 filtergraph 无关,而是与编码器/解码器有关。播放列表中的两个文件之一导致了此错误,设置 AVCodecContext 结构的 max_b_frames 可以解决问题。

由于我使用的是 Racket,所以我需要的行是这样的:

(set-avcodec-context-max-b-frames! ctx 8)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2016-12-14
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多