在工作中会遇到提取视频中的i帧或者p帧的需求,现在来讲解下怎么实现这个功能,代码如下:
int mp4_to_yuv(char * input_path, char * output_path)
{
//1、注册所有组件
av_register_all();
//2、打开视频文件
AVFormatContext *pFormatCtx = avformat_alloc_context();
if ((avformat_open_input(&pFormatCtx, input_path, NULL, NULL)) < 0)
{
printf("Cannot open input file");
return -1;
}
//3、获取视频信息
if (avformat_find_stream_info(pFormatCtx, NULL) < 0)
{
printf("Cannot find stream\n");
if(pFormatCtx)
avformat_free_context(pFormatCtx);
avformat_close_input(&pFormatCtx);
return -1;
}
//4、找到视频流的位置
int video_stream_index = -1;
int i = 0;
for (; i < pFormatCtx->nb_streams; i++) {
if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
{