ffmpeg 中 AVStream ,AVInputFormat ,AVOutputFormat 三者的区别,和使用场景是什么样的?

32 阅读2分钟
  1. AVStream(媒体流):

    • 作用: AVStream 结构体表示音频或视频媒体流,包含了该媒体流的详细信息,如编解码器类型、时基(时间基准)、帧率、分辨率等。
    • 使用场景: 在解封装(Demuxing)和解码(Decoding)过程中,AVStream 用于存储和传递媒体流的信息,以便正确解封装和解码。
  2. AVInputFormat(输入封装格式):

    • 作用: AVInputFormat 结构体表示输入媒体流的封装格式,包含了封装格式的相关信息,如文件扩展名、解封装器的函数指针等。
    • 使用场景: 在 FFmpeg 中,输入封装格式用于打开媒体文件,并将媒体文件解封装成原始的音视频流,以供后续解码或处理。AVInputFormat 通常用于描述一个媒体文件的封装格式。
  3. AVOutputFormat(输出封装格式):

    • 作用: AVOutputFormat 结构体表示输出媒体流的封装格式,包含了封装格式的相关信息,如文件扩展名、编封装器的函数指针等。
    • 使用场景: 在 FFmpeg 中,输出封装格式用于将解码后的音视频数据封装为一个新的媒体文件。AVOutputFormat 通常用于描述生成的媒体文件的封装格式。

在实际使用中,AVStream 通常是通过 AVFormatContext 结构体的 streams 数组获取的,它存储了一个媒体文件中所有的媒体流。AVInputFormatAVOutputFormat 通常通过 FFmpeg 中的函数(如 av_find_input_formatav_guess_format)来获取。

总的来说,AVStream 表示媒体流的详细信息,而 AVInputFormatAVOutputFormat 表示输入和输出的媒体文件的封装格式信息。在音视频处理中,这些结构体协同工作,确保正确地解封装、解码和封装。