ffmpeg视频编码例子:https://git.ffmpeg.org/gitweb/ffmpeg.git/blob/HEAD:/doc/examples/encode_video.c
从main函数入手,核心接口:avcodec_find_encoder_by_name、avcodec_open2、avcodec_send_frame、avcodec_receive_packet
程序主要流程:
- 查找编码器
- 初始化编码器(编码参数)
- 构建视频数据包
- 编码数据包
- 清理解码器
这个例子编码的是裸流,所以没有封装等操作。
从输入里获得编码器名称
codec = avcodec_find_encoder_by_name(codec_name);
if (!codec) {
fprintf(stderr, "Codec '%s' not found\n", codec_name);
exit(1);
}
设置详细编码参数(码率、分辨率、帧率、GOP、像素格式等)
/* put sample parameters */
c->bit_rate = 400000;
/* resolution must be a multiple of two */
c->width = 352;
c->height = 288;

本文通过分析ffmpeg的源码例子,详细介绍了视频编码的过程,包括查找编码器、初始化编码参数、构建并编码视频数据包,以及编码器的清理。重点讨论了avcodec_send_frame和avcodec_receive_packet接口在处理I帧、P帧、B帧时的作用,以及如何处理编码器中剩余的数据。
最低0.47元/天 解锁文章
2649

被折叠的 条评论
为什么被折叠?



