FFmpeg 软编码 H264、H265

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

文章作者:魏超

发布时间:2018年05月27日 - 16:05

最后更新:2018年12月07日 - 19:12

原始链接:http://www.weichao.io/2018/05/27/FFmpeg-软编码-H264、H265/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

---------------------本文结束---------------------