ffmpeg学习笔记

来源:互联网 发布:淘宝链接怎么用微信发 编辑:程序博客网 时间:2024/05/10 21:34
       对于每个初学者,刚开始接触ffmpeg时,想必会有三个问题最为关心,即ffmpeg是什么?能干什么?怎么开始学习?本人前段时间开始接触ffmpeg,在刚开始学习过程中,这三个问题尤其最后一个问题着实困扰了我一下。现在将我对ffmpeg的一点理解分享出来,希望对正在学习ffmpeg编程的同学有帮助。
       1. ffmpeg是什么?
       (1)你可以把ffmpeg理解成一套音视频解决方案,并且还是免费、开源、跨平台的解决方案。它提供了录制、转换以及流化音视频等等功能。同时还包含了非常先进的音频/视频编解码库,这样使用ffmpeg可以对采集的原始音视频进行编码存储,或者将已有的音视频文件解码播放。这里简单提一下,ffmpeg中视频h264编码依赖x264第三方视频编码库,音频MP3编码依赖lame mp3第三方编码库。
       (2)同时,ffmpeg更是一组使用c语言开发的开源程序,与许许多多的开源程序一样,它有自己的社区、有活跃的维护者,尤其是近2年,版本更新很快,差不多每个月都有更新。打开ffmpeg源文件,看到成千上万行的c代码,在佩服作者的聪明才智同时,也不禁为自己的智商捉急。看到源文件,也就可以了解ffmpeg api的实现细节,这样就可以按照自己的需求进行修改,实现一个定制版的ffmpeg。当然,走到这一步还是需要点功夫的,从本人的学习过程来看,别说修改ffmpeg,刚开始面对ffmpeg一堆api,真是一头雾水,无从下手,后面会讲如何学习ffmpeg。
       2. ffmpeg能干什么?
       (1)你可以下载安装ffmpeg,如下图所示,然后在控制台命令行中输入ffmpeg相关命令,这样就可以实现播放歌曲、视频,甚至通过命令实现对音视频文件转换、混合、剪辑等各种复杂处理。这种ffmpeg使用情景在服务器端比较多,相信很多视频类网站都架设了基于ffmpeg的流媒体服务器,比如给服务器上保存的视频加个水印,虽然我没搞过,但相信就是一组命令的事吧。
                                          
       (2)你还可以下载ffmpeg源码,如下图所示,在windows平台、android平台等各种平台下编译ffmpeg源码,以获取不同平台下ffmpeg静态库或者动态库,供自己的程序调用,以实现基于ffmpeg的音视频编解码等程序开发。这种ffmpeg使用情景在客户端比较多,比如短视频类app应用《微视》,它的音视频编解码工作就是调用ffmpeg完成的。当然,我近期正在搞的短视频类app应用编解码也是调用ffmpeg完成的。
                                          
       3. 如何学习ffmpeg?
       在网上搜索ffmpeg的学习资源,大体可以搜出两大类,一个是ffmpeg相关命令学习资料,也就是上一节中提到的在服务器端安装ffmpeg,然后通过命令的方式调用ffmpeg完成音视频转换、转播等工作,这方面资料较多,另外由于本人没深入去研究这些命令用法,这里就不多讲了;另一个就是ffmpeg api学习资料,api学习资料要比前者偏少些。对于ffmpeg api学习,在网上查来查去,回过头会发现最好的入门学习资料其实是源码doc/examples文件下的几个程序,这几个程序都是独立的demo示例程序,分别实现了媒体文件打开、音视频混合、音视频编解码等等基础且常见的功能,通过分析这几个demo示例程序,会逐渐掌握ffmpeg的api用法,这几个demo示例程序每个文件大小不一样,推荐从体积最小的文件看起,即代码行数最少,这样也不会产生望而生畏的心态了。当然,只分析源码是远远不够的,还需要把这些demo运行起来,这样才能对ffmpeg的参数及调用逻辑有更深入的了解,后面会讲讲如何在windows环境下搭建ffmpeg开发环境。
                                          





3 0