图像的最小单位是像素,分辨率就是像素的排列数量——像素数按【边长之积】增长,所以从 720p 升到 1080p,数据量涨了 2.25 倍。
第四章把音频讲完了,第五章进入第二类媒体:视频。先从它的最小单位说起。
一、像素是什么
图像的显示载体是屏幕,屏幕由一个个发光点组成,每个点就是一个像素。 像素本身只干一件事:记录这一点的颜色。 所谓【分辨率 1920 × 1080】,说的就是横向 1920 个点、纵向 1080 个点。
二、像素数是怎么算的
总像素数 = 宽 × 高,这是一个非常简单的乘法。 720p = 1280 × 720 = 921,600 个像素 1080p = 1920 × 1080 = 2,073,600 个像素 2160p = 3840 × 2160 = 8,294,400 个像素 注意 1080p 只比 720p 长宽各多一半,像素数却是 2.25 倍。
三、一个像素占多大
每个像素要记住自己的颜色。最直观的记法是 RGB 三通道,各 8 bit。 3 字节 = 24 bit——这就是常说的【24 位真彩色】能表示 1677 万种颜色的原因。 所以一张未压缩的 1080p 图片大小约等于 1920 × 1080 × 3 ≈ 5.9 MB。 一张图就近 6 MB,这是后面所有视频问题的起点。
四、为什么这个数字要记
因为它是一切视频数据量的地基。 视频 = 一串图像,所以视频的数据量就是【一帧大小 × 帧率 × 时长】。 4.1.2 里音频用【采样率 × 位深 × 声道】算数据量,视频这边换成【分辨率 × 帧率】,逻辑完全一样。
五、动手 Demo:一张图有多少个像素,占多少空间
图像的最小单位是像素,分辨率就是一张图里像素的排列数量。
rows = [("640 x 480", 640 * 480), ("1280 x 720", 1280 * 720),
("1920 x 1080", 1920 * 1080), ("3840 x 2160", 3840 * 2160)]
for name, n in rows:
print("%-14s %-12s %.1f MB" % (name, format(n, ","), n * 3 / 1024.0 / 1024))
实跑输出:
--------------------------------------------------------------------
一张图有多少个像素,占多少空间
--------------------------------------------------------------------
图像的最小单位是像素。分辨率就是一张图里像素的排列数量。
分辨率 像素数 未压缩大小(RGB 24bit)
----------------------------------------------------
640 x 480 307,200 0.9 MB
1280 x 720 921,600 2.6 MB
1920 x 1080 2,073,600 5.9 MB
3840 x 2160 8,294,400 23.7 MB
一条规律:**像素数按【边长之积】增长**——
1080p 的像素数是 720p 的 2.25 倍,2160p 又再翻 4 倍。
一条规律:像素数按【边长之积】增长—— 1080p 的像素数是 720p 的 2.25 倍,2160p 又再翻 4 倍。
30 秒实验
- 算一下你手机屏幕分辨率对应的像素数。
- 再乘 3 字节,看它一屏未压缩有多大。
常见误区
- 以为分辨率翻倍就是数据量翻倍。长宽各翻一倍,数据量翻四倍。
- 把像素数当成文件大小。中间还隔着编码与压缩。
自测三问(点开对答案)
1. 分辨率 1920 × 1080 的像素数是多少? —— 2,073,600 个。 2. 一个 24 位真彩色像素占几个字节? —— 3 字节(RGB 各 8 bit)。 3. 720p 升到 1080p,像素数变成几倍? —— 2.25 倍。- ☐ 下一节(5.1.2 色彩空间)
相关笔记
- 数字视频 — 从一张图到一串图
- 色彩空间 — 像素的颜色怎么存
- 数字音频 — 声音那边对应的算法
- 🎬 FFmpeg入门详解 · 索引