音视频基础(一):一个视频从像素到播放,中间经历了什么?

音视频基础(一):一个视频从像素到播放,中间经历了什么?

你有没有想过:手机拍一段 30 秒的视频,为什么占几十 MB?而下载回来的 2 小时电影,却只有 2GB?视频这玩意儿,到底怎么"瘦身"的?

大家好,我是黒漂技术佬。

我做智慧农业那会儿,摄像头全天候对着大棚拍,一天下来几十 GB 的录像,硬盘像被啃一样噌噌往下掉。要想存得住、传得动,不懂音视频底层原理根本玩不转。所以这个系列,咱们就从最基础的概念聊起------不装神弄鬼,纯小白友好。


一、像素:视频这台机器的"原子"

先别想视频。我们从一个画面开始。

打开手机相册,把一张照片双指放大、再放大------看到那些彩色小方块了吗?对,那就是像素(Pixel) 。它是图像的最小单元,每个像素存一个颜色。1920 × 1080 的分辨率,意思就是横向 1920 个像素、纵向 1080 个像素,一张画面共 2,073,600 个像素,也就是我们常说的 1080P(约 200 万像素)

1.1 颜色是怎么存进像素的?

最直观的方式是 RGB :每个像素用三个数字表示,分别代表红(Red)、绿(Green)、蓝(Blue)的亮度。比如纯红色是 (255, 0, 0),纯白是 (255, 255, 255)。这也是你在显示器、手机屏幕上看到颜色的底层逻辑------屏幕本身就是靠红绿蓝三种发光元件拼出来的。

每个通道用 8 位(bit)存储,就是 0~255 共 256 个级别。一个像素 3 个通道,就是 24 bit = 3 Byte

1.2 一张图片有多大?我们算笔账

一张 1920×1080 的 RGB 图片,原始大小是:

复制代码
1920 × 1080 × 3 Byte = 6,220,800 Byte ≈ 6 MB

一张 6MB。那视频呢?


二、帧:给图片加上时间轴

视频的本质,就是连续快速切换的静止画面 。每张画面叫一帧(Frame) ,每秒切换多少张就是帧率(FPS,Frames Per Second)

常识:电影标准是 24 fps,电视/网络视频通常是 30 fps,游戏玩家追求 60 fps 甚至 144 fps。为什么 24?因为这是人眼产生"流畅运动感"的最低门槛,也是胶片时代留下来的工业标准------再低,你就会觉得画面卡顿。

现在来算一笔扎心的账:

参数 数据
分辨率 1920 × 1080
单帧原始大小 ~ 6 MB
帧率 30 fps
每秒数据量 6 MB × 30 = 180 MB/s
每分钟数据量 180 × 60 = 10.5 GB

一分钟 1080P 30fps 原始视频 ≈ 10.5 GB。 你手机拍一段 5 分钟的视频,要是存原始数据,需要 50 GB。这还不算音频。一部蓝牙耳机的可用容量都撑不住你拍三分钟。

所以,视频必须压缩。这不是选择,是物理定律逼的。


三、YUV:用"偷懒"的思路压缩颜色

在进入编码之前,有一个关键动作:色彩空间转换 。视频编码几乎不用 RGB,而是用 YUV

3.1 YUV 是什么?

  • Y(亮度 Luminance):画面的明暗信息,也就是你把电视调成黑白的那个东西。
  • U(色度 Chrominance-Blue):蓝色偏移量。
  • V(色度 Chrominance-Red):红色偏移量。

简单说:Y 管轮廓,UV 管上色。

3.2 为什么要搞这么麻烦?

因为人眼对亮度变化的敏感度,远高于对颜色变化的敏感度。你可以做一个实验:把一张彩色照片的亮度调暗一点,马上能察觉;但把颜色稍微偏一点,肉眼几乎看不出来。

这个生理特性被工程师们利用到了极致:保留全部亮度,削减色度信息 。这就是色度抽样(Chroma Subsampling)

格式 含义 数据量(相对 4:4:4)
4:4:4 每个像素都保留 Y、U、V 100%(无损)
4:2:2 水平方向每 2 个像素共享一组 UV ~67%
4:2:0 水平+垂直每 4 个像素共享一组 UV 50%

4:2:0 是互联网视频的事实标准。 YouTube、B站、抖音上传的视频全是 YUV 4:2:0。在你还没开始编码压缩之前,光这一步就已经砍掉了一半的色度数据,而画质在肉眼看来几乎没变化。


四、音频:被"静音"忽略的另一半

很多人聊视频只管画面,其实音频也占了不少带宽。

4.1 音频怎么数字化?

自然界的声音是连续的模拟波形(声波推动空气振动鼓膜),计算机只能存离散的数字。所以需要一个**采样(Sampling)**过程:每隔固定时间测量一次波形的高度(振幅),量化成数字。

两个关键参数:

  • 采样率(Sample Rate):每秒采多少次。CD 音质是 44100 Hz(每秒采 44100 次),因为根据奈奎斯特定理,采样率必须至少是最高频率的 2 倍,人耳上限约 20kHz,44100 > 20000×2,刚好够用。
  • 位深(Bit Depth):每次采样用多少 bit 表示。CD 是 16 bit,可以表示 65536 个级别。

双声道立体声,CD 音质的原始数据量:

复制代码
44100 × 16 bit × 2 声道 = 1,411,200 bps ≈ 1.4 Mbps ≈ 172 KB/s

一分钟 CD 音质 ≈ 10 MB。5 分钟 ≈ 50 MB。

4.2 所以音频也得压

这种原始格式叫 PCM(脉冲编码调制),是 WAV 文件的内核。但没人会把 PCM 直接塞进视频------太大。于是有了 MP3、AAC、Opus 这些音频编码,本质都是通过各种听觉心理学模型(比如人耳听不到的频率直接丢弃、强音掩盖弱音)来砍数据,后面文章会细讲。


五、容器:快递箱子 ≠ 里面的东西

这是个新手最常见的误区,我必须单开一节:MP4 不是编码格式,是容器格式。

  • 编码格式(Codec):怎么"压缩"画面和声音。视频:H.264、H.265、VP9、AV1。音频:AAC、MP3、Opus。
  • 容器格式(Container):怎么把压缩后的视频流、音频流、字幕、章节、封面图打包成一个文件。常见的有 MP4、MKV、AVI、FLV、TS。

打个比方:编码是"怎么把衣服叠小",容器是"用什么行李箱装"。

复制代码
┌─────────── MP4 容器 ───────────┐
│  ┌─ 视频流 ─────────────────┐  │
│  │ H.264 编码,1080P 30fps  │  │
│  └──────────────────────────┘  │
│  ┌─ 音频流 ─────────────────┐  │
│  │ AAC 编码,44.1kHz 128kbps│  │
│  └──────────────────────────┘  │
│  ┌─ 字幕流 ─────────────────┐  │
│  │ 中文 / 英文 .srt         │  │
│  └──────────────────────────┘  │
└───────────────────────────────┘

同一个 MP4 容器里,视频可能是 H.264 也可能是 H.265,音频可能是 AAC 也可能是 MP3。所以下次你发现一个 MP4 文件播放不了,别骂 MP4,要骂就骂那个不兼容的编码。


六、一张图总结:视频的"人生旅程"

复制代码
原始画面采集
    │
    ▼
RGB → YUV 色彩转换(第一次瘦身)
    │
    ▼
编码器(H.264 / H.265)压缩(第二次瘦身,大瘦)
    │
    ▼
音频 PCM → AAC 编码压缩
    │
    ▼
封装进 MP4 / FLV 容器
    │
    ▼
网络传输 / 存储
    │
    ▼
播放端:解封装 → 解码 → YUV → RGB → 显示
                      解码 → PCM → 扬声器

你双击一个 MP4 文件的那一刻,你的播放器就在自动跑完"解封装 → 视频解码 → 音频解码 → 同步播放"这一整条流水线。


本篇核心回顾

概念 一句话理解
像素 图像的最小单元,视频的"原子"
一张静止画面,多帧连续播放 = 视频
帧率 每秒放多少张,24 起流畅,60 丝滑
RGB 红绿蓝,显示器用的颜色模型
YUV 亮度+色度,编码用的颜色模型,人眼友好
色度抽样 4:2:0 保留全亮度、砍半色度,肉眼无感,数据砍半
PCM 原始音频数据,巨占空间
采样率 44100 Hz CD 音质标准,每秒采 44100 次
编码 vs 容器 编码管怎么压,容器管怎么装

我是黒漂技术佬,一个在农业、AI 和音视频之间反复横跳的程序员。