- 《FFmpeg 从入门到精通》
264
参数
参数 | 类型 | 说明 |
---|---|---|
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 Profile | High Profile | High 10 Profile | ||
1 | 380160 | 1485 | 25344 | 99 | 64 | 80 | 192 | 128x96@30.9(8) 176x144@15.0(4) |
1b | 380160 | 1485 | 25344 | 99 | 128 | 160 | 384 | 128x96@30.9(8) 176x144@15.0(4) |
1.1 | 768000 | 3000 | 101376 | 396 | 192 | 240 | 576 | 176x144@30.3(9) 320x240@10.0(3) 352x288@7.5(2) |
1.2 | 1536000 | 6000 | 101376 | 396 | 384 | 480 | 1152 | 320x240@20.0(7) 352x288@15.2(6) |
1.3 | 3041280 | 11880 | 101376 | 396 | 768 | 960 | 2304 | 320x240@36.0(7) 352x288@30.0(6) |
2 | 3041280 | 11880 | 101376 | 396 | 2000 | 2500 | 6000 | 320x240@36.0(7) 352x288@30.0(6) |
2.1 | 3041280 | 19800 | 202752 | 396 | 4000 | 5000 | 12000 | 352x480@30.0(7) 352x576@25.0(6) |
2.2 | 5068800 | 20250 | 414720 | 1620 | 4000 | 5000 | 12000 | 352x480@30.7(12) 352x576@25.6(10) 720x480@15.0(6) 720x576@12.5(5) |
3 | 5184000 | 40500 | 414720 | 1620 | 10000 | 12500 | 30000 | 352x480@61.4(12) 352x576@51.1(10) 720x480@30.0(6) 720x576@25.0(5) |
3.1 | 10368000 | 108000 | 921600 | 3600 | 14000 | 17500 | 42000 | 720x480@80.0(13) 720x576@66.7(11) 1280x720@30.0(5) |
3.2 | 27648000 | 216000 | 1310720 | 5120 | 20000 | 25000 | 60000 | 1280x720@60.0(5) 1280x1024@42.2(4) |
4 | 55296000 | 245760 | 2097152 | 8192 | 20000 | 25000 | 60000 | 1280x720@68.3(9) 1920x1080@30.1(4) 2048x1024@30.0(4) |
4.1 | 62914560 | 245760 | 2097152 | 8192 | 50000 | 62500 | 150000 | 1280x720@68.3(9) 1920x1080@30.1(4) 2048x1024@30.0(4) |
4.2 | 133693440 | 522240 | 2228224 | 8740 | 50000 | 62500 | 150000 | 1280x720@145.1(9) 1920x1080@64.0(4) 2048x1080@60.0(4) |
5 | 150994944 | 589824 | 5652480 | 22080 | 135000 | 168750 | 405000 | 1920x1080@72.3(13) 2048x1024@72.0(13) 2048x1080@67.8(12) 2560x1920@30.7(5) 3672x1536@26.7(5) |
5.1 | 251658240 | 983040 | 9437184 | 36864 | 240000 | 300000 | 720000 | 1920x1080@120.5(16) 2560x1920@51.2(9) 3840x2160@31.7(5) 4096x2048@30.0(5) 4096x2160@28.5(5) 4096x2304@26.7(5) |
5.2 | 530841600 | 2073600 | 9437184 | 36864 | 240000 | 300000 | 720000 | 1920x1080@172.0(16) 2560x1920@108.0(9) 3840x2160@66.8(5) 4096x2048@63.3(5) 4096x2160@60.0(5) 4096x2304@56.3(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、输出结果:
文章评论