为什么同为 1080p,视频压缩效果却差很多?
分辨率相同,画质为何不同?了解运动、噪点、帧率、GOP 结构与码率控制如何影响压缩结果,并用 FFmpeg 示例排查画面模糊。

要点速览
- 分辨率描述像素网格,不能说明压缩后保留了多少细节。
- 在相同码率下,干净、变化较少的画面通常比噪点多、运动复杂的画面更容易保持清晰。
- 恒定质量模式允许文件大小变化;目标码率模式则会让画质随场景复杂度变化。
- GOP 长度影响帧间预测和跳转播放,但 GOP 更长并不必然导致模糊。
两段视频都采用 1920 × 1080 分辨率,使用相同编码设置,导出后的观感仍可能相差很大。幻灯片演示依然清晰,手持拍摄的夜景却变得发软、出现色块。输出尺寸虽然相同,编码器面对的难题却不同。
真正值得问的是:每一帧需要保留多少新增、难以预测的信息?
像素数量相同,编码难度不同
想象一个固定机位:背景是简单的墙面,只有一个人在说话。相邻帧的大部分内容都相似。换成镜头晃动、树叶摆动、流水飞溅的场景,虽然同为 1080p,需要描述的变化却多得多。
运动预测可以复用信息,但仍需记录预测不准确的部分。遮挡关系变化、反光和细碎的运动纹理都会增加难度。随机传感器噪点又带来了不随物体运动的变化。MDN 的视频编码复杂度指南介绍了这些影响因素。
静态录屏往往容易压缩,但小字对细节损失很敏感。滚动一张密集的电子表格,可能比展示一页不动的幻灯片难压缩得多。不能简单断言录屏一定比实拍容易压缩。
码率预算要分给多帧画面
可以用每像素每帧比特数做粗略比较:
视频码率 ÷(宽度 × 高度 × 每秒帧数)
例如,视频流码率为 6,000,000 bit/s、分辨率为 1920 × 1080、帧率为 30 fps 时,结果约为 0.096。同样码率下换成 60 fps,结果约为 0.048。这只是算术示例,不是推荐画质参数,也不是实测结果。
这个平均值并不是每个像素实际分到的额度。编码器会在不同时间、不同画面区域分配不同数量的比特。更高帧率下,相邻帧也可能更相似,因此帧率翻倍,并不意味着必须把码率翻倍才能获得接近的主观画质。
这个数字适合帮助发现预算差异,不适合跨编码格式、预设或素材类型直接预测画质。带噪点的素材与干净素材,即使数值一样,压缩结果也可能很不同。
GOP 结构:画面如何借用其他帧的信息
GOP 即图像组,用帧内编码图像和预测编码图像组织视频。简化理解:
- I 图像使用图像内部的预测,不引用其他图像。
- P 图像可以引用解码顺序中较早的参考图像。
- B 图像可以使用两个参考列表,通常会借助显示顺序中前后两侧的图像。
这些是图像层面的简化说法;预测编码图像内部也可以包含帧内编码块。H.264 的编码规则由 ITU-T H.264 标准定义。
较长的 GOP 可以减少开销较大的帧内图像出现的频率。较短的间隔有助于随机跳转和恢复,但在码率受限时会占用更多预算。I 图像也不一定就是完全独立的重新解码起点;H.264 的 IDR 图像会更彻底地重置参考依赖关系。
快速运动并不会自动让长 GOP 产生涂抹。前瞻分析、参考图像选择、场景切换判断和可用码率都会影响结果。预算紧张时,复杂运动在不同 GOP 长度下都可能丢失细节。强行频繁插入关键帧,甚至可能挤占中间图像的预算。除非播放或剪辑流程明确要求某个间隔,否则可以先保留编码器默认设置。
噪点和颗粒会与有效细节争夺预算
暗光录制的视频可能在几乎整个画面上都有细小、不断变化的噪点。保留这些变化需要数据。码率受限时,画面可能丢失纹理或出现块状失真;采用质量导向设置时,编码器也可能输出更大的文件。
轻度降噪有时能改善结果,但接受处理前,要对比人脸、头发和织物。过强的滤镜可能抹掉真实细节,还可能留下运动拖影。刻意保留的胶片颗粒也可能是画面风格的一部分。先决定是否保留颗粒,再考虑如何让两份导出文件接近相同大小。
为什么相同 CRF 会产生不同大小的文件
对于 libx264,CRF 是质量导向的码率控制模式:数值越低,通常保留越多细节,也需要更多数据。它并不保证所有场景具有完全相同的主观画质。目标码率模式则限制数据预算,复杂场景可能承受更多损失。FFmpeg 的 libx264 编码器选项文档列出了 CRF、预设和 GOP 控制参数。
对于带音轨的输入文件,可以从下面的示例开始:
ffmpeg -i input.mp4 -c:v libx264 -preset medium -crf 20 -c:a aac -b:a 128k output.mp4
这需要 FFmpeg 构建包含 libx264。命令会重新编码视频和音频,没有显式调整画面尺寸,也没有设置新的帧率。这里的 CRF 数值只是供检查的起点,不代表保证达到某种效果。不同编码器的 CRF 数值也不能直接互换。
用一小段对比排查导出模糊
- 先检查源文件。 在相同显示尺寸下,对比同一时间点。已有的模糊和压缩损伤不会因为再次有损导出而消失。
- 选取难处理的片段。 包含你在意的运动、暗部、细密纹理或小字。
- 每次只改一个设置。 使用 libx264 CRF 时尝试降低数值;使用目标码率时增加可用码率。其他设置保持一致。
- 同时观察播放和暂停画面。 除了单帧损伤,还要注意运动过程中纹理是否消失。
- 让参数服务于目标。 优先保留视觉细节时,允许文件大小变化。存储或传输预算有硬性上限时,就要接受复杂素材可能需要另一种取舍。
判断两份 1080p 导出文件,应看它们分别保留了各自源素材的哪些细节。尺寸相同、设置相同,并不能让压缩难度也相同。