H.264 vs H.265 vs AV1:视频编码器深度比较
三大主流视频编码器的压缩效率、编码速度、浏览器支持、专利授权全面对比,帮你选择最适合的编码方案。
阅读更多 →掌握视频压缩核心原理,轻松实现高质量小体积视频
视频压缩之所以可能,是因为视频数据中存在大量的冗余信息。视频压缩的本质就是去除这些冗余,用更少的数据表示相同的视觉内容。
空间冗余是指同一帧图像内相邻像素之间的相关性。例如,一片蓝天的像素值非常接近,可以用更简洁的方式表示。
主要通过帧内预测、变换编码(DCT/DST)、量化等技术来消除空间冗余。
时间冗余是指相邻帧之间的相关性。大多数视频中,相邻帧的内容变化很小,很多区域几乎完全相同。
主要通过帧间预测(运动估计与运动补偿)来消除时间冗余,这也是视频压缩比远高于图片压缩的主要原因。
视觉冗余是指人眼视觉系统无法感知的信息。人眼对亮度比对颜色更敏感,对高频细节不如对低频内容敏感。
主要通过色度子采样(如 4:2:0)、量化矩阵、心理视觉模型等技术来利用视觉冗余。
编码冗余是指表示数据所用的比特数多于理论最小值。通过熵编码(如霍夫曼编码、算术编码、CABAC)可以进一步压缩数据。
在现代视频编码标准(如 H.264、H.265)中,视频被划分为不同类型的帧,每种帧的编码方式不同,在压缩效率和错误恢复中扮演不同角色。
I 帧(Intra-coded Picture)是帧内编码帧,也称为关键帧。它不参考其他帧,独立编码,类似于一张静态图片。
P 帧(Predictive-coded Picture)是前向预测帧,参考前面的 I 帧或 P 帧进行预测编码,只编码预测误差。
B 帧(Bidirectionally predictive-coded Picture)是双向预测帧,同时参考前面和后面的帧进行预测,压缩效率最高。
码率控制是视频压缩中最重要的参数之一,它决定了如何分配比特来保证视频质量。常见的码率控制方式有 CRF、CBR、VBR 等。
CRF(Constant Rate Factor)是恒定质量模式,目标是保持整个视频的视觉质量一致,码率则根据视频复杂度动态变化。
CRF 值范围:
CBR(Constant Bitrate)是恒定码率模式,整个视频的码率保持不变,无论视频内容复杂还是简单。
VBR(Variable Bitrate)是可变码率模式,根据视频内容复杂度动态调整码率,复杂场景分配更多码率,简单场景减少码率。
ABR(Average Bitrate)是平均码率模式,在保证平均码率达到目标值的前提下,允许码率在一定范围内波动。
GOP(Group of Pictures)即图像组,是指两个 I 帧之间的一组连续帧。GOP 结构决定了 I 帧的间隔,对视频压缩效率、随机访问性和容错性都有重要影响。
GOP 长度是指两个相邻 I 帧之间的帧数。例如,GOP=30 表示每 30 帧一个 I 帧。
典型的 GOP 结构如 IBBPBBPBBP...,即 I 帧后面跟着多个 B 帧和 P 帧的组合。
| 场景 | GOP 长度(帧率 30fps) | 说明 |
|---|---|---|
| 视频存储/点播 | 60-300 帧(2-10秒) | 追求压缩效率 |
| 直播推流 | 30-60 帧(1-2秒) | 平衡延迟和效率 |
| 视频会议 | 10-30 帧(0.3-1秒) | 低延迟、快速恢复 |
| 监控视频 | 150-600 帧(5-20秒) | 最大化压缩比 |
| 名称 | 分辨率 | 推荐码率范围 |
|---|---|---|
| 360p | 640×360 | 400-800 kbps |
| 480p | 854×480 | 800-1500 kbps |
| 720p | 1280×720 | 1500-4000 kbps |
| 1080p | 1920×1080 | 3000-8000 kbps |
| 4K | 3840×2160 | 10000-30000 kbps |
使用 H.264 编码器,CRF 模式,推荐大多数场景使用:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
如果需要精确控制文件大小,可以使用两遍编码(Two-pass):
# 第一遍:分析视频
ffmpeg -i input.mp4 -c:v libx264 -b:v 1000k -pass 1 -an -f null /dev/null
# 第二遍:正式编码
ffmpeg -i input.mp4 -c:v libx264 -b:v 1000k -pass 2 -c:a aac -b:a 128k output.mp4
Windows 用户请将 /dev/null 替换为 NUL。
# 缩放到 720p
ffmpeg -i input.mp4 -vf scale=1280:720 -c:v libx264 -crf 23 -c:a aac -b:a 128k output_720p.mp4
# 等比例缩放到宽度为 1280
ffmpeg -i input.mp4 -vf scale=1280:-1 -c:v libx264 -crf 23 -c:a copy output.mp4
# 降低到 24fps
ffmpeg -i input.mp4 -r 24 -c:v libx264 -crf 23 -c:a copy output_24fps.mp4
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -c:a aac -b:a 128k output_h265.mp4
ffmpeg -i input.mp4 \
-c:v libx264 -crf 23 -preset medium \
-c:a aac -b:a 128k \
-movflags +faststart \
output_web.mp4
-movflags +faststart 将元数据移到文件开头,支持网络边下边播。
ffmpeg -i input.mp4 \
-vf scale=720:-1 -r 25 \
-c:v libx264 -crf 28 -preset slow \
-c:a aac -b:a 96k \
output_short.mp4
ffmpeg -i input.mp4 \
-c:v libx265 -crf 22 -preset veryslow \
-c:a copy \
output_archive.mkv
ffmpeg -i input.mp4 \
-c:v libx264 -b:v 2500k -maxrate 2500k -bufsize 5000k \
-g 60 -keyint_min 60 -sc_threshold 0 \
-c:a aac -b:a 128k \
-f flv rtmp://server/live/stream
参数说明:
-g 60:GOP 大小为 60 帧(2秒@30fps)-keyint_min 60:最小关键帧间隔-sc_threshold 0:禁用场景切换检测,保证 GOP 稳定preset 参数控制编码速度和压缩率的平衡,可选值:
建议:时间充足用 slow,追求速度用 fast,默认 medium 就行。
推荐的 CRF 起始值:
-vf nlmeans)视频压缩是一门平衡的艺术,需要在质量、文件大小、编码速度、兼容性之间找到最佳平衡点。
快速上手建议:
如果你不想记这些复杂的参数,可以直接使用我们的 在线视频压缩工具,简单几步就能完成视频压缩。