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

相关推荐
于小猿Sup9 小时前
VMware在Ubuntu22.04驱动Livox Mid360s
linux·c++·嵌入式硬件·自动驾驶
小小编程路11 小时前
C++ 多线程与并发
java·jvm·c++
四方云12 小时前
电销系统中FreeSWITCH桥接播放自定义振铃:被叫接听后振铃持续问题解决
ffmpeg
程序leo源12 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#
zh_xuan13 小时前
解决VS Code 控制台中文乱码
c++·vscode·乱码
郭涤生13 小时前
飞凌 RK3588 开发板同显 / 异显模式切换
c++·rk3588
计算机安禾13 小时前
【c++面向对象编程】第38篇:设计原则(二):里氏替换、接口隔离与依赖倒置
开发语言·c++
code_whiter13 小时前
C++1进阶(继承)
开发语言·c++
智者知已应修善业14 小时前
【51单片机LED闪烁10次数码管显示0-9】2023-12-14
c++·经验分享·笔记·算法·51单片机
智者知已应修善业14 小时前
【51单片机2按键控制1个敞亮LED灯闪烁和熄灭】2023-11-3
c++·经验分享·笔记·算法·51单片机