采集是整条链路的源头,它吐出来的是没有压缩的数据——4K60 的原始带宽有好几个 Gbps,接口撑不住就只能在源头让步。
7.1 讲了编码要做什么,这一节往回退一步——数据是怎么从传感器进到内存的。
一、采集链路的四段
从光到内存,中间要过四道手: 传感器——把光变成电信号,输出的是 Bayer 原始数据; ISP(图像信号处理器)——去马赛克、白平衡、降噪、色调曲线; 采集接口——USB、HDMI、SDI、PCIe,把数据搬出去; 内存——到达应用程序,这才轮到编码器接手。 每一段都在改数据的形态,也都在改带宽。
二、传感器出来的是 Bayer
常见传感器每个像素只测一种颜色:一行隔一个红、一行隔一个绿,四个像素拼成一个颜色组。 所以 Bayer 原始格式平均每像素 1 字节——这是整条链路上最省的一种格式。 要还原成彩色,必须做 去马赛克(demosaic),而这一步是猜出来的:靠周围像素插值。所以采集质量的源头在 ISP,不在编码器。
三、格式选择就是带宽选择
同样是 4K60,换一种像素格式,带宽可以差三倍: Bayer 原始——每像素 1 字节,3981 Mbps; YUV 4:2:0——每像素 1.5 字节,5972 Mbps; YUV 4:2:2——每像素 2 字节,7963 Mbps; RGB24——每像素 3 字节,11944 Mbps。 调采集参数时,第一件事就是确认用哪种格式——它直接决定后面接口扛不扛得住。
四、接口是硬门槛
选采集卡,本质上是在选接口: USB 2.0 理论 480 Mbps、实际可用约 300 Mbps——720p30 的 YUV 4:2:0 要 332 Mbps,已经很勉强,所以老摄像头一律先压成 MJPEG 再传; USB 3.0 标称 5 Gbps、可用约 3.2 Gbps——单路 4K60 必然要压缩或降格式; HDMI 2.0 约 14.4 Gbps、HDMI 2.1 约 42.6 Gbps——足够跑未压缩; SDI(3G/6G/12G)——广电用的同轴接口,长距离、稳定,是专业采集的首选。 带宽不够时,只能三选一:降分辨率、降帧率、降格式。
五、采集参数会一路影响到编码
采集端做错了,后面怎么调都补不回来: 拍糊了——编码器只能忠实地记录模糊,压缩算法不会凭空造细节; 噪点太多——噪声是高频信息,既费码率又不讨好,编码器要花大量位数去描述它; 曝光和白平衡跑偏——后期调色是在已经量化过的数据上做的,越调越花。 所以工程上有句话:七分靠拍,三分靠压。
六、动手 Demo:采集端一上来就是几个 Gbps
采集拿到的第一份数据是没有压缩的,带宽由三个数决定。
rows = [("1280×720", 30), ("1920×1080", 30), ("1920×1080", 60),
("3840×2160", 30), ("3840×2160", 60)]
for res, fps in rows:
w, h = res.split("×")
bps = int(w) * int(h) * 3 * fps
print("%-11s %2d fps %8.1f MB/s %6.0f Mbps"
% (res, fps, bps / 1e6, bps * 8 / 1e6))
实跑输出:
--------------------------------------------------------------------
采集端一上来就是几个 Gbps
--------------------------------------------------------------------
采集拿到的第一份数据是【没有压缩】的,带宽由三个数决定:
**采集带宽 = 宽 × 高 × 每像素字节 × 帧率**。
按 RGB24(每像素 3 字节)算:
分辨率 帧率 每像素 原始带宽 MB/s 折合 Mbps
--------------------------------------------------------------
1280×720 30 3 字节 82.9 664
1920×1080 30 3 字节 186.6 1493
1920×1080 60 3 字节 373.2 2986
3840×2160 30 3 字节 746.5 5972
3840×2160 60 3 字节 1493.0 11944
同一颗 4K60 摄像头,一路走下来其实是三种带宽:
传感器 Bayer 原始 3840×2160×1×60 = **3981 Mbps**
转成 RGB24 3840×2160×3×60 = **11944 Mbps**
再转 YUV 4:2:0 3840×2160×1.5×60 = **5972 Mbps**
**每一环的接口(USB、PCIe、内存带宽)都得扛得住这几个 Gbps。**
USB 3.0 标称 5 Gbps、可用约 3.2 Gbps——**单路 4K60 走 USB 3.0 必然要压缩或者降格式。**
同一颗 4K60 摄像头,一路走下来是三种带宽: Bayer 原始 3981 Mbps、RGB24 11944 Mbps、YUV 4:2:0 5972 Mbps。 每一环的接口都得扛得住这几个 Gbps。
30 秒实验
- 打开电脑的【相机】应用或 OBS,找到采集格式那一栏,看它默认给的是 MJPEG 还是 YUY2。
- 把同一台摄像头切到两种格式,观察 CPU 占用与画面延迟的差别。
常见误区
- 以为【采集就是复制一份画面】。从 Bayer 到彩色中间有大量计算,ISP 的活儿一点不比编码轻。
- 只看分辨率不看格式。720p 的 RGB24 可能比 1080p 的 YUV 4:2:0 还费带宽。
- 把采集卡当成【带宽转换器】随便买。接口带宽是硬上限,超了就必然降格式或压缩。
自测三问(点开对答案)
1. 采集链路有哪四段? —— 传感器、ISP、采集接口、内存(应用程序)。 2. 4K60 用 YUV 4:2:0 采集,原始带宽大约多少? —— 3840×2160×1.5×60 ≈ 5972 Mbps。 3. 为什么说【七分靠拍,三分靠压】? —— 噪声与模糊会大幅抬高码率而且无法在编码端补救。- ☐ 下一节(7.3 音频编码原理)
相关笔记
- 视频编码原理 — 编码器接手之后的事
- 色彩空间 — YUV 4:2:0 的由来
- 数字视频 — 数据量的基本算法
- 音频采集 — 音频那边的采集
- 🎬 FFmpeg入门详解 · 索引