ffmpeg - 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
,libavi
和ffmpeg
。
编辑:似乎 B 帧被禁用:codec_context.has_b_frames
是False
解决方案
推荐阅读
- asp.net - 验证 html5 两个提交按钮 .net
- android - 如何在 react-native 中缩小 WebView?
- javascript - 将图像设置为页面在 React 中呈现的第一张图像
- sas - 手动和由 SAS 完成时的卡方检验结果差异
- reactjs - 模拟 textarea Jest 测试的更改
- opengl - 将递归渲染的场景显示到平面中
- sql - 数据类型等效项:MS Access 表 ↔ 'CREATE TABLE' 查询 ↔ ODBC SQL
- java - 使用 switch 语句设置对象变量
- vb.net - 作为图形对象的球和曲线之间的碰撞
- php - PHP包括在错误的地方搜索