多媒体科技音视频开发集锦AVFoundation

视频编码-码率控制CQP/CRF/ABR/CBR/VBV

2019-04-20  本文已影响9人  smallest_one

目录

  1. 参考
  2. 概述
  3. CQP(Constant QP)
  4. CRF(Constant Rate Factor)/CQF(Constant Quality Factor)
  5. ABR(Average Bitrate)
  6. CBR(Constant Bitrate)
  7. VBV(Video Buffering Verifier)

1. 参考

2. 概述

编码器中有一个码率控制模块,通过选择一系列编码参数,来控制编码视频的码率满足需要,并且使编码失真尽可能小。码率控制严格上不属于视频编码标准,属于率失真优化。

码率控制的模式[1]:

  1. CQP(Constant QP):恒定QP(Quantization Parameter)。
  2. CRF(Constant Rate Factor)/CQF(Constant Quality Factor):恒定质量因子。
  3. ABR(Average Bitrate):指定平均码率。
  4. CBR(Constant Bitrate):恒定码率,相对的是可变码率(VBR, Variable Bitrate)。
  5. VBV(Video Buffering Verifier):视频缓冲校验。

3. CQP(Constant QP)

恒定QP(Quantization Parameter)。

ffmpeg -s 1280x720 -i <input> -c:v libx264 -qp 23 <output>
ffmpeg -s 1280x720 -i <input> -c:v libx265 -x265-params qp=23 <output>

4. CRF(Constant Rate Factor)/CQF(Constant Quality Factor)

恒定质量因子。

codec 取值范围 默认值 建议值
x264 [0, 51] 23 [18, 28]
x265 [0, 51] 28 ?
VP9 [0, 63] - [15, 35]
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

5. ABR(Average Bitrate)

指定平均码率。

ffmpeg -s 1280x720 -i <input> -c:v libx264 -b:v 1M <output>
ffmpeg -s 1280x720 -i <input> -c:v libx265 -b:v 1M <output>
ffmpeg -s 1280x720 -i <input> -c:v libvpx-vp9 -b:v 1M <output>

2-Pass ABR

ffmpeg -i <input> -c:v libx264 -b:v 1M -pass 1 -f null /dev/null
ffmpeg -i <input> -c:v libx264 -b:v 1M -pass 2 <output>.mp4
ffmpeg -i <input> -c:v libx264 -b:v 1M -x265-params pass=1 -f null /dev/null
ffmpeg -i <input> -c:v libx264 -b:v 1M -x265-params pass=2 <output>.mp4
ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M -pass 1 -f null /dev/null
ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M -pass 2 <output>.webm

6. CBR(Constant Bitrate)

前面几个模式都属于可变码率VBR(Variable Bitrate),瞬时码率在波动。恒定码率与之相对,即码率保持不变。

ffmpeg -i <input> -c:v libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M <output>
ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M -maxrate 1M -minrate 1M <output>

7. VBV(Video Buffering Verifier)

视频缓冲校验提供了一种方法,以保证码率被限制在一定的最大值。

ffmpeg -i <input> -c:v libx264 -crf 23 -maxrate 1M -bufsize 2M <output>
ffmpeg -i <input> -c:v libx265 -crf 28 -x265-params vbv-maxrate=1000:vbv-bufsize=2000 <output>
ffmpeg -i <input> -c:v libvpx-vp9 -crf 30 -b:v 2M <output>
ffmpeg -i <input> -c:v libx264 -b:v 1M -maxrate 1M -bufsize 2M -pass 1 -f null /dev/null
ffmpeg -i <input> -c:v libx264 -b:v 1M -maxrate 1M -bufsize 2M -pass 2 <output>
ffmpeg -i <input> -c:v libx265 -b:v 1M -x265-params pass=1:vbv-maxrate=1000:vbv-bufsize=2000 -f null /dev/null
ffmpeg -i <input> -c:v libx265 -b:v 1M -x265-params pass=2:vbv-maxrate=1000:vbv-bufsize=2000 <output>
ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M -maxrate 1M -bufsize 2M -pass 1 -f null /dev/null
ffmpeg -i <input> -c:v libvpx-vp9 -b:v 1M -maxrate 1M -bufsize 2M -pass 2 <output>

如何设置bufsize?

上一篇 下一篇

猜你喜欢

热点阅读