














一、概述
在视频编码中,码率控制是决定输出视频质量和文件大小的核心环节。不同的场景对码率和视频质量有不同的要求。所以非常有必要了解一下编码器是如何控制码率。
以便应对不同的应用场景。
二、码率控制模式说明
第一种方式: AVCodecContext *c; int br = 400000; //400kb c->bit_rate = br; 第二种方式: // FFmpeg示例(H.264) av_opt_set(c->priv_data, "b:v", "2000k", 0); // 平均2Mbps av_opt_set(c->priv_data, "maxrate", "3000k", 0); // 峰值3Mbps av_opt_set(c->priv_data, "bufsize", "4000k", 0); // 缓冲区大小
// FFmpeg示例(H.264) av_opt_set(c->priv_data, "qp", "23", 0); // QP范围:0(无损)-51(最差)
// FFmpeg示例(H.264) av_opt_set(c->priv_data, "crf", "23", 0); // 默认值,范围18-28 // H.265(HEVC)推荐+2: av_opt_set(c->priv_data, "crf", "25", 0);
maxrate和bufsize)。// FFmpeg示例(H.264) av_opt_set(c->priv_data, "maxrate", "4000k", 0); // 最大4Mbps av_opt_set(c->priv_data, "bufsize", "8000k", 0); // 2秒缓冲区
gop_size:GOP 的长度(帧数)。keyint_min:最小 I 帧间隔(避免场景切换时延迟插入 I 帧)。bframes:两个参考帧之间的 B 帧数(影响编码延迟)。// FFmpeg示例(H.264) av_opt_set(c->priv_data, "gop_size", "120", 0); // 每120帧一个I帧 av_opt_set(c->priv_data, "keyint_min", "30", 0); // 场景切换时至少30帧 av_opt_set(c->priv_data, "bframes", "3", 0); // 两个参考帧间插入3个B帧
| 场景 | 推荐模式 | 参数配置 |
|---|---|---|
| 直播(低延迟) | CBR + VBV | b:v=目标码率, maxrate=峰值, bufsize=小 |
| 流媒体(适应性) | ABR + VBV | b:v=平均码率, maxrate=2×平均, bufsize=大 |
| 离线存储(画质优先) | CRF | crf=18-20, preset=slow |
| 实时监控(保留细节) | CQP | qp=20-25 |
| 蓝光 / DVD 制作 | CRF + VBV | crf=18, maxrate=无, bufsize=大 |
| 模式 | 画质稳定性 | 文件大小 | 编码速度 | 延迟 | 带宽要求 |
|---|---|---|---|---|---|
| CQP | 高 | 波动大 | 快 | 低 | 不稳定 |
| CBR | 低 | 稳定 | 快 | 低 | 恒定 |
| ABR | 中 | 较稳定 | 中 | 中 | 波动小 |
| CRF | 高 | 较稳定 | 慢 | 中 | 波动中 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。