【FFmpeg】是什么是未压缩的裸流?

什么是未压缩的原始数据(裸流)?

总结来说,在 FFmpeg 开发中,我们遇到的"裸流"主要有两种:

1. 视频裸流:YUV 或 RGB 像素数据
  • 概念 :你可以把视频想象成一个每秒闪过很多张图片(比如 30 张,即 30FPS)的幻灯片。原始数据就是记录这一张张图片上每一个像素点到底是什么颜色的数据。

  • RGB :最基础的表示法(红、绿、蓝)。每个像素由 R、G、B 三个数值组成,通常每个颜色占 1 字节(8 bits),所以一个像素需要 3 个字节

  • YUV (重点):在音视频开发中,裸流绝大多数是 YUV 格式(特别是 YUV420P)。

    • Y 代表明亮度(Luma,即灰度图/黑白画面)。

    • U 和 V 代表色度(Chroma,颜色信息)。

    • 为什么用 YUV? 科学家发现人眼对亮度极其敏感,但对色彩的细节相对迟钝。所以我们可以保留所有的 Y(亮度)数据,但扔掉一部分 U 和 V(色度)数据,人类肉眼根本察觉不到区别。

    • YUV420P :这是最经典的做法。它通过丢弃部分色彩数据,让平均每个像素占用的空间从 RGB 的 3 字节,骤降到了 1.5 字节 ,直接在裸流阶段就减小了一半的体积!这也是你课程第 3-04 节要专门讲 RGB → YUV 转换的原因。

2. 音频裸流:PCM 脉冲编码调制数据
  • 概念:声音在自然界是连续的模拟波浪。要在计算机里保存它,就必须在波浪上"打点"取样。PCM(Pulse Code Modulation)就是记录这些"点"的原始数据集合。

  • 三个核心参数

    1. 采样率 (Sample Rate):一秒钟打多少个点?常见的 44100Hz 意味着一秒钟采集四万四千一百个数据点。

    2. 采样位深 (Bit Depth / Sample Format) :每个点用多大的容器装?16 bit(2字节)或 32 bit(4字节)。在 FFmpeg 中常表示为 AV_SAMPLE_FMT_S16AV_SAMPLE_FMT_FLTP

    3. 声道数 (Channels):单声道还是左/右立体声?

为什么理解"裸流"如此重要?

如果你在右侧的页面里操作一下计算器,比如选择 1080P + 60帧 + YUV420P ,你会看到:1秒钟的视频裸流竟然高达 178 MB! 如果不压缩,你看一小时的电影(仅画面)需要下载约 625 GB 的数据。

这就完美解释了为什么音视频处理必须要有编码器(H.264 / AAC)。你的代码在读取了摄像头捕捉到的 YUV 裸流和麦克风捕捉的 PCM 裸流后,必须调用编码器将这庞大无比的 178 MB/s 瞬间压缩到几 MB/s,然后才能封装成 MP4 文件保存下来。

相关推荐
不染尘.2 小时前
排序算法详解1
开发语言·数据结构·c++·算法·排序算法
啊我不会诶2 小时前
25CCPC东北邀请赛vp补题
c++·算法
plus4s2 小时前
3月20日(进阶11)
c++·算法
2301_816651222 小时前
移动语义在容器中的应用
开发语言·c++·算法
2401_857918292 小时前
实时数据处理中的C++应用
开发语言·c++·算法
2401_884563242 小时前
C++中的装饰器模式实战
开发语言·c++·算法
.select.2 小时前
C++ 单例模式
java·c++·单例模式
2401_891482172 小时前
C++中的原型模式
开发语言·c++·算法