libx264编码参数简介
2026/8/14 14:13:20 网站建设 项目流程

目录

一、码率控制三选一(最核心,互斥)

二、preset:速度 ↔ 压缩效率的总开关

三、tune:在 preset 之后、手设参数之前生效

四、GOP 与帧结构

五、编码分析

六、VBV:硬限码率(直播/硬件解码必用)

七、实时/低延迟专项(RTMP、WebRTC 网关、采集卡)

八、profile / level(兼容性闸门)

九、线程与日志

十、两条可直接抄的工程模板

1. 存档压片(质量优先)

2. RTMP 推流(延迟优先)

十一、一句话总结


觉得有用,就请您帮忙点赞转发收藏吧,您的鼓励是我创作的动力,多谢看官。
由于能力水平有限,文中的错误或不严谨的地方在所难免,还请批评指正。

本文系统拆解了 libx264 的核心编码参数体系,覆盖从入门到工程落地的关键逻辑:首先明确码率控制三模式——CRF(固定主观质量)、ABR(平均码率)、CQP(固定QP)的互斥关系与适用场景,给出 CRF 18~28 的实用选型区间;其次厘清 preset(速度/压缩效率权衡)与 tune(内容适配)的层级关系,点出zerolatency是实时推流核心开关;再详解 GOP 帧结构、VBV 硬限码率(解决直播峰值卡顿)、profile/level 兼容性边界,并对比默认分析参数与手动调优边界。最后提供「存档压片」「RTMP 低延迟推流」两套可直接抄的参数模板,总结“preset 定效率、CRF 定画质、VBV 定网络、tune 定内容”的心智模型,避免新手盲目调参。全文兼顾 FFmpeg 命令行与 C API 映射,偏工程实战而非手册堆砌。

一、码率控制三选一(最核心,互斥)

x264 内部只认三种 RC 模式,qp / bitrate / crf 不能同时设。优先级:bitrate > qp > crf。

模式

参数

目标

文件大小

画质分布

适用

CQP

-qp 24/rc.i_rc_method=X264_RC_CQP

固定 QP

不可控

每帧同损耗

算法验证

ABR

-b:v 2000k/X264_RC_ABR

平均码率

可控

一般

1-pass 流媒体

CRF

-crf 23/rc.f_rf_constant

固定主观质量

不可控

最好

存档/压片

  • CRF 范围 0–51(8-bit),0 无损,23 默认,18≈视觉无损,+6 码率减半,-6 翻倍。

  • 10-bit x264:CRF 范围 0–63。

  • 工程建议:

    • 存档/母版:-crf 18~20

    • 普通压片:-crf 21~23

    • Web/720p:-crf 24~28

  • qpmin/qpmax/qpstep:QP 上下限与帧间跳变限制(默认 0/51/4)。

  • ipratio=1.4 / pbratio=1.3:I/P、P/B 帧间 QP 比例。

  • aq-mode=1(方差 AQ)、aq-strength=1.0:暗部/纹理再分配码率,CRF 下必开。


二、preset:速度 ↔ 压缩效率的总开关

x264_param_default_preset()-preset

ultrafast → superfast → veryfast → faster → fast → medium(默认) → slow → slower → veryslow → placebo(别用)

越慢 → 同画质体积越小(veryslow 比 medium 小 10–20%),但 CPU 时间指数涨。

preset 内部改的关键项(了解即可,别手改除非你懂):

  • me=hex→umh→tesa

  • subme=0→11

  • ref=1→16

  • bframesb-adaptrc-lookaheadtrelliscabac8x8dctpartitions

经验:批量转码veryfast/fast,珍藏slow,实时ultrafast


三、tune:在 preset 之后、手设参数之前生效

tune不和 preset 互斥,按内容微调:

  • film:真人电影,轻微降 deblock

  • animation:动画,加 ref/bframes、强 deblock

  • grain:保留胶片颗粒(aq-strength↓、deblock↓)

  • stillimage:幻灯片

  • fastdecode:关 cabac/deblock,解端省 CPU

  • zerolatency实时推流神参,等价设bframes=0 rc-lookahead=0 sync-lookahead=0 no-mb-tree=1 sliced-threads=1


四、GOP 与帧结构

参数

含义

建议

keyint(i_keyint_max)

GOP 长度

10×fps,如 25fps→250,直播→30~60

min-keyint

最小关键帧间隔

直播设=keyint

scenecut

场景切换插 I 帧阈值

关实时:no-scenecut=1

bframes(i_bframe)

连续 B 帧数

默认 3,slow 下 6~8

b-adapt

B 帧放置策略

0/1/2,2 最优但慢

ref(i_frame_reference)

参考帧数

3~5 通用,>8 吃 DPB,硬件解码慎超 4~6

b-pyramid

允许 B 帧作参考

开(High profile)

weightp/weightb

权重预测

开,zerolatency 关


五、编码分析

  • me=umh:运动估计算法(dia/hex/umh/tesa)

  • subme=9:子像素精修级别

  • partitions=p8x8,b8x8,i8x8,i4x4:宏块划分

  • 8x8dct=1:High profile 特性

  • cabac=1:熵编码,关掉省解码 CPU 但体积涨 10–15%

  • deblock=0:0:环内去块,alpha/beta 可调

  • no-fast-pskip=1:防平区域跳过导致细节丢

  • rc-lookahead:前向决策帧类型(默认 40,zerolatency=0)

  • mb-tree:宏观块树 RC,实时关mbtree=0


六、VBV:硬限码率(直播/硬件解码必用)

CRF 也能加 VBV,变成“质量优先但不超峰峰”:

-crf 23 -maxrate 2500k -bufsize 5000k

对应:

  • rc.i_vbv_max_bitrate

  • rc.i_vbv_buffer_size

  • rc.f_vbv_buffer_init=0.9

ABR + VBV 就是“CBR-ish”推流标配。


七、实时/低延迟专项(RTMP、WebRTC 网关、采集卡)

C 层经典初始化:

x264_param_default_preset(&p, "ultrafast", "zerolatency"); p.i_keyint_max = 30; // 1s@30fps p.b_repeat_headers = 1; // 每个 IDR 带 SPS/PPS(FLV 必需) p.rc.i_rc_method = X264_RC_ABR; p.rc.i_bitrate = 2000; p.rc.i_vbv_max_bitrate = 2000; p.rc.i_vbv_buffer_size = 4000; p.b_mb_tree = 0; x264_param_apply_profile(&p, "high");

FFmpeg 等价:

-c:v libx264 -preset ultrafast -tune zerolatency \ -x264-params keyint=30:min-keyint=30:no-scenecut=1:bframes=0 \ -b:v 2000k -maxrate 2000k -bufsize 4000k -f flv rtmp://...

八、profile / level(兼容性闸门)

  • baseline:老移动/iOS 硬解,禁 cabac/8x8dct/B-pyramid

  • main:过渡

  • high:通用(默认选它)

  • high10/422/444:10bit/无损,浏览器不支持

level_idc按分辨率帧率查表(1080p30 一般 4.0,4.1 保险)。

设了profile不能 crf 0 / qp 0 无损


九、线程与日志

  • i_threads:0=自动(=逻辑核),嵌入式可设 1~2 防同步开销

  • i_log_levelX264_LOG_INFO调试用

  • b_repeat_headers:封装格式(FLV/MP4 流式写入)必须 1


十、两条可直接抄的工程模板

1. 存档压片(质量优先)

ffmpeg -i in.mov -c:v libx264 -preset slow -tune film \ -crf 20 -x264-params ref=4:me=umh:subme=9:b-adapt=2:aq-mode=2 \ -profile:v high -c:a aac -b:a 192k out.mkv

2. RTMP 推流(延迟优先)

ffmpeg -i in.mp4 -c:v libx264 -preset ultrafast -tune zerolatency \ -x264-params keyint=30:min-keyint=30:no-scenecut=1:bframes=0:rc-lookahead=0 \ -b:v 2500k -maxrate 2500k -bufsize 5000k -pix_fmt yuv420p \ -f flv rtmp://server/app/stream

十一、一句话总结

preset 决定“花多少 CPU 换压缩率”,crf 决定“画质底线”,tune 决定“对什么内容偏心”,VBV 决定“网络/解码器能不能扛”,keyint/bframes 决定“延迟和 seek 体验”。

新手永远先crf + preset slow + tune 内容类型,别手调 subme/me/aq 直到你能用x264 --fullhelp解释每一行输出。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询