## FFmpeg 概述
FFmpeg 是一套强大、开源的工具和库,用于处理多媒体。它包含诸如 `ffmpeg`(用于转换)、`ffplay`(一个简单的播放器)和 `ffprobe`(用于流分析)等命令行工具,以及用于集成到自定义项目中的库。
核心库包括 `libavformat`(I/O 和复用/解复用)、`libavcodec`(编码/解码)以及用于过滤、缩放和重采样的其他库。典型的流程包括将多媒体流解复用为音频和视频组件,然后使用诸如 `AVFormatContext`、`AVStream`、`AVPacket` 和 `AVFrame` 等结构将这些组件解码为原始数据。
该过程从使用 `avformat_open_input` 打开文件、使用 `avformat_find_stream_info` 查找流信息,然后迭代流以提取帧率和编解码器类型等详细信息开始。编解码器使用 `avcodec_find_decoder` 识别,并为解码创建一个 `AVCodecContext`。最后,使用 `av_read_frame` 读取数据包,使用 `avcodec_send_packet` 将数据包发送到解码器,并使用 `avcodec_receive_frame` 接收解码后的帧。
一个完整的示例,可在 `ffmpeg-101` 仓库中找到,演示了此过程,并可以使用 `meson` 和 `ninja` 构建。