x264是所有H264编码器中运行效率最高、实现功能最强大的编码器.
x264参数分类
预设值
- preset fast/slow : 编码速度值预设, fast: 编码速度快 质量较低 适合实时通讯场景; slow: 编码速度慢 质量高 适合视频点播场景.
- tune : 与质量密切相关, 其可选参数有电影、动画、图片等几个等级, 清晰度帧率各有差异. (该参数与 preset 并不互斥, 但优先使用预设值)
帧相关参数
- keyint : 一组GOP中的帧的数量, 默认是250帧. 设置B帧增大GOP zise可以让压缩率更高降低码流; 如果要避免实时通讯中出现的丢包导致的卡顿, 把GOP设置小一些, 使I帧密度增大; 编解码速度更快.
- min-keyint : 与场景切换密切相关, 在一个GOP内 如果出现场景切换 就会根据这个值插入一个关键帧.
- scenecut : 判定场景切换的值, 图像变化超过百分比多少时, 则认定为场景发生了切换.
- bframes : 连续B帧的最大数量, 默认3帧.
- ref : 参考帧数量
- no-deblock / deblock : 不使用 /使用滤波器, 解码时 区块预测会导致预测误差从而出现马赛克, 使用滤波器可以进行平滑处理.
- no-cabac : 不使用cabac熵编码 (使用cabac压缩比更高).
码流的控制
- Qp 关注量化器, 比crf码流大且与bitrate / crf 互斥.
- Bitrate : 码流, 无法控制质量, 但是间接控制质量, 与质量成正相关.
- Crf : 关注质量, 默认23, 数值越低越好.
- Qmin : 量化器相关, 默认10.
- Qmax : 量化器相关, 默认51 (视频质量会很差).
- Qpstep : 量化器相关, 两帧之间量化器的最大变化, 默认4.
编码分析
- Partitions : 宏块划分, p8x8 : P帧8x8, b8x8, i8x8, i4x4
- Me : 运动评估算法, 钻石算法、六边形算法...
输出
-
SAR : 设置输出的宽高比
-
fps : 帧率
-
level : 输出规格 支持不同的最大分辨率.
示例:
ffmpeg -vsync 1 -async 1 -i xxx.flv -b:v 200k -maxrate 250k -bufsize 400k -pix_fmt yuv420p -vcodec libx264 -coder 1 -refs 3 -bf 5 -flags +loop -deblock -1:-1 -partitions i4x4+i8x8+p8x8+b8x8 -me_method umh -g 60 -keyint_min 30 -qmin 0 -qmax 69 -qdiff 2 out.mp4
-
-vsync 1 -async 1 音视频同步
-
-b:v 200k 控制视频码流为200k
-
-coder 1 使用cabac 进行熵编码
-
-refs 3 参考帧数量
-
-bf b帧数量
-
-flags + loop -deblock -1:-1 使用滤波器平滑处理区块
-
-partitions i4x4+i8x8+p8x8+b8x8 宏块划分规格
-
-me_method umh 运动评估算法: 不均衡六边形算法
-
-g 60 gop size大小keyint
-
-qdiff 2 两帧之间量化器的最大变化
参考: