【标题写到VS2013/MinGW,是因为我分别用两个编译器试过了。下面会详细说到一些我编译测试过程中一些操作步骤。另外,利用MinGW可以编译出ffplay,利用VS2013不行,估计配置不对,正在研究解决方法。自行编译目前的效果是:利用VS2013编译出来的FFMPEG.exe,可以进行录制屏幕,不过效果没有官方编译的好,应该是参数问题。利用MinGW编译出来的程序,都可以交互使用,但是,我编译的时候,没有声明太多的参数,也没有下载很多第三方库,所以有很多功能是用不了的,详细的参数,要各位去看官方文档,或者直接用configure指令打印出来,配合第三方库编译的资料,请各位搜索一下雷神的博客,里面有说到。】
最近在学习大名鼎鼎的FFMPEG,想尝试一下做个屏幕录像的学习,花了3天,研究FFMPEG的录像功能简单使用,主要参考雷神的CSDN博客。雷神有两篇文章是关于桌面屏幕录制的,其一是使用命令行,直接用官方已经生成的二进制版本,另外一个就是自己动手编码调用FFMPEG的库实现了。看了看雷神屏幕录像编码实现的那一节生成的是YUV文件,编码封装需要进一步学习,然后发现用官方编译好的exe配合命令行实在方便太多了,官方的可以直接用命令行就能生成了MP4格式。所以,决心看看内部,自然就找到源码身上去了。听闻编译源码是各种打怪升级,自己也想尝试一下,就有了这下面的内容。
编译不容易,网上找到的资料,有些比较旧的,操作不一样了,我也会在下文中指出来(我的也可能不对),欢迎大家指正,共同进步。我的开发环境是Windows下的,编译的过程中,体会到了编译开源的软件不容易。出现各种传说中的问题。在Windows上面编译FFMPEG真的各种水土不服,又屙又呕,用VS2010 make 的时候报错,怎样都跳不过C99转C89的坑,参考过各种资料,按照给出的方法,还是不行,估计版本又高级了(我第一次编译,17-05-25开始编译)。最终,还是改用了VS2013(有必要说明一下,应该VS2013是可以的,但是,我自己使用的是With Update5的版本,下文也是基于VS2013 Update5的。我电脑也有VS2017,但是VS2017的文件夹架构改动过大,有条件的伙伴们可以对比一下,和VS2015以及以前的都不一样了,VS2017也是make的时候就已经失败了,提示CL.exe不行)。
直接上干货(也附带了吐槽)。需要的各种道具我统一上传到CSDN(省得大伙还要打怪升级拿道具),因为有些工具需要从一些大的压缩包提取出来,但实际上可能仅仅只用到其中一个小的DLL库,所以,我精简了,去掉了没必要的,保留真正用到的再上传。(一些工具和包分32位,64位。我的是64位的系统,但是呢,64位的工具我没用到,具体版本我在下面详细步骤也会说到。至于为什么这么做嘛。嘿嘿,那是因为我看了一下,发现某些工具的64位08年修改的,32位的11年还更改过,版本也更加新,典型的如pkg-config,另外glib也是。具体用到的版本我下面会说到,也希望其他的朋友尝试一下,都用Win64看看行不行,我就不折腾了)。另外,也放出所有的下载链接(我是从链接下载下来的然后去掉一些不必要的组件,再打包上传的,有些参考资料给出的链接已经失效了,除了CSDN的链接,我不能保证下面给的其他链接百分百有效,只能保证,目前的时间,短期内应该还有效。现在北京时间:发博客的时间)
道具:
道具内容(其中SDL里面只有i686的包,完整的包的话,请到官方下载):
地址:http://download.csdn.net/detail/qq_36113711/9857352
预备工作:
- 环境:Win10 1703专业版 64位+ vs2013 with update5
- FFMPEG的源码包:https://github.com/FFmpeg/FFmpeg(github上面估计是最新的版本,master分支的话,可以采用这个,之前编译用的就是github,这次为了确定版本,直接用下面的3.3.1)
- FFMPEG 3.3.1 源码包:https://ffmpeg.zeranoe.com/builds/(这个网站有个other download,里面有源码包下载,注意找找,页面很简单的,这次就用它,如果希望找历史版本的话,来这里:https://ffmpeg.zeranoe.com/builds/source/ffmpeg/)
- MinGW的Installer(官网的Download就是链接到sourceforge):https://sourceforge.net/projects/mingw/files/(Cygwin比较庞大,算了算了,还是MinGW)
- yasm:http://yasm.tortall.net/Download.html(下载对应的版本,记得下载对应版本,我上传的CSDN包32位64位都有,此刻和官网保持相同版本,我用Win32,这个用的时候还要改个名字,其他的原封不动转移,下面会说到)
- pkg-config:(win32)http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip(我用Win32)
(win64)http://ftp.gnome.org/pub/gnome/binaries/win64/dependencies/pkg-config_0.23-2_win64.zip - pkg-config依赖的包以及pr.exe: