每天一点点音视频_ffmpeg编码过程

我们在之前的文章中知道, ffmpeg里, 解码后的数据是一个一个的 AVFrame, 我们要对它进行编码, 让它变成 AVPacket, 然后对 AVPacket 打包成一个最终的音视频文件。

我们首先需要一个编码器, 在之前创建解码器的时候,我们是根据 AVPacket 的数据来找特定的编码器的, 但是现在,我们是在编码,我们可以选择特定的编码器。

codec = avcodec_find_encoder(AV_CODEC_ID_MP2);
c = avcodec_alloc_context3(codec);

因为是在编码,所以我们不仅可以决定编码器,还可以选择不同的参数比如码率,采样率等等。

在设置好参数后,需要执行打开命令

avcodec_open2(c, codec, NULL)

此时, 编码器准备好了。

剩下的就是给它喂数据,然后等它拉出来了。

先准备输入和输出的数据结构

pkt = av_packet_alloc();
frame = av_frame_alloc();
av_frame_get_buffer(frame, 0);
av_frame_make_writable(frame);

对于 Frame, 需要填入数据和数据信息

额, 开始琐碎了, 不够抽象了, 花太多时间了。

明天: 每天一点点音视频_AVPacket