FFmpeg 软编码 H264、H265
本文最后更新于:1 年前
Reference
- 《FFmpeg 从入门到精通》
x264
参数
参数|类型|说明
–|–
preset|字符串|编码器预设参数
tune|字符串|调优编码参数
profile|字符串|编码 profile 档级设置
level|字符串|编码 level 层级设置
wpredp|字符串|P 帧预测设置
x264opts|字符串|设置 x264 专有参数
crf|浮点数|选择质量恒定质量模式
crf_max|浮点数|选择质量恒定质量模式最大值
qp|整数|恒定量化参数控制
psy|浮点数|只用 psychovisual 优化
rc-lookahead|整数|设置预读帧设置
weightb|浮点数|B 帧预测设置
weightp|整数|设置预测分析方法:none、simple、smart 三种模式
ssim|布尔|计算打印 SSIM 状态
intra-refresh|布尔|定时刷 I 帧以替代 IDR 帧
bluray-compat|布尔|蓝光兼容参数
b-bias|整数|B 帧使用频率设置
mixed-refs|布尔|每个 partition 一个参考,而不是每个宏块一个参考
8x8dct|布尔|8x8 矩阵变换,用在 high profile
aud|布尔|带 AUD 分隔标识
mbtree|布尔|宏块树频率控制
deblock|字符串|环路滤波参数
cplxblur|浮点数|减少波动 QP 参数
partitions|字符串|逗号分隔的 partition 列表,可以包含的值有 p8x8、p4x4、b8x8、i8x8、i4x4、none、all
direct-pred|整数|运动向量预测模式
slice-max-size|整数|Slice 的最大值
nal-hrd|整数|HRD 信号信息设置:None、VBR、CBR 设置
motion-est|整数|运动估计方法
forced-idr|布尔|强行设置关键帧为 IDR 帧
coder|整数|编码器类型包括 default、cavlc、cabac、vlc、ac
b_strategy|整数|I/P/B 帧选择策略
chromaoffset|整数|QP 色度和亮度之间的差异参数
sc_threshold|整数|场景切换阈值参数
noise_reduction|整数|降噪处理参数
x264-params|字符串|与 x264opts 操作相同
preset
ultrafast
最快的编码方式。
1、输入命令:
1 |
|
2、输出结果:
superfast
veryfast
faster
fast
medium
slow
slower
veryslow
placebo
最慢的编码方式。
tune
在使用 FFmpeg 与 x264 进行 H264 直播编码并进行推流时,只用 tune 参数的 zerolatency 将会提升效率,因为其降低了因编码导致的延迟。
zerolatency
1、输入命令:
1 |
|
2、输出结果:
profile
x264 共支持 7 种 profile。
|Baseline|Extented|Main|High|High10|High4:2:2|High4:4:4(Predictive)
–|–
I 与 P 分片|支持|支持|支持|支持|支持|支持|支持
B 分片|不支持|支持|支持|支持|支持|支持|支持
SI 与 SP 分片|不支持|支持|不支持|不支持|不支持|不支持|不支持
多参考帧|支持|支持|支持|支持|支持|支持|支持
环路去块滤波|支持|支持|支持|支持|支持|支持|支持
CAVLC 熵编码|支持|支持|支持|支持|支持|支持|支持
CABAC 熵编码|不支持|不支持|支持|支持|支持|支持|支持
FMO|不支持|支持|不支持|不支持|不支持|不支持|不支持
ASO|不支持|支持|不支持|不支持|不支持|不支持|不支持
RS|不支持|支持|不支持|不支持|不支持|不支持|不支持
数据分区|支持|支持|不支持|不支持|不支持|不支持|不支持
场编码 PAFF/MBAFF|不支持|支持|支持|支持|支持|支持|支持
4:2:0 色度格式|支持|支持|支持|支持|支持|支持|支持
4:0:0 色度格式|不支持|不支持|不支持|支持|支持|支持|支持
4:2:2 色度格式|不支持|不支持|不支持|不支持|不支持|支持|支持
4:4:4 色度格式|不支持|不支持|不支持|不支持|不支持|不支持|支持
8 位采样深度|支持|支持|支持|支持|支持|支持|支持
9 和 10 位采样深度|不支持|不支持|不支持|不支持|支持|支持|支持
11 至 14 位采样深度|不支持|不支持|不支持|不支持|不支持|不支持|支持
8x8 与 4x4 转换适配|不支持|不支持|不支持|支持|支持|支持|支持
量化计算矩阵|不支持|不支持|不支持|支持|支持|支持|支持
分离 Cb 和 Cr 量化参数控制|不支持|不支持|不支持|支持|支持|支持|支持
分离色彩平面编码|不支持|不支持|不支持|不支持|不支持|不支持|支持
分离无损编码|不支持|不支持|不支持|不支持|不支持|不支持|支持
level
最大解码速度 | 帧最大尺寸 | 视频编码层最大码率 | 最大分辨率@最大帧率(最大存储帧数)切换其他细节 | |||||
亮度采样 | 宏块 | 亮度采样 | 宏块 | Baseline、Extended 和 Main Profile | High Profile | High 10 Profile | ||
1 | 380160 | 1485 | 25344 | 99 | 64 | 80 | 192 | [email protected](8) [email protected](4) |
1b | 380160 | 1485 | 25344 | 99 | 128 | 160 | 384 | [email protected](8) [email protected](4) |
1.1 | 768000 | 3000 | 101376 | 396 | 192 | 240 | 576 | [email protected](9) [email protected](3) [email protected](2) |
1.2 | 1536000 | 6000 | 101376 | 396 | 384 | 480 | 1152 | [email protected](7) [email protected](6) |
1.3 | 3041280 | 11880 | 101376 | 396 | 768 | 960 | 2304 | [email protected](7) [email protected](6) |
2 | 3041280 | 11880 | 101376 | 396 | 2000 | 2500 | 6000 | [email protected](7) [email protected](6) |
2.1 | 3041280 | 19800 | 202752 | 396 | 4000 | 5000 | 12000 | [email protected](7) [email protected](6) |
2.2 | 5068800 | 20250 | 414720 | 1620 | 4000 | 5000 | 12000 | [email protected](12) [email protected](10) [email protected](6) [email protected](5) |
3 | 5184000 | 40500 | 414720 | 1620 | 10000 | 12500 | 30000 | [email protected](12) [email protected](10) [email protected](6) [email protected](5) |
3.1 | 10368000 | 108000 | 921600 | 3600 | 14000 | 17500 | 42000 | [email protected](13) [email protected](11) [email protected](5) |
3.2 | 27648000 | 216000 | 1310720 | 5120 | 20000 | 25000 | 60000 | [email protected](5) [email protected](4) |
4 | 55296000 | 245760 | 2097152 | 8192 | 20000 | 25000 | 60000 | [email protected](9) [email protected](4) [email protected](4) |
4.1 | 62914560 | 245760 | 2097152 | 8192 | 50000 | 62500 | 150000 | [email protected](9) [email protected](4) [email protected](4) |
4.2 | 133693440 | 522240 | 2228224 | 8740 | 50000 | 62500 | 150000 | [email protected](9) [email protected](4) [email protected](4) |
5 | 150994944 | 589824 | 5652480 | 22080 | 135000 | 168750 | 405000 | [email protected](13) [email protected](13) [email protected](12) [email protected](5) [email protected](5) |
5.1 | 251658240 | 983040 | 9437184 | 36864 | 240000 | 300000 | 720000 | [email protected](16) [email protected](9) [email protected](5) [email protected](5) [email protected](5) [email protected](5) |
5.2 | 530841600 | 2073600 | 9437184 | 36864 | 240000 | 300000 | 720000 | [email protected](16) [email protected](9) [email protected](5) [email protected](5) [email protected](5) [email protected](5) |
生成 baseline 视频
1、输入命令:
1 |
|
2、输出结果:
生成 high 视频
1、输入命令:
1 |
|
2、输出结果:
sc_threshold
在 FFmpeg 中,可以通过命令行的 -g 参数设置以帧数间隔为 GOP 的长度,但是当遇到场景切换时,例如从一个画面突然变成另外一个画面时,会强行插入一个关键帧,这时 GOP 的间隔将会重新开始。可以通过 sc_threshold 参数设置是否在场景切换时插入关键帧。
1、输入命令:
1 |
|
2、输出结果:
x264opts
可以通过该参数设置 x264 内部私有参数,比如设置 I 帧、P 帧、B 帧的顺序及规律等。
不允许 B 帧
1、输入命令:
1 |
|
2、输出结果:
每两个 P 帧之间存放 3 个 B 帧
1、输入命令:
1 |
|
2、输出结果:
nal-hrd
编码可以设置为 VBR 或 CBR 模式,VBR 为可变码率,CBR 为恒定码率。
FFmpeg 可以通过参数 -b:v 指定视频的编码码率,但是设定的码率是平均码率,并不能很好的控制最大码率和最小码率的波动,如果需要控制最大码率和最小码率,则需要使用 FFmpeg 的三个参数 -b:v、maxrate、minrate。
同时,为了更好地控制编码时的波动,还可以设置编码时 buffer 的大小,buffer 的大小使用参数 -bufsize 设置即可,buffer 的设置不是越小越好,而是要设置得恰到好处。
比如设置 1M bit/s 码率,bufsize 为 50 KB。
1、输入命令:
1 |
|
2、输出结果: