提示

返回博客列表

同样是 1080P,为什么一个 200MB 一个 2GB?聊聊视频码率与编码器调参

同样是 1080P,为什么一个 200MB 一个 2GB?聊聊视频码率与编码器调参

你有没有遇到过:下载了两个"同样 1080P"的视频,一个 200MB、一个 2GB,画质居然差不多——甚至 200MB 那个看起来更干净?这是因为分辨率只是画布大小,码率才是决定画质和体积的真正变量。本文深入拆解码率控制的完整体系:CRF、ABR、CBR、VBR、2-Pass、QP,以及 x264/x265 编码器的高级调参技巧。

TL;DR:码率 = 每秒分配给视频的数据量(kbps/Mbps)。CRF(恒定质量)是日常首选——设一个值(如 23),编码器自动分配码率,保证观感质量一致;ABR/CBR 用于直播和流媒体,保证码率稳定;2-Pass 在给定目标体积下最大化画质。x264 的 preset(速度档)和 tune(场景优化)能显著影响编码效率和画质。

目录

一、码率到底是什么

码率(Bitrate)的定义很简单:每秒视频占用多少数据量

码率(kbps) × 时长(秒) ÷ 8 ÷ 1024 = 文件体积(MB)

例如:
5 Mbps × 600 秒 ÷ 8 ÷ 1024 ≈ 366 MB

但码率和画质的关系不是线性的。核心原理是边际递减

码率     画质提升
1 Mbps  → 模糊,大量色块
2 Mbps  → 基本可看,暗部噪点多
4 Mbps  → 1080P 及格线,大部分场景干净
8 Mbps  → 非常清晰,高速运动也不糊
15 Mbps → 接近无损,肉眼挑不出毛病
30 Mbps → 再提升极小,边际效益极低

这就是为什么"同样 1080P",体积可以差 10 倍——不同平台/编码器给的是不同的码率。

码率需求受什么影响:

因素 对码率需求的影响
分辨率 4K 需要的码率约是 1080P 的 4 倍
帧率 60fps 比 30fps 需要约 1.5-2 倍码率
画面复杂度 草地/水面/雪花/颗粒感 → 需要高码率
运动量 高速运动/镜头摇晃 → 需要高码率
编码器 H.265 同画质约需 H.264 的一半码率
动画 vs 真人 动画大面积纯色 → 码率需求低得多

二、码率控制的五种模式

编码器在"怎么分配码率"这件事上有五种策略,每种适合不同场景:

码率控制模式对比:

┌────────┬──────────────────┬──────────────────┬──────────┐
│  模式  │     目标          │    码率波动       │  典型场景 │
├────────┼──────────────────┼──────────────────┼──────────┤
│  CRF   │ 恒定视觉质量      │ 大(随画面变化)   │ 本地存档  │
│  ABR   │ 平均码率达标      │ 中(缓冲区调节)   │ 流媒体分发 │
│  CBR   │ 恒定码率          │ 极小              │ 直播推流  │
│  VBR   │ 给定质量区间      │ 中                │ 蓝光光盘  │
│ 2-Pass │ 目标体积 + 最优画质│ 中(两次编码优化) │ 发布/投稿 │
└────────┴──────────────────┴──────────────────┴──────────┘

三、CRF:99% 场景下的最优解

CRF(Constant Rate Factor)是 x264/x265 的默认码率控制模式,也是大多数人最应该用的模式。它的逻辑是:

"我不管你最终体积多大,我保证每一帧的视觉质量都达到这个标准。"

# x264 CRF 编码
ffmpeg -i input.mp4 -c:v libx264 -preset medium -crf 23 output.mp4

CRF 值的含义(x264):

CRF 值 视觉质量 适用场景 典型码率(1080P)
0 无损 几乎不用 极大
18 视觉无损 收藏级存档 15-25 Mbps
23 高质量(默认) 日常存档/发布 5-10 Mbps
28 可接受 网络分享 2-4 Mbps
35 低质量 预览/草稿 0.5-1 Mbps
51 最差 不推荐 极小

CRF 值每增加 6,码率约减半;每减少 6,码率约翻倍。

CRF 不是恒定码率——当画面静止时(如 PPT、静止镜头),码率可能只有 1 Mbps;当画面剧烈运动时,码率会飙升到 20 Mbps。这恰好符合人眼的感知规律:静止画面更需要清晰,运动画面模糊一点也看不出来。

x265 的 CRF 值不同:

x265 的 CRF 范围是 0-51,但"同等质量"的 CRF 值比 x264 偏高。通常:
- x264 CRF 23 ≈ x265 CRF 28(同等视觉质量)
- x265 默认 CRF 28

# x265 CRF 编码(注意 CRF 值要调高)
ffmpeg -i input.mp4 -c:v libx265 -preset medium -crf 28 output.mp4

四、2-Pass:给定体积下的画质最大化

当你有一个硬性的体积限制(比如"这个视频不能超过 500MB"),2-Pass 是最佳选择。

2-Pass 工作流程:

Pass 1(分析阶段):
  快速扫描整个视频 → 记录每帧的复杂度、运动量
  → 输出统计文件(.log)

Pass 2(编码阶段):
  读取统计文件 → 知道"哪些帧难压、哪些帧好压"
  → 合理分配码率:复杂帧给多、简单帧给少
  → 最终达到目标码率 + 最优画质
# x264 2-Pass 编码(目标 5 Mbps)
ffmpeg -i input.mp4 -c:v libx264 -preset medium \
  -b:v 5M -pass 1 -f null /dev/null

ffmpeg -i input.mp4 -c:v libx264 -preset medium \
  -b:v 5M -pass 2 output.mp4

2-Pass 的优势在于"全局视野":第一次扫描让它知道第 10 分钟的爆炸场景需要高码率,而第 5 分钟的静止对话可以压狠一点——最终在给定总体积下,画质比单次 ABR 好 5-15%。

代价是编码时间翻倍(要跑两遍)。

CRF vs 2-Pass 的选择:

你有固定的体积限制吗?
  ├─ 有 → 用 2-Pass
  └─ 没有 → 用 CRF

你要发布到有码率限制的平台吗?(如 B 站限制 20Mbps)
  ├─ 是 → 用 2-Pass(或 CRF + 事后检查码率)
  └─ 否 → 用 CRF

五、CBR 与 ABR:直播和流媒体的选择

CBR(Constant Bitrate) 强制码率恒定不变:

ffmpeg -i input.mp4 -c:v libx264 -b:v 5M -minrate 5M -maxrate 5M -bufsize 10M output.mp4

特点:
- 码率曲线是一条直线,不管画面是静止还是爆炸
- 简单场景浪费码率,复杂场景码率不够 → 画质不均
- 但网络传输友好:带宽需求可预测

ABR(Average Bitrate) 保证平均码率达标,但允许局部波动:

ffmpeg -i input.mp4 -c:v libx264 -b:v 5M -bufsize 10M output.mp4

ABR 的码率会在目标值附近波动,配合 bufsize(缓冲区大小)控制波动幅度。bufsize 越大,允许的瞬时波动越大。

为什么直播用 CBR/ABR:

直播推流需要稳定的上行带宽。如果码率忽高忽低(像 CRF 那样),网络波动时容易卡顿。CBR 保证了"无论画面多复杂,每秒只发固定量的数据"。

六、x264 编码器高级参数详解

x264 是目前最成熟的 H.264 编码器,ffmpeg 中的 libx264 就是它。

preset(速度档位)——用时间换压缩效率:

preset 编码速度(相对) 压缩效率(同画质下体积) 适合场景
ultrafast 极快 体积大 50-100% 实时转码/直播
superfast 很快 体积大 30-50% 快速预览
veryfast 体积大 15-25% 日常使用(平衡之选)
faster 较快 体积大 10-15%
fast 稍快 体积大 5-10%
medium 基准(默认) 基准 推荐日常
slow 慢 50% 体积小 5-10% 高质量存档
slower 很慢 体积小 10-15% 收藏级编码
veryslow 极慢 体积小 15-20% 最终发布版
placebo 离谱慢 几乎无提升 不要用
# 收藏级编码(慢但省体积)
ffmpeg -i input.mp4 -c:v libx264 -preset veryslow -crf 18 output.mp4

tune(场景优化):

x264 内置了针对不同内容的优化参数集:

tune 优化场景 效果
film 真人电影 降低噪点容忍度,保留胶片颗粒感
animation 动画 增加参考帧,优化大面积纯色
grain 颗粒感画面 保留噪点/颗粒,不用去噪滤波器
stillimage 静态图片 优化单帧编码
fastdecode 低性能设备 禁用 CABAC 等重解码特性
zerolatency 实时编码 关闭 B 帧,延迟最低
# 编码动画片
ffmpeg -i anime.mp4 -c:v libx264 -preset medium -crf 23 -tune animation output.mp4

# 编码带颗粒感的老电影
ffmpeg -i old_film.mp4 -c:v libx264 -preset slow -crf 18 -tune grain output.mp4

关键帧间隔(GOP):

# -g 控制关键帧间隔(帧数),-keyint_min 控制最小间隔
ffmpeg -i input.mp4 -c:v libx264 -g 250 -keyint_min 25 output.mp4

关键帧(I 帧)是完整的独立帧,P/B 帧依赖 I 帧解码。-g 250 表示每 250 帧强制一个关键帧(约 10 秒 @25fps)。关键帧太少 → 拖动进度条卡顿;关键帧太多 → 体积变大。

七、x265:新一代编码的调参差异

x265 是 H.265/HEVC 的编码器。它的参数体系类似 x264,但有一些关键差异:

CRF 映射不同:

同等视觉质量:
  x264 CRF 23 ≈ x265 CRF 28
  x264 CRF 18 ≈ x265 CRF 22

preset 差异更大:

x265 的 slow 及以上 preset 非常慢,但压缩效率提升也比 x264 更明显:

x265 preset 编码速度(相对 x264 medium)
medium 约 2-3 倍慢
slow 约 4-6 倍慢
slower 约 8-12 倍慢
veryslow 约 15-20 倍慢
# x265 高质量编码(慢但体积小)
ffmpeg -i input.mp4 -c:v libx265 -preset slow -crf 22 \
  -x265-params "aq-mode=3:aq-strength=1.0" output.mp4

x265 特有参数:

参数 作用 推荐值
aq-mode 自适应量化模式 3(自动方差,推荐)
aq-strength AQ 强度 0.8-1.2
sao 样点自适应补偿(去振铃) 1(默认开启)
strong-intra-smoothing 帧内平滑 动画可关(=0

10-bit 编码的优势(x265):

# x265 10-bit 编码(色带/banding 更少,但兼容性稍差)
ffmpeg -i input.mp4 -c:v libx265 -preset medium -crf 28 \
  -pix_fmt yuv420p10le output.mp4

10-bit 编码能显著减少色带(天空渐变、暗部过渡处的条纹),且压缩效率略优于 8-bit。代价是部分老设备硬解不支持。

八、实战:不同场景的编码参数推荐

场景 1:本地收藏(画质优先)

# 真人视频收藏
ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 -tune film \
  -c:a aac -b:a 256k output.mp4

# 动画收藏
ffmpeg -i input.mp4 -c:v libx265 -preset slow -crf 20 -tune animation \
  -x265-params "strong-intra-smoothing=0:aq-mode=3" \
  -c:a aac -b:a 192k output.mp4

场景 2:网络发布/投稿(体积与画质平衡)

# B 站 / YouTube 投稿(2-Pass 控制体积)
ffmpeg -i input.mp4 -c:v libx264 -preset medium \
  -b:v 8M -maxrate 12M -bufsize 16M -pass 1 -f null NUL
ffmpeg -i input.mp4 -c:v libx264 -preset medium \
  -b:v 8M -maxrate 12M -bufsize 16M -pass 2 \
  -c:a aac -b:a 192k output.mp4

场景 3:移动设备(省空间)

# 手机观看,体积小
ffmpeg -i input.mp4 -c:v libx265 -preset medium -crf 28 \
  -vf "scale=1280:720" -c:a aac -b:a 128k output.mp4

场景 4:直播推流

# 推 RTMP 直播流(CBR + 低延迟)
ffmpeg -re -i input.mp4 \
  -c:v libx264 -preset veryfast -tune zerolatency \
  -b:v 4M -minrate 4M -maxrate 4M -bufsize 8M \
  -c:a aac -b:a 128k \
  -f flv rtmp://live.example.com/app/streamkey

九、如何评估编码质量

主观评估(最重要):
- 逐帧对比原视频和编码后视频
- 重点看:暗部噪点、高速运动、人脸肤色、天空渐变
- 用 ffplay 逐帧播放对比

客观指标:

# 计算 PSNR(峰值信噪比)
ffmpeg -i original.mp4 -i encoded.mp4 \
  -lavfi "psnr=stats_file=psnr.log" -f null -

# 计算 SSIM(结构相似性)
ffmpeg -i original.mp4 -i encoded.mp4 \
  -lavfi "ssim=stats_file=ssim.log" -f null -

# 计算 VMAF(Netflix 的感知质量指标,最接近人眼)
ffmpeg -i encoded.mp4 -i original.mp4 \
  -lavfi "libvmaf=model_path=vmaf_v0.6.1.pkl:log_path=vmaf.log" -f null -

VMAF 是目前最可靠的客观质量指标,由 Netflix 开发,综合了多个人眼感知模型。

VMAF 分数解读:

VMAF 分数 含义
93-100 肉眼无法区分
75-93 高质量,微小差异
50-75 可接受,明显但可容忍的压缩痕迹
< 50 差,明显的块效应/模糊

十、合规与温馨提示

技术是中性的,用法见人心。我们强烈建议:

  • 仅对你自己拥有版权平台明确允许的视频进行编码处理;
  • 不将编码知识用于盗版压制、非法分发;
  • 压缩后的视频用于个人存档、学习研究,尊重创作者权益。

码率控制是视频编码中最需要"手感"的环节。记住三个核心原则:日常存档用 CRF 18-23,有体积限制用 2-Pass,直播推流用 CBR。然后把 preset 从 medium 往 slow 调——你会发现,多等半小时,文件能小 15%,而且画质还不变。这就是编码器的魅力。

本文由 VidDown 技术博客原创发布。VidDown 是一个免费、本地优先的在线视频解析与开发者工具站,支持多平台视频下载、格式转换、m3u8 合并等实用功能,所有数据处理均在本地完成,保护你的隐私。欢迎访问 www.viddown.cn 体验。

想亲手试试?用 VidDown 一键解析下载

粘贴视频链接即可解析,多平台支持、网页端即用;下载桌面客户端解锁海外平台本地解析,开通会员更享不限次下载。

顶部