我们在之前的文章中知道, 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