【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 文件保存下来。

相关推荐
【 】42318 分钟前
C++&STL(Standard Template Library,标准模板库)
java·开发语言·c++
一只牛_00730 分钟前
pthread亲和性继承的一个坑:main绑核让整个进程退化到单核
c++
张健11564096481 小时前
C++访问控制与友元
java·开发语言·c++
BirdenT2 小时前
20260424紫题训练
c++·算法
还是阿落呀2 小时前
基本控制结构
开发语言·c++·算法
样例过了就是过了2 小时前
LeetCode热题100 最长有效括号
c++·算法·leetcode·动态规划
南境十里·墨染春水2 小时前
C++笔记 forward完美转发
开发语言·c++·笔记
吃着火锅x唱着歌2 小时前
深度探索C++对象模型 学习笔记 第四章 Function语意学(2)
c++·笔记·学习
一行代码一行诗++3 小时前
C语言中if的使用
c语言·c++·算法
c++之路3 小时前
C++ STL
java·开发语言·c++