首页 > 解决方案 > pyav / ffmpeg / libav 选择 P 帧和 B 帧的数量

问题描述

我从 rtsp 源流式传输。看起来收到的一半帧是关键帧。有没有办法降低这个百分比并拥有更多的 P 帧和 B 帧?如果可能的话,我想增加 P 帧的数量(不是 B 帧之一)。我正在使用pyav哪个是libav( ffmpeg)的 Python 包装器

代码:

container = av.open(
    url, 'r',
    options={
        'rtsp_transport': 'tcp',
        'stimeout': '5000000',
        'max_delay': '5000000',
    }
)
stream = container.streams.video[0]
codec_context = stream.codec_context
codec_context.export_mvs = True
codec_context.gop_size = 25  

for packet in self.container.demux(video=0):
    for video_frame in packet.decode():
        print(video_frame.is_key_frame)

输出:

True
False
True
False
...

注意 1:我无法编辑源代码。我可以编辑用于流式传输视频的代码。

注 2:相同的解决方案应适用于pyav,libaviffmpeg

编辑:似乎 B 帧被禁用:codec_context.has_b_framesFalse

标签: ffmpeglibavpyav

解决方案


推荐阅读