zoukankan      html  css  js  c++  java
  • 用minGW编译ffmpeg(供替换opencv中引用的ffmpeg库)

    在安装好的opencv文件夹下找到路径:opencv245opencv3rdpartyffmpeg,此路径下有一个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:AppsMinGW64.


    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:MSYS32msys to C:MSYS64msys. Edit C:MSYS64msysetcfstab, change C:MSYS32 to C:MSYS64.
       
    4. Now you have working MSYS32 and MSYS64 environments.
       Launch, one by one, C:MSYS32msysmsys.bat and C:MSYS64msysmsys.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}msyshome<loginname> directory.


    5. To build 32-bit ffmpeg libraries, run C:MSYS32msysmsys.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>3rdpartylib\, copy the headers to <opencv>3rdpartyincludeffmpeg_.


    8. Then, go to <opencv>3rdpartyffmpeg, 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:MSYS32msys1.0homeAdministratorulid" 文件夹下搜索的,而这边生成的.a库版本号是debug版本号的。

    5、 第8步中改动msys32的路径就可以,就能够执行make.dat文件。

          或者是在命令行中,转到”opencv3rdpartyffmpeg"这个文件夹下,从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文件拷贝到 " opencv3rdpartyffmpeglib" 文件夹下。

    在执行命令时,在后加 -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:MSYS32in 文件夹下。运行5.4的原命令。

    运行到 5.8. strip -g *.a 时。出现了下面提示:


    为了解决问题,又一次下载了strip.exe文件,并覆盖到相应的文件夹下。

    又一次执行该命令,假设本机没有安装cygwin的话,会提示缺少cygwin1.dll。所以还需下载安装cygwin程序,再加入其bin地址到系统环境变量中。再又一次执行5.8命令,就OK了。


    如需转载,请注明文章出处:http://blog.csdn.net/wsbeibei


  • 相关阅读:
    (转)排序算法——归并排序与递归
    在serviceImpl里使用自身的方法
    hibernate manytoone中的lazy EAGER
    autowire异常的三个情况
    (转)js的call和apply
    mysql创建外键出错(注意数据库表字段排序)
    easyui datagrid
    ava.lang.NullPointerException的一般解决方法
    spring简单事务管理器
    关于使用注解出现BeanCreationException或者NameNotFoundException的解决方法
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/6706405.html
Copyright © 2011-2022 走看看