H264码率控制

1. 码率控制模式

1.1 CBR

CBR(Constant Bit Rate)是一种以恒定比特率进行编码的方式。

  • 只能通过调节QP 来控制码字大小,导致图像质量不稳定
  • 静止场景,QP低,图像质量好
  • 运动场景,QP高,图像质量差

核心思路:码率优先,优先考虑节省带宽,可以牺牲画面质量

优点:

  1. 文件大小极度可预测(码率固定)。
  2. 适合直播、会议等固定带宽场景。

缺点:

  1. 画面质量不均。静止画面浪费bit,动态画面质量差。
  2. 编码效率最低,同等码率下画面质量最差。

ffmpeg命令:

csharp 复制代码
ffmpeg -i Shazam.Fury.of.the.Gods.2023.1080p.MA.WEB-DL.DDP5.1.Atmos.x264-CMRG.mkv \
  -ss 00:00:30 -t 00:01:00 \
  -c:v libx264 \
  -b:v 1000k -minrate 1000k -maxrate 1000k -bufsize 1000k \
  -x264-params "nal-hrd=cbr:vbv-maxrate=1000:vbv-bufsize=1000" \
  -c:a aac -b:a 128k \
  cbr.mp4

1.2 VBR

VBR(Variable Bit Rate)即动态码率模式,码率可以随着图像的复杂程度的不同而变化。

  • 运动场景下,码率会升高,从而马赛克和花屏的现象会减少。
  • 静止场景下,复杂度低,节省码字。
  • 对于瞬时画面的带宽是没有约束的,整体码率还是按照所设定的平均码率。

VBR通常要求2 pass的方式来进行处理:

  1. pass-1 第一遍扫描视频,分析画面复杂度
  2. pass-2 第二遍进行实际的编码,精确分配码率

核心思路:画面质量优先,码率跟随画面复杂度走。

优点:

  1. 同等码率下质量 比CBR很多。
  2. 存储效率最高

缺点:

  1. 文件大小不可预测
  2. 峰值码率不确定,可能超过带宽
  3. 2-pass耗时增加

典型场景:本地存储、蓝光光盘、短视频上传。

r 复制代码
# pass 1
ffmpeg -i Shazam.Fury.of.the.Gods.2023.1080p.MA.WEB-DL.DDP5.1.Atmos.x264-CMRG.mkv \
  -ss 00:00:30 -t 00:01:00 \
  -c:v libx264 \
  -b:v 1000k \
  -pass 1 \
  -c:a aac -b:a 128k \
  -f mp4 /dev/null
  
# pass 2
ffmpeg -i Shazam.Fury.of.the.Gods.2023.1080p.MA.WEB-DL.DDP5.1.Atmos.x264-CMRG.mkv \
  -ss 00:00:30 -t 00:01:00 \
  -c:v libx264 \
  -b:v 1000k \
  -pass 2 \
  -c:a aac -b:a 128k \
  vbr.mp4

1.3 ABR

ABR(Average Bit Rate)即平均码率 模式,可以看作是CBR和VBR的一种折衷,可以理解为一个家了滑动窗口的VBR

从整体上来看,ABR生成的文件,其平均码率收敛到指定的Bitrate,但在局部的片段内,允许码率波动。如以每50帧为一段,低频的静止段落内,使用较低的流量带宽,高频的运动段落内,使用更高的流量带宽。

  • 目标是整体达到平均的码率水平 ,不是CBR的每一时刻,短期内在允许范围内波动
  • 用 lookahead(前瞻 buffer)看一眼即将到来的帧,决定当前帧给多少 bit。
  • 以平均码率为基准,复杂段落,多借bit;简单段落,归还bit。

核心思路:整体达到平均的码率水平,短期允许波动

优点:

  1. 比CBR质量好
  2. 比VBR码率更可控
  3. 文件大小相对可预测

缺点:

  1. 极端复杂场景下,还是需要降质量。
  2. 编码效率上,不如2-pass VBR。

典型场景:流媒体平台(Netflix/YouTube 的 VOD)、直播场景折中方案。

less 复制代码
ffmpeg -i Shazam.Fury.of.the.Gods.2023.1080p.MA.WEB-DL.DDP5.1.Atmos.x264-CMRG.mkv \
  -ss 00:00:30 -t 00:01:00 \
  -c:v libx264 \
  -b:v 1000k \
  -maxrate 2000k -bufsize 2000k \
  -c:a aac -b:a 128k \
  abr.mp4

1.4 CRF

CRF(Constant Rate Factor),恒定感知质量模式。

  • 不预设目标码率。(与CBR/VBR/ABR的思路不同)
  • 依赖x264内的"感知质量模型",对画面质量进行评估。
  • 复杂/动态环境,QP降,更多bit;简单/静态环境,QP升,省bit。
  • CRF 范围: 0-51,x264 官方默认是 23
  • CRF 值每+6 ,文件大小大约减半,但视觉差异并不线性。

x264 内部有一个"感知质量模型",它会分析每一帧:

  • 运动量:动作大的场景人眼注意力被分散,QP 可以稍微放一点
  • 纹理复杂度:细节多的 frame,给更多 bit 才能维持质量
  • 时域一致性 :相邻帧 QP 变化不能太剧烈,否则会闪烁
    结果就是 全片视觉质量几乎恒定 ------ 不管是白墙场景还是爆炸场面,你看过去感觉"画质差不多"。

CBR/VBR/ABR 是"预算驱动"的三种分配策略,CRF 是另一个维度的思考方式,以"质量"驱动。

优点:

  1. 整体"画面观感"较好,一致性更强。(不容易一段糊,一段清晰)
  2. 适合本地存储/归档

缺点:

  1. 质量/大小不可预测。
  2. 不适用直播/流媒体(码率不可控)
  3. 不适用有文件大小限制的场景(上传限制、U盘放不下)
less 复制代码
ffmpeg -i Shazam.Fury.of.the.Gods.2023.1080p.MA.WEB-DL.DDP5.1.Atmos.x264-CMRG.mkv \
  -ss 00:00:30 -t 00:01:00 \
  -c:v libx264 \
  -crf 30 \
  -preset slow \
  -c:a aac -b:a 128k \
  crf30.mp4

使用CRF压制的画面,整体一致性更好,不容易出现一段糊,一段清楚的情况。

2. QP

QP即量化参数,其记录在PPS(H264 参数集 > 3.2 PPS图像参数集)中,它相当于是视频编码里的「质量-体积」调节旋钮,控制着视频的码率和质量。

2.1 QP和码率的关系

QP 越低 → 量化越精细 → 质量越好 → 码率越高

QP 越高 → 量化越粗糙 → 质量越差 → 码率越低

2.2 QP如何影响码率

变换编码DCT 后,我们得到的数据,实际上是图像对应的不同频率信号的分量,在频域空间上的系数------一堆数字。量化就是用这些系数除以一个步长,然后取整:

量化后系数 = round(原始系数 / Qstep)

QStep一共有52种取值,QP实际上是QStep表中的序号,可以看到QP和QStep 呈一种指数关系 ,而不是线性关系,QP每增大6,QStep的值会加大一倍

Pasted image 20260602214602.png

QP 低的时侯 Qstep 小,除法结果保留更多细节 → 码流大。

QP 高的时候 Qstep 大,很多小系数直接变 0 → 码流小。

2.3 码率控制的三种模式

码率控制器本质上就是在做 「根据目标,动态调 QP」

  1. CBR(固定码率) → 疯狂调 QP 来压住码率,场景切换时 QP 剧烈波动
  2. VBR(可变码率) → QP 范围设好,码率随画面复杂度浮动,质量稳定
  3. ABR (平均码率) → 约束在码率预算 + 时间窗口, 根据码率范围和时间窗口来调节QP
  4. CRF(固定质量) → 你设一个 QP 基准,编码器自动在场景复杂时调高、简单时调低,码率不可控

3. 四种码率控制模式对比

维度 CBR VBR ABR CRF
核心目标 码率恒定 质量优先 平均码率达标 质量恒定
QP 行为 剧烈波动压码率 随场景自由浮动 滑窗内浮动 围绕设定值微调
码率可控性 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
质量一致性 ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐
编码效率 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
是否需要 2-pass ✅(推荐)
文件大小预测 精准 偏差大 较准 不可控
典型场景 直播、视频会议 蓝光、本地存档 流媒体 VOD 个人归档
FFmpeg 关键参数 -b:v -minrate -maxrate -b:v -pass 1/2 -b:v -maxrate -bufsize -crf

一句话选型

要固定码率 → CBR

要最高质量不设限 → VBR 2-pass

要可控又不想太烂 → ABR

只管视觉质量不管大小 → CRF

相关推荐
换个昵称都难1 天前
webrtc voice engine 介绍(新版webrtc)
ffmpeg·音视频·webrtc
小鹿软件办公2 天前
巧用 Adobe Audition 中置声道提取,轻松分离人声与背景音乐
adobe·ffmpeg·简鹿人声分离
2023自学中4 天前
imx6ull开发板 移植 ffmpeg 4.2.11 + x264 视频编码库
linux·ffmpeg·音视频·嵌入式·开发板
feibaoqq4 天前
光电视频监控技术(GB28181/ONVIF/私有协议)
ffmpeg·音视频·低空安防
feiyangqingyun5 天前
使用ffmpeg播放不同节目/实时切换节目并推流/推流不同的节目流
ffmpeg·推节目流·广播节目
左直拳6 天前
利用海康CVR实现视频流历史回放
ffmpeg·cvr·视频回放·历史视频
MR.欻7 天前
ZLMediaKit 源码分析(四):RTP/RTCP 协议栈实现分析
c++·人工智能·vscode·ffmpeg·音视频
晓py7 天前
音视频基础概念入门_FFmpeg学习笔记
学习·ffmpeg·音视频
daqinzl7 天前
Mpegts.js+FFmpeg+WebSocket+Node实时视频流实现方案
websocket·ffmpeg·node·mpegts.js