x264参数详解

793 阅读2分钟

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 两帧之间量化器的最大变化

参考:

www.chaneru.com/Roku/HLS/X2…

sites.google.com/site/linuxe…