【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_S16 或 AV_SAMPLE_FMT_FLTP。

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

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

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

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

相关推荐
akinggw24 分钟前
libsherpacore - 基于 sherpa-onnx 的 C++ 语音交互静态库
c++·交互·语音识别
xiaoye-duck39 分钟前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(中):全量响应实现和测试
网络·c++·语言模型·chatgpt
東隅已逝,桑榆非晚1 小时前
算法3.双指针法-快乐数
c++·笔记·学习·算法
eggwyw2 小时前
C++相交链表和反转链表详解
开发语言·c++
杜 硕2 小时前
从零开始的C++生活——第六讲——02
c++·算法·生活
小超人诞生日记2 小时前
C++ STL 反向迭代器:从源码框架到适配器实现
c++·算法
青少儿编程课堂2 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园成语接龙大挑战解析
c++·python·算法·bfs·信息学竞赛
小贾要学习3 小时前
【C++后端开发项目】Reactor 模型 / C++ 仿写 muduo HTTP 服务器:让底层网络库真正跑起网页
linux·服务器·c++·http·网络编程·muduo·reactor模型
Android系统攻城狮3 小时前
Linux FFmpeg深度解析之avcodec_parameters_copy调用流程与实战(二十五)
linux·运维·服务器·ffmpeg·音视频·车载音频
A7bert7773 小时前
【MobileSAM部署至RK3588】环境适配→转换RKNN→开发板部署
c++·人工智能·深度学习·目标检测·ubuntu