在安装好的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. Copy List with Random Pointer leetcode java

    题目: A linked list is given such that each node contains an additional random pointer which could poi ...

  2. c# 使用 HttpWebRequest模拟登陆(附带验证码)

    在C#中,可以使用HttpWebRequest进行相关的模拟登陆,登陆后进行相关的操作,比如抓取数据,页面分析,制作相关登陆助手等等. 先说下流程 1.使用httpwebrequest先进入你要登录的 ...

  3. QlikView图表显示同比数据

    数据准备例如以下: SalesData: LOAD Num(ID) as ID, Date(Date) as Date, Month, Num(Year) as Year, Num(Sales) as ...

  4. 【理解】column must appear in the GROUP BY clause or be used in an aggregate function

    column "ms.xxx_time" must appear in the GROUP BY clause or be used in an aggregate functio ...

  5. java线上服务问题排查

    1.业务日志相关 假设系统出现异常或者业务有异常,首先想到的都是查看业务日志 查看日志工具: less 或者more grep tail -f filename 查看实时的最新内容 ps:切忌vim直 ...

  6. mysql命令的一些参数

    一mysql命令行参数 Usage: mysql [OPTIONS] [database] //命令方式 -?, --help //显示帮助信息并退出 -I, --help //显示帮助信息并退出 - ...

  7. Android运行机制

    一. Android平台各层 Android平台架构图,如下图:由上到下依次为应用程序.应用程序框架.库.Android运行时.Linux内核. 1.Linux内核: Android系统基于Linux ...

  8. wepy - Cannot read property 'Promise' of undefined

    正当我们准备试探示例时,突然.... 造成这个错误有两个原因 (wepy以前的版本默认启动了Promise,自1.4.x以后需要手动开启) 1.未下载Promise 详情见启用文档:Promise   ...

  9. locate 命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/11/12/2765750.html locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法 ...

  10. POSIX 线程详解

    一种支持内存共享的简捷工具 POSIX(可移植操作系统接口)线程是提高代码响应和性能的有力手段.在本系列中,Daniel Robbins 向您精确地展示在编程中如何使用线程.其中还涉及大量幕后细节,读 ...