第二章 音视频-FFmpeg对应解析格式说明
第一章 音视频-FFmpeg解码流程和对应结构参数意
第二章 音视频-FFmpeg对应解析格式说明
第三章 音视频-FFmpeg对应AVFrame解码处理思路和用途
第四章 音视频-FFmpeg实现播放器思维
第五章 音视频-FFmpeg实现播放器解封装、读AVPacket包
第六章 音视频-FFmpeg实现播放器解码和对应数据处理
音视频解码格式和容器格式
FFmpeg 支持广泛的音视频编解码器格式,包括但不限于以下几种常见的格式:
-
视频编解码器:
- H.264 / AVC
- H.265 / HEVC
- MPEG-2
- MPEG-4 / DivX / Xvid
- VP8 / VP9
- AV1
- Motion JPEG (MJPEG)
- Apple ProRes
- DNxHD / DNxHR
- Theora
- AVS
- XDCAM
- CineForm
- 和许多其他专有和开放的视频编解码器。
-
音频编解码器:
- AAC
- MP3
- AC-3 / E-AC-3
- Opus
- Vorbis
- FLAC
- WMA
- PCM
- AMR
- DTS
- Apple Lossless
- 和许多其他音频编解码器。
-
容器格式:
- MP4
- MOV
- AVI
- MKV
- FLV
- MPEG-TS
- WebM
- WAV
- OGG
- 和许多其他常见和不常见的容器格式。
FFmpeg 还提供了许多过滤器和工具,可以对音视频数据进行处理、转码、过滤等操作。因此,FFmpeg 是一个功能强大且高度可定制的多媒体处理框架,能够满足各种不同的音视频处理需求。
AVFrame对应音视频格式
AVFrame
结构体中的数据格式取决于所表示的音视频帧的内容。在 FFmpeg 中,AVFrame
结构体中存储的数据通常是解码后的音视频帧数据,因此其数据格式取决于解码后的数据内容。
以下是一些常见的数据格式及其对应的存储方式:
视频帧数据格式:
-
YUV 格式:
- YUV420P:最常见的 YUV 格式之一,包括亮度(Y)和色度(U、V)三个平面,其中色度平面的采样率是亮度平面的四分之一。
- YUV422P:与 YUV420P 类似,但色度平面的采样率是亮度平面的一半。
- YUV444P:每个像素的亮度和色度分量都有独立的采样点,没有颜色抽样。
- YUV410P、YUV411P:在垂直和水平方向上进行更多的颜色抽样,减少了色度分量的存储。
-
RGB 格式:
- RGB24:每个像素使用 24 位(3 字节)表示,依次是红、绿、蓝三个分量,存储顺序通常是从左上角开始,从左到右、从上到下依次排列。
- RGB32:与 RGB24 类似,但每个像素使用 32 位(4 字节)表示,通常最后一个字节用于填充 alpha 通道。
-
灰度图像:
- GRAY8:灰度图像,每个像素只有一个亮度分量,使用 8 位表示。
-
其他格式:
- BGR、BGRA:与 RGB 类似,但存储顺序颠倒,即蓝色分量在前。
- ARGB、ABGR:与 RGB 类似,但带有 alpha 通道。
音频帧数据格式:
-
PCM(脉冲编码调制):
- PCM 是最常见的音频数据格式之一,它直接表示原始音频采样值。PCM 格式的音频通常以帧为单位进行处理,每个帧包含多个采样点。
- 常见的 PCM 格式包括:
AV_SAMPLE_FMT_U8
:无符号 8 位整数。AV_SAMPLE_FMT_S16
:有符号 16 位整数。AV_SAMPLE_FMT_S32
:有符号 32 位整数。AV_SAMPLE_FMT_FLT
:单精度浮点数。AV_SAMPLE_FMT_DBL
:双精度浮点数。
-
压缩格式:
- AAC(Advanced Audio Coding)、MP3(MPEG-1/2 Audio Layer III)、Opus 等是常见的音频压缩格式,它们采用了各种压缩算法来减小音频数据的大小。
- 这些格式通常在传输和存储时使用,可以减小带宽和存储空间的占用。
-
其他格式:
- AC-3(Dolby Digital)、DTS(Digital Theater Systems)、FLAC(Free Lossless Audio Codec)、Vorbis 等也是常见的音频格式,它们在特定的应用场景中有其优势。
AVFrame
结构体中的 data
数组存储了指向帧数据的指针,而 linesize
数组存储了每个数据平面的行大小。具体的数据格式和存储方式可以通过 format
字段来确定,它表示帧数据的像素格式或采样格式。常见的像素格式包括 AV_PIX_FMT_YUV420P
、AV_PIX_FMT_RGB24
等,而常见的采样格式包括 AV_SAMPLE_FMT_S16
、AV_SAMPLE_FMT_FLT
等。
总之,AVFrame
结构体的数据格式取决于所表示的音视频帧的内容和编解码后的数据格式。