上图例举了一个举例:FLV(视频:H.264,音频:AAC)转码为AVI(视频:MPEG2,音频MP3)的比如。可见视频转码的过程通俗地讲相当于把视频和音频从头“录”了一遍。
下面附上基于FFmpeg的Remuxer的流程图。图中运用浅红色标出了要害的数据结构.浅蓝色标出了输出视频数据的函数。可见成个程序包含了对两个文件的处理:读取输入文件(坐落左边)和写入输出文件(坐落右边)。中间运用了一个avcodec_copy_context()复制输入的AVCodecContext到输出的AVCodecContext。
简单介绍一下流程中要害函数的含义:
avformat_open_input():打开输入文件,初始化输入视频码流的AVFormatContext。
输出文件操作:
avformat_new_stream():创立输出码流的AVStream。
avio_open():打开输出文件。
av_interleaved_write_frame():将AVPacket(存储视频压缩码流数据)写入文件。
代码