用minGW编译ffmpeg(供替换opencv中引用的ffmpeg库)
在安装好的opencv文件夹下找到路径:opencv245\opencv\3rdparty\ffmpeg,此路径下有一个readme.txt文件,内容例如以下所看到的:
The build script is to be fixed.
Right now it assumes that 32-bit MinGW is in the system path and
64-bit mingw is installed to c:\Apps\MinGW64.
It is important that gcc is used, not g++!
Otherwise the produced DLL will likely be dependent on libgcc_s_dw2-1.dll or similar DLL.
While we want to make the DLLs with minimum dependencies: Win32 libraries + msvcrt.dll.
ffopencv.c is really a C++ source, hence -x c++ is used.
How to update opencv_ffmpeg.dll and opencv_ffmpeg_64.dll when a new version of FFMPEG is release?
1. Install 32-bit MinGW + MSYS from
   http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/
   Let's assume, it's installed in C:\MSYS32.
2. Install 64-bit MinGW. http://mingw-w64.sourceforge.net/
   Let's assume, it's installed in C:\MSYS64
3. Copy C:\MSYS32\msys to C:\MSYS64\msys. Edit C:\MSYS64\msys\etc\fstab, change C:\MSYS32 to C:\MSYS64.
   
4. Now you have working MSYS32 and MSYS64 environments.
   Launch, one by one, C:\MSYS32\msys\msys.bat and C:\MSYS64\msys\msys.bat to create your home directories.
4. Download ffmpeg-x.y.z.tar.gz (where x.y.z denotes the actual ffmpeg version).
   Copy it to C:\MSYS{32|64}\msys\home\<loginname> directory.
5. To build 32-bit ffmpeg libraries, run C:\MSYS32\msys\msys.bat and type the following commands:
   5.1. tar -xzf ffmpeg-x.y.z.tar.gz
   5.2. mkdir build
   5.3. cd build
   5.4. ../ffmpeg-x.y.z/configure --enable-w32threads
   5.5. make
   5.6. make install
   5.7. cd /local/lib
   5.8. strip -g *.a
6. Then repeat the same for 64-bit case. The output libs: libavcodec.a etc. need to be renamed to libavcodec64.a etc.
7. Then, copy all those libs to <opencv>\3rdparty\lib\, copy the headers to <opencv>\3rdparty\include\ffmpeg_.
8. Then, go to <opencv>\3rdparty\ffmpeg, edit make.bat
   (change paths to the actual paths to your msys32 and msys64 distributions) and then run make.bat
在使用minGW32编译ffmpeg过程中。遇到了下面几个问题:
1、 在输入命令5.4后,出现了提示”yasm is old ...",提示输入“--disable-yasm”
事实上是又一次输入../ffmpeg-x.y.z/configure --enable-w32threads --disable-yasm。
2、 5.5和5.6的运行过程较长,请耐心等待。
3、 5.7 strip -g *.a 的意思是跳过debug编译,编译生成release版本号。
4、 第7步中的编译好的lib和头文件,事实上是存放在 local 文件夹下(存放release版本号)。
開始没注意到。我一个个搜索,复制粘贴过去的,这些是我从"C:\MSYS32\msys\1.0\home\Administrator\bulid" 文件夹下搜索的,而这边生成的.a库版本号是debug版本号的。
5、 第8步中改动msys32的路径就可以,就能够执行make.dat文件。
或者是在命令行中,转到”opencv\3rdparty\ffmpeg"这个文件夹下,从gcc处開始” gcc -Wall -shared -o opencv_ffmpeg.dll -O2 -x c++ -I../include -I../include/ffmpeg_ -I../../modules/highgui/src ffopencv.c -L../lib -lavformat -lavcodec -lavdevice -lswscale -lavutil -lwsock32“ 输入以上语句。执行后会出现
” libiconv“的相关错误提示;
解决方法:在C:\MSYS32 文件夹下找到libiconv.a文件拷贝到 " opencv\3rdparty\ffmpeg\lib" 文件夹下。
在执行命令时,在后加 -liconv 执行就可以生成文件 opencv_ffmpeg.dll。
6、 ffmpeg-x.y.z.tar.gz的下载地址为:http://www.ffmpeg.org/download.html,在该页面中选择最新版本号的Download
 gzip tarball 这一项下载。
7、在命令行中书写路径中,不能用"\", 而用"/"。
8、加yasm编译:
在1的处理过程中,没有使用yasm这样的汇编器。这使得在使用编译生成的opencv_ffmpeg.dll时。文件编解码的速度较慢。网上查到说,假设不用yasm编译的话。速度的确是会变慢的。所以第二次尝试使用yasm编码。
处理方法:首先下载yasm的win32版本号的文件,将文件名称改为yasm.exe。放入C:\MSYS32\bin 文件夹下。运行5.4的原命令。
运行到 5.8. strip -g *.a 时。出现了下面提示:
为了解决问题,又一次下载了strip.exe文件,并覆盖到相应的文件夹下。
又一次执行该命令,假设本机没有安装cygwin的话,会提示缺少cygwin1.dll。所以还需下载安装cygwin程序,再加入其bin地址到系统环境变量中。再又一次执行5.8命令,就OK了。
如需转载,请注明文章出处:http://blog.csdn.net/wsbeibei
用minGW编译ffmpeg(供替换opencv中引用的ffmpeg库)的更多相关文章
- [转]在VS2010 VC++项目中引用Lib静态库(以Openssl为例)
		
本文转自:http://kb.cnblogs.com/page/94467/ Openssl是个为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法.常用的密钥和证书封装管理功能以及SS ...
 - 如何在 FineUIMvc 中引用第三方 JavaScript 库
		
声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 引入第三方颜色选择器 在 FineUIMvc 中使用第三方 JavaScript 遵循一定的约定,也非常简单. 下面以官网示例为 ...
 - 在vue2.0中引用element-ui组件库
		
element-ui是由饿了么团队开发的一套基于 Vue 2.0 的桌面端组件库. 官网:http://element.eleme.io/ 安装 npm i element-ui -S 引用完整的el ...
 - Android studio module生成jar包,module中引用的第三方库没有被引用,导致java.lang.NoClassDefFoundError错误。
		
android studio 创建了一个Module生成jar包,这个module中有引用一些第三方的类库,比如 gson,volley等. 但是生成的jar包里,并没有将gson,volley等第三 ...
 - 【解决了一个小问题】go.mod文件中引用另一个库,总会自动拉取新版本
		
我的项目依赖某个旧的公共库: require ( git.xxx.com/myprj/mylib v0.0.43 ) 可以编译的时候,系统总会自动加上这样的路径: require ( git.xxx. ...
 - OpenCV中的SVM參数优化
		
SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最经常使用的是用于分类,只是SVM也能够用于回归,我的实验中就是用SVM来实现SVR(支持向量回归). 对于功能这么强的算法,opencv ...
 - OpenCV中的SVM参数优化
		
OpenCV中的SVM参数优化 svm参数优化opencv SVMSVR参数优化CvSVMopencv CvSVM SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最常用的 ...
 - 【计算机视觉】关于OpenCV中GPU配置编译的相关事项
		
[计算机视觉]关于OpenCV中GPU配置编译的相关事项 标签(空格分隔): [计算机视觉] 前一段发现了OpenCV中关于GPU以及opencl的相关知识,打算升级一下对OpenCV的使用,但是发现 ...
 - 利用openssl管理证书及SSL编程第3部分:将MinGW编译的openssl dll导出def和lib供MSVC使用
		
将MinGW编译的openssl dll导出def和lib供MSVC使用 前面我们用mingw把openssl 编译成了动态库,得到下面2个dll文件: libeay32.dll ssleay32.d ...
 
随机推荐
- 4 Sum leetcode java
			
题目: Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = ...
 - java根据经纬度获取地址
			
public class GetLocation { public static void main(String[] args) { // lat 39.97646 //log 116.3039 S ...
 - android 上传图片
			
public static String uploadPicture(String url, String uploadFile) { String resultcode = "1& ...
 - MybatisGen1.0 Mybatis JavaBean Mapper生成工具
			
MybatisGen 一:主要技术 1:apache commons dbutils 2:freemarker模板引擎 3:java(1.5+) 二:使用说明 1:配置文件是src/config.pr ...
 - 【Nodejs】cheerio简单示例
			
cheerio的API挺多,我也了解有限,欲知详情请参考 “通读cheerio API”. 下面就事论事聊聊它的基本使用. 比如说在某网页中有这么一段HTML: </tbody> < ...
 - 你需要来自system的权限才能对此文件夹进行更
			
删除Adobe安装文件时,报错没有权限. 两种解决方案: 1. 设置权限 Win7的安全性提高的同时,对不懂的人来说觉得有些麻烦. 2. PE系统删除 进入PE系统删除即可.
 - linux查询文件中某几行
			
查询文件中某几行: sudo cat /etc/tinyproxy.conf | head -n | tail -n + [一]从第3000行开始,显示1000行.即显示3000~3999行 cat ...
 - 关于Haxe3新特性“内联构造方法”的解释
			
学习过C/C++的童鞋们应该了解inline即内联机制的意义,Haxe语言也很好的支持内联机制,让开发者可以自己在空间效率和时间效率上进行取舍. 从Haxe3开始,构造方法也可以使用inline关键字 ...
 - Swift高速入门之函数
			
函数 看一个函数的样例: func addNumbers( let a:Int,let b:Int)->Int{ return a+b; } 实现两个数相加.函数必须以func开头,后面是函数名 ...
 - H5实现的手机摇一摇
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...