2023-1-11 19:02 /


前言

国内ACG圈子里的日本动画观众,或多或少都可能在ACG论坛等地方,接触到讨论音视频资源的网友,念叨着一些影音领域专业词汇。根据笔者个人经验,其中较难理解的最常见的两个词汇是「编码」「码率」

本文将用浅显易懂的图示与比喻来讲解这两个概念,面向刚入坑的朋友做一个通俗的科普。由于本文是通俗科普,较不严谨,若想准确地、深入地理解这些概念,还请参考维基百科、百度百科等。真正的「编码」是一门复杂学问,涉及很多高等数学知识!(晕

本文讲解时会涉及到一些影音领域的基础概念,包括「像素」「分辨率」「帧率」等。若读者尚未熟知这些概念,可先参考维基百科、百度百科,或笔者的另一篇文章:字幕组动画资源惯用文件名含义科普


引入:什么是位图

视频本质上就是连续播放的一大堆图片,每一帧就是一张图片。因此我们先从图片说起

图片分为两种:位图与矢量图。位图(bitmap)是由一个个细小的像素组成的图像。当像素的数量足够多,即分辨率足够高时,人眼就看不出像素(颗粒感消失),就会感觉图片很清晰了。

低分辨率位图模拟效果:

原图,1920x1080 分辨率(高清),即大约两百万像素:


位图的优点是技术成熟,编码、解码与传播相对容易,而缺点显而易见:经不起放大。不妨点开上面的原图,然后使劲放大(500%以上),即可隐隐约约地看到一个个像素点。用 Windows「画图」软件放大位图,可以更明显地看到像素点。位图几乎无处不在,常见文件格式有 JPG/JPEG、PNG、WebP、BMP 等。

矢量图(vector graphics)是由一条条数学函数绘制的线条组成的图像。其优点是再怎么放大都不会模糊,缺点是不适合应用于形状与颜色复杂的图片,以及变化多端的视频,因此不作进一步讨论。矢量图的常见应用有公司商标、App 图标、CAD 蓝图、TrueType 字体等,常见文件格式有 SVG 等。

下图是传统像素字体与 TrueType 字体的对比:

上:像素字体,亦称点阵字体,基于位图的原理。常见于低分辨率屏幕,例如街头LED滚动字幕、以前的电脑与手机屏幕(梦回 Windows 95),还有像素风格的游戏(Minecraft 等)。
下:TrueType 字体,基于矢量图的原理。常见于现在高分辨率的电脑与手机屏幕。



位图的编码

这是一张 10x5 分辨率,即含有50个像素的位图:


如何用计算机数据表示并存储这个位图,就是位图的编码要解决的问题。

我们首先想到的是最简单的方法,按顺序记录每一个像素:
红 红 红 红 红 红 绿 绿 绿 绿 换行
红 红 红 红 红 绿 绿 绿 绿 绿 换行
红 红 红 红 绿 绿 绿 绿 绿 蓝 换行
红 红 红 绿 绿 绿 绿 绿 蓝 蓝 换行
红 红 绿 绿 绿 绿 绿 蓝 蓝 蓝 结束

事实上这就是 BMP 格式位图文件(bitmap file)的编码方法。其优点是图像信息最原始、最准确,缺点是数据量巨大。为了减小数据量,我们继续探索效率更优的编码方法:
红x6 绿x4 换行
红x5 绿x5 换行
红x4 绿x5 蓝x1 换行
红x3 绿x5 蓝x2 换行
红x2 绿x5 蓝x3 结束

另一种思路:
红: 从1至6, 从1至5, 从1至4, 从1至3, 从1至2
绿: 从7至10, 从6至10, 从5至9, 从4至8, 从3至7
蓝: 无, 无, 10, 从9至10, 从8至10
结束


显然,这些编码在保证图像信息准确无误的情况下,减小了数据量,降低了文件体积,节省了存储空间与网络带宽。这也就是所谓无损压缩,最流行的无损压缩位图编码及其文件格式是 PNG(Portable Network Graphics)。然而在实际应用中,无损压缩的编码仍无法满足很多用户节省存储空间与网络带宽的需求,尤其是二十多年前的拨号上网时代,载入一张图片要花十几秒钟……

因此,既然有「无损压缩」,自然就有与之对应的有损压缩,最流行的有损压缩位图编码是 JPEG(Joint Photographic Experts Group),这种编码应用于家喻户晓的 JPG/JPEG 格式位图文件。

JPEG 编码具有非常复杂的算法,利用了人眼对部分图像细节的不敏感,将位图中人眼不易察觉的细节内容刻意去除。虽然造成了一定的内容损失,但大幅降低了图片文件体积,尤其适合网络传输,例如表情包斗图,而不适合对图像质量要求较高的场合,例如电脑壁纸。

下面的这张图片,若使用 BMP 编码存储,体积高达 10.5MB:


现在分别改用 PNG 与 JPEG 编码:



文件体积对比:



视频的编码

前面提到,视频本质上就是连续播放的一大堆图片。因此,可以猜想视频的编码就是位图编码的堆砌。然而实际情况要比这句描述复杂得多。我们不妨做一个简单的计算:

上文的 1080P 分辨率「東宝株式会社」示例图片另存为高度压缩的 JPG 格式文件之后,体积缩小至约 300KB。假设有一部分辨率 1080P、帧率 24fps(即每秒24张图片)、长度1小时45分钟的电影,那么它总共的帧数(图片张数)为
24帧×60秒×105分钟 = 151,200帧

那么这部电影理论上的文件体积应为
300KB×151,200帧 = 45,360,000KB ≈ 43GB

这个计算结果大得吓人,不符合我们影音爱好者的常识:一部高清电影的文件体积约为 3~5GB。实际上,这部电影只有 3.45GB,还包括音频!

视频编码是如何做到如此节省数据量的?关键在于利用了前一帧已有的画面内容。请读者想象下面的图片是一段 10x5 分辨率(究极AV画质)的视频:


这里我们使用一种「坐标系」编码,记录第1帧的内容:
红: (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9) (1,10)
(2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9) (2,10)
(3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9) (3,10)
(4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9) (4,10)
(5,1) (5,2) (5,3) (5,4) (5,5) (5,6) (5,7) (5,8) (5,9) (5,10)
结束


接下来播放下一帧:


原本我们理应这样编码:
绿: (1,1)
红: (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9) (1,10)
(2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9) (2,10)
(3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9) (3,10)
(4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9) (4,10)
(5,1) (5,2) (5,3) (5,4) (5,5) (5,6) (5,7) (5,8) (5,9) (5,10)
结束

但实际上可以这样,仅记录变成了绿色的左上角那个像素:
变更
绿: (1,1)
结束


同理,现在从第2帧播放至第3帧:

变更
绿: (1,2)
结束


从第50帧至第51帧:


变更
绿: (5,10)
结束


显然,利用这种「基于前一帧」的视频编码思想,可以大幅减小数据量。但若遇到后一帧与前一帧差别巨大,类似切换镜头的情况时,仍需要老老实实地记录所有变更的像素:

变更
蓝: (1,1) (1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (1,8) (1,9) (1,10)
(2,1) (2,2) (2,3) (2,4) (2,5) (2,6) (2,7) (2,8) (2,9) (2,10)
(3,1) (3,2) (3,3) (3,4) (3,5) (3,6) (3,7) (3,8) (3,9) (3,10)
(4,1) (4,2) (4,3) (4,4) (4,5) (4,6) (4,7) (4,8) (4,9) (4,10)
(5,1) (5,2) (5,3) (5,4) (5,5) (5,6) (5,7) (5,8) (5,9) (5,10)
结束


目前最流行的视频编码是 H264,亦称 AVC,Advanced Video Coding。还有一种逐渐进入大众视野的新一代视频编码:H265,亦称 HEVC,High Efficiency Video Coding,便是 H264 的继承者。H265 采用了更先进、更复杂的压缩算法,进一步减少数据量,节省文件体积。


视频的码率

码率(亦称比特率,bitrate)指的是视频或音频在单位时间内的数据量,常见单位为 kbps(thousand Bits Per Second),即每秒使用了几千比特的数据。

码率的处理主要有两种模式:可变码率(variable bitrate)与固定码率(constant bitrate)。视频编码通常采用前者,在画面变化较小时尽量降低码率,在切换镜头时提供高码率。结合上文的「10x5 分辨率视频演示」与下面的示例视频,相信读者能够很快理解可变码率。

示例视频:新海誠动画电影《你的名字。
班固米条目链接

第64426帧左右,整个画面在动的地方只有左侧的人与下方的电风扇,码率 396.2kbps:

第65255帧左右,镜头的切换使码率飙升至 10007kbps:

第63294帧左右,持续数秒的黑屏,码率低至 45.7kbps:


在其他条件不变的情况下,码率越高,即压缩率(有损压缩)越低,视频记录的画面细节越清楚。因此视频高码率的优点是画面质量高,而缺点在于数据量大,对存储空间(本地视频)、网络带宽(在线视频),以及播放设备解码性能的要求较高。反之,低码率利于存储与传输,对解码性能要求较低,但牺牲了画面质量。

国内几大在线视频平台经常因其正版视频画质太低被吐槽,这其中的关键就在于码率。在线视频平台为了压缩服务器运行成本,或是为了进一步限制非会员用户的体验,而故意限制码率。但没想到限制过头了,导致一些视频尤其在切换镜头时,无法在一瞬间刷新画面内容,出现了色块、错位等现象,对要求较高的观众造成了灾难性的体验。


视频的解码

从它的名字大致可以猜出,解码就是编码的逆向过程。前面提到,编码就是用计算机数据表示并存储媒体内容(音频、图片、视频等)。因此,解码就是将存储着媒体内容的计算机数据解读出来,还原成可以观看、可以收听的媒体(媒介)。




视频的渲染

简言之,视频的渲染就是将解码产生的画面正确地输出到屏幕(显示器/监视器)上

不同视频渲染器的功能、性能、质量、兼容性不同,但通常情况下,渲染器的选择对最终的视频播放效果影响甚微,因此无需在意。不过若读者想要追求极致的画质,则不妨尝试入门 madVR 渲染器,但这个东西非常复杂且能耗很高(看视频变成打游戏),笔者曾经使用过一段时间,后来还是卸载掉,换回默认的渲染器了。


音频的编码

这里先补充一个概念:采样率(sample rate)。简单理解,音频的采样率就类似于视频的帧率。视频帧率的单位是 fps(Frames Per Second),即每秒播放的图片张数;音频采样率的单位是 Hz(赫兹),即每秒播放的音频样本(sample)数量。常见的音频采样率有 44100Hz、48000Hz、96000Hz 等。

音频编码的概念与视频编码类似。这里介绍几种常见的音频编码:

WAV:波形(waveform)音频,忠实地记录自然声波,基本没有数据压缩。优点是音频质量高,解码难度低,播放容易,因此被应用于CD唱片,以及 Windows 系统提示音等。缺点是数据量巨大
类比位图中的 BMP 编码。通常为 1411kbps 或 1536kbps 固定码率

FLAC:Free Lossless Audio Codec,最流行的一种无损压缩音频编码。在保证不损失音频质量的情况下,去除音频数据中的冗余内容,减少数据量,节省文件体积。
类比位图中的 PNG 编码。QQ音乐的所谓「SQ无损品质」通常为 1000kbps 左右的固定码率的 FLAC 音频,而更「奢侈」的 Hi-Res 标准的 FLAC 音频,码率可达两三千 kbps 甚至更高。

MP3 / MPEG Audio Layer 3:Moving Picture Experts Group Audio Layer 3,最流行的一种有损压缩音频编码。利用了人耳对部分音频细节的不敏感,将音频中人耳不易察觉的细节内容刻意去除。虽然造成了一定的内容损失,但大幅降低了音频文件体积。
类比位图中的 JPEG 编码。通常为介于 128kbps(标准品质)与 320kbps(HQ高品质)之间的固定码率。注意 MP3 并不是 MPEG-3,而是 MPEG-1 音频技术的第三代。

文件体积对比:
进阶阅读:WAV 音频的 1411kbps 是怎么来的?
这种应用于CD唱片的、最典型的音频格式,采用16位音频比特深度,加上 44100Hz 采样率,以及 2.0ch 双声道立体声/Stereo)。因此做个简单的乘法:
16×44,100×2 = 1,411,200
同理,将采样率更换为 48000Hz,即可得到 1536kbps 的码率。
现在,假设我们需要编码一段持续2秒钟、声波频率为 1000Hz(这不是采样率!)、声压(声音大小)为 40dB 的蜂鸣声,且采用 48000Hz 的采样率。若我们使用 WAV 的编码思路,即可得到:
1000Hz-40dB 1000Hz-40dB 1000Hz-40dB 1000Hz-40dB 1000Hz-40dB ......

这个「1000Hz-40dB」需要重复96000次,十分冗余。接下来我们使用 FLAC 的编码思路:
1000Hz-40dB x96000

这便大幅减少了数据量。类比前面提到的位图无损压缩,可谓异曲同工。


音频的码率

同样地,音频码率的概念与视频码率类似。前面提到,没有压缩与无损压缩的音频码率通常是上千 kbps,有损压缩的音频码率通常是 320kbps 或更低。

实际上,对于大多数人,以及大多数耳机与扬声器而言,320kbps 足以记录高品质的音乐,从 320kbps 提升至成百上千 kbps 仅仅是更还原音频中的小细节,不投入身心仔细聆听,几乎听不出区别。(以上描述对音频发烧友不适用)

但反过来的情况就不太一样了。从 320kbps 降低至 192kbps 甚至 128kbps 的码率,就很有可能感受得出音质明显变差。音频码率降低至这个水平,会导致人耳相对不敏感的高频部分出现明显损失。例如纯音乐 Bandari《Moonglow》中,背景的风铃声不再清澈、明晰;若过度降低码率,甚至会使风铃声几乎完全消失。




结语

本文涉及影音领域的多项专业知识,如有错误,欢迎指正。
#1 - 2023-1-11 19:50
(今天也有在补番)
长文支持
#2 - 2023-1-11 22:44
(目标是在星期五俱乐部)
好帖
#3 - 2023-1-11 23:02
(他们不是神啊)
支持
#4 - 2023-1-11 23:29
cy
#5 - 2023-1-12 14:35
(总之别急。)
cy
[来自Bangumi for android] 获取