You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FFmpeg使用libx265编码时如何在发送帧后立即获取packet

libx265编码帧输出延迟解决方法

你遇到的延迟问题是libx265默认开启的帧预分析(lookahead)机制导致的,编码器会缓存多帧做码率控制、帧类型决策,和FFmpeg通用编码API逻辑无关,可通过以下方式配置解决:

  • 优先使用零延迟预设:在初始化AVCodecContext时,给libx265传入tune=zerolatency参数,该参数会自动关闭所有引入延迟的特性,包括禁用B帧、关闭lookahead缓存、禁用帧级多线程缓存等,能实现发一帧立即出对应包的效果,示例配置代码如下:
    av_opt_set(codec_ctx->priv_data, "tune", "zerolatency", 0);
    
  • 若需要自定义参数平衡压缩率和延迟,可单独调整预分析相关参数:
    // 关闭帧预分析缓存
    av_opt_set(codec_ctx->priv_data, "lookahead", "0", 0);
    // 关闭码率控制预分析缓存
    av_opt_set(codec_ctx->priv_data, "rc-lookahead", "0", 0);
    // 禁用B帧,B帧需要参考前后帧会天然引入延迟
    codec_ctx->max_b_frames = 0;
    
  • API调用层面补充:每次调用avcodec_send_frame()发送完一帧后,需要循环调用avcodec_receive_packet()直到返回AVERROR(EAGAIN),避免漏读已经编码完成的包;如果需要强制输出所有缓存的包,可传入NULL给avcodec_send_frame()触发编码器刷新。

注意:关闭lookahead、开启零延迟模式会略微降低编码压缩率,若对压缩率有要求可将lookahead值设为1~2的小值,在延迟和压缩效率之间取平衡。

内容的提问来源于stack exchange,提问作者Zehui Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:15:03