c - FFMPEG 滤镜图 'warning, too many B-frames in a row'

标签 c video filter ffmpeg racket

<分区>

我正在尝试将两个视频与 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]

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

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

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

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

我不明白为什么会出现此错误,因为我似乎将视频设置为具有相同的属性。我错过了什么?

此外,无论其值(value)如何,我使用的是 FFmpeg 的 C API 而不是命令行工具。我正在使用 libavformat/libavcodec/libavutil 对过滤器图进行编码/解码和 libavfilter。

最佳答案

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

因为我使用的是 Racket,所以我需要的行是这样的:

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

关于c - FFMPEG 滤镜图 'warning, too many B-frames in a row',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44764709/

相关文章:

java - Elasticsearch如何在aggs下获取过滤器的doc_count值?

c - 您想继续(y/n)问题吗

c - GNU AutoMake 中的显式中间对象文件

video - 将空白屏幕添加到视频网格中

actionscript-3 - 在 as3/AIR mobile 中从相机录制视频、叠加位图、添加音频、保存到设备

javascript - 在 EaselJS 或 TweenMax 中使用 Alpha 过滤器蒙版

powershell - 如何限制 Get-ChildItem 搜索的文件(或限制递归深度)?

arrays - 我哪里越界了?

c - 如何在 GTK 或 Cairo 中将纹理应用到四边形?

video - 如何从 Google Plus 嵌入视频?