写在前面
本文将介绍的如何用FFMPEG API做视频解码。
视频解码,是将压缩后的视频(压缩格式如H264)通过对应解码算法还原为YUV视频流的过程;在计算机看来,首先输入一段01串(压缩的视频),然后进行大量的浮点运算,最后再输出更长的一段01串(还原的非压缩视频)。计算机内部可以进行浮点数计算的部件是CPU,目前市场上涌现了一批GPU和类GPU芯片,如Nvidia、海思芯片甚至Intel自家的核显。利用前者进行解码一般称为“软解码”,后者被称为“硬解码”,如果没有特殊指定,FFMPEG是用CPU进行解码的,即软解。
本文将介绍的是软解,也就是FFMPEG最通用的做法。
如果对视频基础懵懂的同学,建议先阅读本文的前序文章:
本文将介绍以下内容:
FFMPEG3.3以上的新版API介绍;
FFMPEG解码的通用流程以及每个步骤涉及的API详解,这一部分比较硬核,会涉及代码和api底层的解释;
FFMPEG解码的其他注意点。
I. FFMPEG API变化
了解一门语言/工具最好的办法就是阅读他的API文档/开发者手册,然而,计算机领域大多数语言/技术的官方文档都是英文,对国内初学者而言,以此入门,不推荐。笔者推荐的学习路线是:简单的入门博客 -> 专业人士的相关博客(比如业内的雷神的博客) -> 官方文档 -> 参与相关开源项目,大致如此,不必较真。程序员圈内严(gang)谨(jing)人士是真多,所以在一些点上必须陈述清楚。
网上关于FFMPEG入门的资料特别多,但是笔者发现许多博客已经比较陈旧了,新版本(指FFMPEG3.3及以上的版本)的API有较大的变化,本文出现的代码使用的都是新的API。
FFMPEG官方GIT上罗列了API的变化,读者可以看APIchanges;FFMPEG的官方开发者手册见Developer Documentation。不过,在实际开发中,就算真的在新版本上用了旧的API,编译和运行时也不会有问题,只不过在编译时会提示“is deprecated”类似warnning提示。
笔者在后续出现的代码中会注释写明某个API是新版本的,还是沿袭了旧版本的。
II. FFMPEG解码套路
“自古深情留不住,唯有套路得人心”,和很多工具一样,FFMPEG解码也是有套路的,这里先搬出业内大人物雷神(雷霄骅,可以从知乎的帖子-如何看待雷霄骅之死?-知道雷神在流媒体技术上做出的贡献之大,叹息缅怀)当年的解码流程图:
FFMPEG解码流程(雷神版)
上图出自其CSDN博客:

本文介绍了使用FFMPEG API进行视频解码的详细步骤,涵盖从连接和打开视频流到解码过程中的关键函数,包括avformat_open_input、avformat_find_stream_info、avcodec_find_decoder、avcodec_open2等。讨论了FFMPEG API的变化,并强调了在新版本中的一些注意事项,如资源释放和解码后的帧转码、输出、缓冲区刷新等。适合对音视频处理和FFMPEG有一定了解的读者参考。
最低0.47元/天 解锁文章
4211

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



