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
ffmpeg -i guibu.mp4 -vcodec libx264 -preset ultrafast -b:v 2000k output.mp4

2、输出结果:


superfast

veryfast

faster

fast

medium

slow

slower

veryslow

placebo

最慢的编码方式。

tune

在使用 FFmpeg 与 x264 进行 H264 直播编码并进行推流时,只用 tune 参数的 zerolatency 将会提升效率,因为其降低了因编码导致的延迟。

zerolatency

1、输入命令:

1
ffmpeg -i guibu.mp4 -vcodec libx264 -tune zerolatency -b:v 2000k output_tune_zerolatency.mp4

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 ProfileHigh ProfileHigh 10 Profile
1380160148525344996480192[email protected](8)
[email protected](4)
1b38016014852534499128160384[email protected](8)
[email protected](4)
1.17680003000101376396192240576[email protected](9)
[email protected](3)
[email protected](2)
1.2153600060001013763963844801152[email protected](7)
[email protected](6)
1.33041280118801013763967689602304[email protected](7)
[email protected](6)
2304128011880101376396200025006000[email protected](7)
[email protected](6)
2.13041280198002027523964000500012000[email protected](7)
[email protected](6)
2.250688002025041472016204000500012000[email protected](12)
[email protected](10)
[email protected](6)
[email protected](5)
35184000405004147201620100001250030000[email protected](12)
[email protected](10)
[email protected](6)
[email protected](5)
3.1103680001080009216003600140001750042000[email protected](13)
[email protected](11)
[email protected](5)
3.22764800021600013107205120200002500060000[email protected](5)
[email protected](4)
45529600024576020971528192200002500060000[email protected](9)
[email protected](4)
[email protected](4)
4.162914560245760209715281925000062500150000[email protected](9)
[email protected](4)
[email protected](4)
4.2133693440522240222822487405000062500150000[email protected](9)
[email protected](4)
[email protected](4)
5150994944589824565248022080135000168750405000[email protected](13)
[email protected](13)
[email protected](12)
[email protected](5)
[email protected](5)
5.1251658240983040943718436864240000300000720000[email protected](16)
[email protected](9)
[email protected](5)
[email protected](5)
[email protected](5)
[email protected](5)
5.25308416002073600943718436864240000300000720000[email protected](16)
[email protected](9)
[email protected](5)
[email protected](5)
[email protected](5)
[email protected](5)

生成 baseline 视频

1、输入命令:

1
ffmpeg -i guibu.mp4 -vcodec libx264 -profile:v baseline -level 3.1 -s 352x288 -an -y -t 10 output_baseline.ts

2、输出结果:


生成 high 视频

1、输入命令:

1
ffmpeg -i guibu.mp4 -vcodec libx264 -profile:v high -level 3.1 -s 352x288 -an -y -t 10 output_baseline.ts

2、输出结果:


sc_threshold

在 FFmpeg 中,可以通过命令行的 -g 参数设置以帧数间隔为 GOP 的长度,但是当遇到场景切换时,例如从一个画面突然变成另外一个画面时,会强行插入一个关键帧,这时 GOP 的间隔将会重新开始。可以通过 sc_threshold 参数设置是否在场景切换时插入关键帧。

1、输入命令:

1
ffmpeg -i guibu.mp4 -c:v libx264 -g 50 -t 60 -sc_threshold 0 output_sc_threshold.mp4

2、输出结果:

x264opts

可以通过该参数设置 x264 内部私有参数,比如设置 I 帧、P 帧、B 帧的顺序及规律等。

不允许 B 帧

1、输入命令:

1
ffmpeg -i guibu.mp4 -c:v libx264 -x264opts "bframes=0" -g 50 -sc_threshold 0 output_no_bframe.mp4

2、输出结果:


每两个 P 帧之间存放 3 个 B 帧

1、输入命令:

1
ffmpeg -i guibu.mp4 -c:v libx264 -x264opts "bframes=3:b-adapt=0" -g 50 -sc_threshold 0 output_pbframe.mp4

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
ffmpeg -i guibu.mp4 -c:v libx264 -x264opts "bframes=10:b-adapt=0" -b:v 1000k -maxrate 1000k -minrate 1000k -bufsize 50k -nal-hrd cbr -g 50 -sc_threshold 0 output_nal_hrd.mp4

2、输出结果:



FFmpeg 软编码 H264、H265
https://weichao.io/0699826828e0/
作者
魏超
发布于
2018年5月27日
更新于
2022年12月4日
许可协议