ffmpeg - 强制 avcodec_receive_packet 返回数据包
问题描述
有相关的答案,但他们没有回答我的问题。我正在使用 FFmpeg api 仅对内部 mpeg1video 进行编码,我想从第一帧开始立即从编码器中取出数据包,但我从 avcodec_receive_packet 得到 AVERROR(EAGAIN)。我读到这个:
在解码或编码开始时,编解码器可能会接受多个输入帧/数据包而不返回帧,直到其内部缓冲区被填满
有没有办法解决这个问题,例如可以通过改变内部缓冲区大小?
解决方案
rc-lookahead
使用 libx264 编码器,尝试为keyint/min-keyint
或设置较小的值vbv-bufsize
。例如:设置rc-lookahead=5
使编码器在输出第一个编码数据包之前只期望 5 帧。请注意,这可能会增加编码数据包的大小。
希望您能找到与 mpeg1video 编码器类似的选项。
推荐阅读
- kubernetes-helm - 将相同的 helm 值分配给多个目标
- f# - F# 和 Series,如何编写 Series.choose?
- configure - 在 MobaXterm 上编译 Poly/ML:ar u 选项
- python - 如何使用 np.arange 获取一组值?
- elixir - 如何使 Plug.ErrorHandler 和其他 Plug 同时工作?
- java - 如何从 xsd 生成 Json 兼容的 POJO
- php - 创建每个数组项的路径
- firebase - 如何在 cloudbuild 中使用 firebase 持续部署?
- sql-server-2012 - 使用 SSMS“生成和发布脚本向导”生成的存储过程计数不同
- mysql - 将不同的计数查询分组到一个结果表中