在安装好的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库)的更多相关文章

  1. [转]在VS2010 VC++项目中引用Lib静态库(以Openssl为例)

    本文转自:http://kb.cnblogs.com/page/94467/ Openssl是个为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法.常用的密钥和证书封装管理功能以及SS ...

  2. 如何在 FineUIMvc 中引用第三方 JavaScript 库

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 引入第三方颜色选择器 在 FineUIMvc 中使用第三方 JavaScript 遵循一定的约定,也非常简单. 下面以官网示例为 ...

  3. 在vue2.0中引用element-ui组件库

    element-ui是由饿了么团队开发的一套基于 Vue 2.0 的桌面端组件库. 官网:http://element.eleme.io/ 安装 npm i element-ui -S 引用完整的el ...

  4. Android studio module生成jar包,module中引用的第三方库没有被引用,导致java.lang.NoClassDefFoundError错误。

    android studio 创建了一个Module生成jar包,这个module中有引用一些第三方的类库,比如 gson,volley等. 但是生成的jar包里,并没有将gson,volley等第三 ...

  5. 【解决了一个小问题】go.mod文件中引用另一个库,总会自动拉取新版本

    我的项目依赖某个旧的公共库: require ( git.xxx.com/myprj/mylib v0.0.43 ) 可以编译的时候,系统总会自动加上这样的路径: require ( git.xxx. ...

  6. OpenCV中的SVM參数优化

    SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最经常使用的是用于分类,只是SVM也能够用于回归,我的实验中就是用SVM来实现SVR(支持向量回归). 对于功能这么强的算法,opencv ...

  7. OpenCV中的SVM参数优化

    OpenCV中的SVM参数优化 svm参数优化opencv SVMSVR参数优化CvSVMopencv CvSVM        SVM(支持向量机)是机器学习算法里用得最多的一种算法.SVM最常用的 ...

  8. 【计算机视觉】关于OpenCV中GPU配置编译的相关事项

    [计算机视觉]关于OpenCV中GPU配置编译的相关事项 标签(空格分隔): [计算机视觉] 前一段发现了OpenCV中关于GPU以及opencl的相关知识,打算升级一下对OpenCV的使用,但是发现 ...

  9. 利用openssl管理证书及SSL编程第3部分:将MinGW编译的openssl dll导出def和lib供MSVC使用

    将MinGW编译的openssl dll导出def和lib供MSVC使用 前面我们用mingw把openssl 编译成了动态库,得到下面2个dll文件: libeay32.dll ssleay32.d ...

随机推荐

  1. Handler Thread 内部类引起内存泄露分析

    非静态内部类引起内存泄漏的原因 内部类的实现其实是通过编译器的语法糖(Syntactic sugar)实现的,通过生成相应的子类即以OutClassName$InteriorClassName命名的C ...

  2. Debug时检测到Loaderlock的解决办法

    昨天遇到了Loaderlock的问题. 出错信息为:检测到LoaderLock,正试图在OS加载程序锁内执行托管代码,不要尝试在DllMain或映像初始化函数内运行托管代码,这样会导致应用程序挂起. ...

  3. C++和.net的集合类对应

      Here's what I've found (ignoring the old non-generic collections): Array - C array, though the .NE ...

  4. ZOJ 3587 扩展KMP

    思路:这题确实大帝做得非常机智!字符串先求最长前缀,反的字符串再求一次最长前缀.然后就能够搞了. 每一个子串出现的次数就是最长前缀的次数嘛! #pragma comment(linker, " ...

  5. 当requestFocus不能立刻起作用时…

    不知道各位有没有遇到过这种情况: 第一次一个apk界面.然后本来想在某处requestFocus()使之获得焦点来显示的,可是直接调用却不行,如图1所看到的. 图1 焦点的位置 出现这种现象是Andr ...

  6. iPhone调用ffmpeg2.0.2解码h264视频的示例代码

    iPhone调用ffmpeg2.0.2解码h264视频的示例代码 h264demo.zip 关于怎么在MAC下编译iOS下的ffmpeg请看 编译最新ffmpeg2.0.1(ffmpeg2.0.2)到 ...

  7. JavaScript三(语法、关键保留字及变量)

    基本概念 一.区分大小写 在ECMAScript中的一切(变量.函数名.操作符)都是区分大小写的. 如变量名test和Test分别表示两个不同的变量, 二.标识符 所谓标识符,就是指变量.函数.属性的 ...

  8. JSP的页面连接和提交方式(web基础学习笔记六)

    一.GET请求新页面 1.1.超链接请求新页面 <!-- 超链接到page2 --> <a href="page2.jsp">链接到page2</a& ...

  9. easyui问题小结

    http://blog.sina.com.cn/s/blog_77cb836301017lrd.html

  10. C#时间戳转换[转发]

    http://www.cnblogs.com/qingliuyu/p/3835858.html 以下是C#下的日期与unix时间戳的相互转换: /// <summary> /// 日期转换 ...