🎬 第二章 音视频入门
📄 一句话概括

电视信号数字化也是采样、量化、编码三步——采样点从 41 万涨到 829 万(20 倍),码率却只涨 2~3 倍,这个缺口就是编码算法挣来的。

📝 本节和前面几节的关系

2.4.2 讲了历史,这一节讲数字电视在原理上到底做了什么。

一、三步走

第一步 采样:把连续的画面按网格切开,切成一个个采样点。 第二步 量化:每个采样点的亮度取一个有限档位(比如 256 档)。 第三步 编码:按标准把量化后的数据压成码流(MPEG-2、H.264……)。 和音频数字化的三步一模一样——这是所有模拟量数字化的通用套路。

二、三个维度上的采样

电视信号比音频复杂一点,它在三个维度上都要采样: 水平方向:一行切多少个点。 垂直方向:一帧切多少行。 时间方向:一秒切多少帧。 三个方向相乘,才是每秒要处理的采样点总数。

三、数据量的跳跃

Demo 18 算过:标清 720 × 576 每帧 41 万采样点;4K 3840 × 2160 是 829 万——20 倍。 但 4K 的实际码率只比高清高 2~3 倍。 中间这个缺口不是凭空消失的,是编码算法一点点挣来的——这也是为什么新标准永远在追更少的码率。

四、为什么要先讲原理再讲命令行

知道这三步,命令行里的参数才有意义: -s 1920x1080 决定水平与垂直方向采样多少点。 -r 30 决定时间方向每秒采多少帧。 -b:v 4M 决定编码之后每秒允许多少比特。 不懂原理,这些参数就只是死记的咒语;懂了原理,你能反推该填什么。

五、动手 Demo:电视信号怎么变成数字——三步

和音频一样,电视信号数字化就三步:采样、量化、编码。

formats = [
    ("标清 720x576",   720, 576, 25),
    ("高清 1920x1080", 1920, 1080, 25),
    ("4K 3840x2160",   3840, 2160, 25),
]
for name, w, h, fps in formats:
    per_frame = w * h
    per_sec = per_frame * fps
    print("%-14s 每帧 %9s 点,每秒 %12s 点"
          % (name, format(per_frame, ","), format(per_sec, ",")))

实跑输出:

--------------------------------------------------------------------
电视信号怎么变成数字——三步
--------------------------------------------------------------------

和音频一样,电视信号数字化就三步:采样、量化、编码。

  第一步 采样:把连续的画面按网格切开
  第二步 量化:每个小格子的亮度取一个有限档位
  第三步 编码:按标准压成码流(MPEG-2、H.264……)

  制式               每帧采样点     每秒帧数     每秒采样点
  -----------------------------------------------------------
  标清 720x576       414720         25           10,368,000
  高清 1920x1080     2073600        25           51,840,000
  4K 3840x2160       8294400        25           207,360,000

  采样点从 41 万涨到 829 万,是 20 倍;
  但 4K 的码率只比高清高 2~3 倍——**这个缺口就是编码算法挣来的。**

采样点从 41 万涨到 829 万,是 20 倍;4K 码率却只高 2~3 倍。 这个缺口就是编码算法挣来的——也是新标准永远在追的目标。

30 秒实验

  1. 把 Demo 18 的三个数字抄下来,算一算 4K 和标清之间的倍数。
  2. 再找一条 4K 视频看它实际码率,对比一下缺口有多大。

常见误区

  1. 以为数字化就是【把画面拍清楚】。它是采样 + 量化 + 编码三步。
  2. 死记命令行参数。参数都能从原理反推出来。
自测三问(点开对答案) 1. 电视信号数字化的三步是什么? —— 采样、量化、编码。 2. 电视信号在几个维度上采样? —— 三个:水平方向、垂直方向、时间方向。 3. 为什么 4K 采样点是高清的数倍,码率却只高两三倍? —— 因为编码算法在不断进步,把冗余去得更干净。

相关笔记