MinGw+Msys搭建环境 编译ffmpeg

MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时

 

MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC产生 Windows32 程序。

 

开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD) 操作系统而留在 Windows 的人提供一套符合 GNU 的 GNU 工作环境。

所以,使用 MinGW 我们就可以像在 Linux 下一样使用 GNU 程序开发工具。 

Minimal GNU(POSIX)system on Windows,是一个小型的GNU环境,包括基本的bash,make等等。是Windows下最优秀的GNU环境。

---------------------------------------搭建-------------------------------------------------

感谢软件业的告诉发展,可以让菜鸟们更容易地学习和搭建运行环境。

本来搭建MinGW+MSys环境是一件麻烦事,可是新版本的MinGw直接安装就可以使用。下面是WinGW的网页http://www.mingw.org/wiki/InstallationHOWTOforMinGW.在里面下载最新版本的MinGW可以直接搭建MinGW+MSys环境。

以下的小修改,为了实现ffmpeg的编译。

3)修改“msys.bat”
  用文本编辑器打开X:\msys\msys.bat,由于打算用MSVC++编译程序,所以需要有.lib文件才能链接到FFmpeg的库,这些.lib文件可以使用微软的工具链中lib命令产生。为此,机器上必须已经安装了微软的Visual Studio或是Visual C++。把下面一行加到msys.bat的最前面,把路径替换成机器上vcvars32.bat实际存在的路径,比如我的在“D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin”,于是就添加:
  call "D:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat"

 

4)系统整合
  复制X:\msys\etc\fstab.sample为X:\msys\etc\fstab,用文本编辑器打开X:\msys\etc\fstab编辑。(需要使用一个支持Unix换行风格的编辑器,比如Notepad++),把下面这行:
  X:/mingw /mingw
  改为:
  X:/msys/mingw /mingw

好了,环境搭建完毕。进入编译ffmpeg阶段。

--------------------------------------编译--------------------------------------------------

3.      编译,获取FFMPEG库(头文件,lib,和DLL)

首先通过MSys安装目录下的msys.bat启动MSys,这时会出现一个命令行窗口,它是一个运行着bash的rxvt程序,如下图:

图2

这是一个类似Linux的shell并且在Windows上运行,就像是在使用一个真正的Linux shell。不过使用这个shell时需要注意:
  →目录名使用正斜杠来分割,而不是Windows所使用的反斜杠(比如说要写成"D:/ffmpeg"而不是"D:\ffmpeg")。
  →盘符(例如"C:\")可以从根目录处访问(像这样"/C/")。
  →文件名或目录名中如果带有空格,必须用双引号括起(例如这样"/C/Program Files",带有双引号)。
  下面切换到存放FFmpeg源代码的目录(假如你的代码解压之后的路径是D:\ffmpeg),方法是输入:"cd /D/ffmpeg"。
  接下来要配置FFmpeg,选择编译时包含的库,这里先输入:
  ./configure --enable-shared --disable-static --enable-memalign-hack
  --enable-memalign-hack选项是FFmpeg在Windows上编译成功所必须指定的,待配置完成后,将回到命令提示符,看到下图所示的画面:

图3

如果没有错误的话,就可以"make"具有基本功能的FFmpeg了,在提示符后输入:make。
  编译的过程将持续很长时间。如果一切正常,结束后将返回提示符,并有如下的最后编译结束的输出画面:

最后获取编译生成的ffmpeg库(头文件,lib,dll) 

在提示符后输入:make install。 

执行完后会生成几个文件下在MSys目录的local文件夹下。目录如: 

4.      在VC下配置(这个指如何在VC中调用ffmpeg库),测试

VC环境配置:(假如目录为上图所示)

方法当然就像其他额外库一个,一种是设置VC全局的Include路径为你E:\msys\local\include,设置VC全局lib路径为E:\msys\local\bin,增加操作系统的一个Path

E:\msys\local\bin。另一种就是设置某个工程的lib和Include的路径。增加一个指向上面对应的地址。这个我就不是说的详细,想必玩VC的都知道。

 

首先 建一个VC的控制台工程,然后把E:\ffmpeg\libavcodec\api-example.c(ffmpeg的存放目录)拷贝到你建的那个工程。然后改名api-example.cpp。编译。你会发现却头文件。这个时候你需要将E:\msys\mingw\include(mingw安装目录下的include)的inttypes.h,stdint.h,_mingw.h三个文件拷到E:\msys\local\include(你ffmpeg库的目录下的include)。编译还是有很多错。

1.       需要在inttypes.h中 #define __restrict__ __restrict

2.       如果是long long 错误就改成__int64

3.       c->time_base.den= (AVRational){1,25}; 改成    c->time_base.num = 1; c->time_base.den = 25;//

4.       最上面的头文件定义如下:

#include <math.h> // 注意这个别忘了,不然会出现math模板的一个错误

#include <stdlib.h>

#include <stdio.h>

#include <string.h>     

 

extern "C"

{

      #ifdef HAVE_AV_CONFIG_H

      #undef HAVE_AV_CONFIG_H

      #endif

            

      #include <libavcodec\avcodec.h>

      #include <libavutil\mathematics.h>

 

      #pragma comment(lib, "avcodec.lib")

      #pragma comment(lib, "avutil.lib")

}

 

最后编译应该是不没有错误了。里面由于有些测试的视频文件没有,所以代码执行起来也看不出什么效果。用上面的一个代码,就是仅仅为了测试,然后告诉我们使用我们已经编译好的ffmpeg库还需要做那么的操作。

 

(以上大部分转载于该空间http://apps.hi.baidu.com/share/detail/20685063,感谢他的无私奉献)

在Windows下编译FFmpeg详细说明
2010年3月11日 由 CodeCoolie 留言 ?
【前言】

本文参考网上大量资料,经整理而成,并经实践验证,最后更新日期2010年3月11日。另外本人使用开发工具为Delphi,不会VC,所以没有编译VC相关的lib库部分。

本文搭建MinGW+MSYS环境路径分别假设为C:\MinGW和C:\MSYS,并且为纯手工安装,即下载相应的压缩包,直接解压到相应目录。

本文链接——http://www.codecoolie.com/ffmpeg/compile-ffmpeg-under-windows/

本文作者——CodeCoolie


【简介】
■FFmpeg

http://www.ffmpeg.org

FFmpeg是一套用于录制、转换和流化音频、视频的完整解决方案,其中包含一组叫做libavcodec的领先的音频、视频编码解码库。FFmpeg虽然是在Linux平台下开发的,但可以在包括Windows在内的大多数操作系统下进行编译。


■MinGW

http://www.mingw.org

在Windows下编译FFmpeg所需编译环境是MinGW,是Minimalist GNU for Windows的缩写。MinGW包含Windows平台头文件、GCC、以及一些GNU工具。


■MSYS

http://www.mingw.org/wiki/msys

MSYS是MinGW的Shell环境,是Minimal SYStem的缩写。MSYS提供了一些开发工具,如make等。


【编译环境】
■MinGW

http://sourceforge.net/projects/mingw/files/

下载如下压缩包:

GNU Binutils:binutils-2.20.1-2-mingw32-bin.tar.gz
MinGW Runtime:mingwrt-3.18-mingw32-dev.tar.gz
MinGW API for MS-Windows:w32api-3.14-mingw32-dev.tar.gz
GCC Version 4:gcc-core-4.2.1-sjlj-2.tar.gz(GCC 4.4有bug,将x264、xvid等与ffmpeg一起编译时候GCC会崩溃)

将上述压缩包按顺序解压到同一个目录下即可,例如解压到C:\MinGW

复制或重命名如下文件,其实就是去掉sjlj后缀:

从C:\MinGW\bin\gcc-sjlj.exe到gcc.exe

NOTICE:libiberty.a使用GNU Binutils包里较新的,而不是GCC Core包里的


■MSYS

http://sourceforge.net/projects/mingw/files/

下载如下压缩包:

msysCORE-1.0.11-bin.tar.gz
msysCORE-1.0.13-2-msys-1.0.13-bin.tar.lzma
make-3.81-2-msys-1.0.11-bin.tar.lzma
coreutils-5.97-2-msys-1.0.11-ext.tar.lzma(只需要pr.exe,configure ffmpeg时候用到)
vim-7.2-1-msys-1.0.11-bin.tar.lzma(不打算使用vi可以不装)

将上述压缩包按顺序解压到同一个目录下即可,例如解压到C:\MSYS


■MinGW+MSYS

编辑C:\MSYS\etc\fstab文本,指定MinGW在MSYS下的挂接目录

C:/MinGW /mingw


■yasm

编译x264时候需要

http://www.tortall.net/projects/yasm/

下载:http://www.tortall.net/projects/yasm/releases/yasm-0.8.0.tar.gz

解压,编译安装:

./configure –prefix=/mingw
make
make install


【基本库】
■zlib

http://sourceforge.net/projects/mingw/files/

下载如下压缩包:

MinGW zlib:libz-1.2.3-1-mingw32-dev.tar.gz

将其解压到C:\MinGW

删除C:\MinGW\lib\libz.dll.a(否则会使用动态链接,需要libz.dll)


■bzip2

http://sourceforge.net/projects/mingw/files/

下载如下压缩包:

MinGW bzip2:bzip2-1.0.5-2-mingw32-dev.tar.gz

将其解压到C:\MinGW

删除C:\MinGW\lib\libbz2.dll.a(否则会使用动态链接,需要libbz-2.dll)


■SDL

http://www.libsdl.org/

编译ffplay时候需要

下载:http://www.libsdl.org/release/SDL-devel-1.2.13-mingw32.tar.gz

解压,修改Makefile:CROSS_PATH := /mingw

编译安装:make cross


【FFmpeg基本编译】

源码取得:svn://svn.mplayerhq.hu/ffmpeg/trunk

配置编译:假设安装路径为/FFmpeg/Release

./configure –prefix=/FFmpeg/Release –enable-memalign-hack
make
make install


【编解码库】

假设第三方库安装路径为/olibs


■libgsm

GSM support via libgsm

GSM 06.10 lossy speech compression

http://user.cs.tu-berlin.de/~jutta/toast.html

下载gsm-1.0.12.tar.gz

解压,修改Makefile中的CC = gcc -ansi -pedantic为CC = gcc

编译安装:

make

编译到后来会出错,但库已经编译完成,用如下命令拷贝即可

cp lib/libgsm.a /olibs/lib/
cp inc/gsm.h /olibs/include/gsm/

ffmpeg编译参数:–enable-libgsm


■libmp3lame

MP3 encoding via libmp3lame

http://sourceforge.net/projects/lame/files/

下载lame-3.98.3.tar.gz

解压,修改lame-3.98-3/libmp3lame/i386/Makefile.in中下面这行

$(ECHO) “non_pic_object=’$*.o’” >>$@

$(ECHO) “non_pic_object=’ .libs/$*.o’” >>$@

编译安装:

./configure –prefix=/olibs –disable-shared –enable-static –disable-frontend
make
make install

ffmpeg编译参数:–enable-libmp3lame


■opencore-amr

AMR-NB de/encoding、AMR-WB decoding via libopencore-amrnb

http://sourceforge.net/projects/opencore-amr/

下载opencore-amr-0.1.1.tar.gz(0.1.2编译需要g++、libstdc++.dll.a)

解压,注释掉以下Makefile中的几行

./opencore-amr/amrnb/Makefile
install: libopencore-amrnb.a $(SHLIB)
install -d $(DESTDIR)$(PREFIX)/lib
install -m 644 libopencore-amrnb.a $(DESTDIR)$(PREFIX)/lib
# install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
ifneq ($(shell uname), Darwin)
# ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
# ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrnb.so
endif

./opencore-amr/amrwb/Makefile
install: libopencore-amrwb.a $(SHLIB)
install -d $(DESTDIR)$(PREFIX)/lib
install -m 644 libopencore-amrwb.a $(DESTDIR)$(PREFIX)/lib
# install $(SHLIB) $(DESTDIR)$(PREFIX)/lib
ifneq ($(shell uname), Darwin)
# ln -sf $(SHLIB) $(DESTDIR)$(PREFIX)/lib/$(SONAME)
# ln -sf $(SONAME) $(DESTDIR)$(PREFIX)/lib/libopencore-amrwb.so
endif

编译安装:

make CC=gcc
make install PREFIX=/olibs

ffmpeg编译参数:–enable-version3 –enable-libopencore-amrnb –enable-libopencore-amrwb


■libogg

供libvorbis和libtheora用

http://www.xiph.org/downloads/

下载libogg-1.1.4.tar.gz

解压,编译安装:

./configure –prefix=/olibs –disable-shared
make
make install


■libvorbis

Vorbis encoding via libvorbis

http://www.xiph.org/downloads/

下载libvorbis-1.2.3.tar.gz

解压,编译安装:

./configure –prefix=/olibs –disable-shared –with-ogg=/olibs
make
make install

ffmpeg编译参数:–enable-libvorbis


■libtheora

Theora encoding via libtheora

http://www.xiph.org/downloads/

下载libtheora-1.1.1.zip

解压,编译安装:

./configure –prefix=/olibs –disable-shared –with-ogg=/olibs
make
make install

ffmpeg编译参数:–enable-libtheora


■libx264

H.264 encoding via x264

http://www.videolan.org/developers/x264.html

ftp://ftp.videolan.org/pub/videolan/x264/snapshots/

下载最新的源码包

解压,编译安装:

./configure –prefix=/olibs
make
make install

ffmpeg编译参数:–enable-gpl –enable-libx264


■libxvid

Xvid encoding via xvidcore

http://www.xvid.org/

下载xvidcore-1.2.2.tar.gz

解压,修改:

./build/generic/configure: “libxvidcore. <- “xvidcore.

编译安装:

cd xvidcore/build/generic
./configure –prefix=/olibs –disable-shared
make
make install

删除/olibs/lib/libxvidcore.dll

ffmpeg编译参数:–enable-gpl –enable-libxvid


■libfaac、libfaad

ffmpeg内置已经支持aac编码、解码,不需要libfaac、libfaad了,而且libfaac是nonfree的,nonfree是unredistributable即禁止发布


【FFmpeg高级编译】

假设安装路径为/FFmpeg/Release,假设第三方库所在路径为/olibs

配置编译:

./configure \
–prefix=/FFmpeg/Release \
–disable-debug \
–disable-static \
–enable-shared \
–enable-gpl \
–enable-version3 \
–enable-avfilter \
–enable-avfilter-lavf \
–enable-memalign-hack \
–enable-avisynth \
–enable-libgsm \
–enable-libmp3lame \
–enable-libopencore-amrnb \
–enable-libopencore-amrwb \
–enable-libtheora \
–enable-libvorbis \
–enable-libx264 \
–enable-libxvid \
–extra-cflags=-I/olibs/include \
–extra-ldflags=-L/olibs/lib
make
make install

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis 多线程_唬人的Redis多线程,也就那么回事

不羡鸳鸯不羡仙&#xff0c;一行代码调半天。原创&#xff1a;小姐姐味道&#xff08;微信公众号ID&#xff1a;xjjdog&#xff09;&#xff0c;欢迎分享&#xff0c;转载请保留出处。周末被一位小同学憋的很窝火。 他要和我探讨一下&#xff0c;redis到底是多线程的还是单线程…

关于客户端无法获得服务器端GP服务(Geoprocessing Service)结果的解决办法

之前发布了一个绘制等值面的服务&#xff0c;在本机测试的时候始终都可以访问&#xff0c;没有任何的问题&#xff0c;但是在远程访问时&#xff0c;出现了无法获得GP服务结果(注&#xff1a;结果为图片)的问题&#xff0c;而在服务器端确实生成了正确的结果。困扰了很久之后&a…

java 过滤器 中文_JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版

JAVA中文乱码过滤器(用java过滤器解决中文乱码)V0422 整理版不用再担心java中文乱码问题&#xff0c;一步到位&#xff0c;一次性解决。更方便更快捷。web-xml配置EncodingFiltercom.epet.util.EncodingFilterencodingGBKignoretrueEncodingFilter/*用java过滤器解决中文乱码哎…

ffmpeg 新老接口问题及对照集锦

ffmpeg源码包里面有个apichangs文档&#xff0c;里面有各种接口改变的记录&#xff0c;如果你发现接口不能用了&#xff0c;可以去搜索那个文档&#xff0c;可以找到对应的新接口&#xff0c;然后到新接口对应的头文件中找到说明文字 网上很多关于ffmpeg (libav)的资料都是N年…

c++界面开发_QT开发(三)——GUI原理分析

一、命令行程序命令行程序是面向过程的程序设计。命令行程序的特点&#xff1a;A、基于顺序结构执行B、程序执行过程中不需与用户交互C、程序执行结束给出最终运行结果命令行程序适用场合&#xff1a;A、单任务场合B、无交互、简单交互场合C、服务器应用场合二、GUI程序GUI程序…

[Ubuntu] Simple way to pass passwords on a shell script

here is the code for example: #!/bin/bashecho -e "your_password\nyour_password" | sudo /home/davidhhuan/the_shell_you_want_to_run.sh转载于:https://www.cnblogs.com/davidhhuan/archive/2012/11/12/2765983.html

解决链接错误:error LNK2001: 无法解析的外部符号 __iob

该错误主要是由于静态库在VC6编译而主程序在VC2005编译&#xff0c;大家用的CRT不同。解决办法&#xff0c;代码中增加 #ifdef __cplusplus extern "C" #endif FILE _iob[3] {__iob_func()[0], __iob_func()[1], __iob_func()[2]}; 此错误的产生根源&#xff1a; 在…

pycharm使用_后端开发使用pycharm的技巧

1、使用说明首先说明&#xff0c;本文所使用的功能为pycharm专业版所支持&#xff0c;其他版本如社区版&#xff0c;教育版&#xff0c;则不一定支持。作为一名后端开发&#xff0c;我猜你的桌面上一定打开着一系列的软件&#xff0c;用作开发调试工具&#xff0c;比如navicat数…

关于javafx支持IOS、android等智能手机解决方案

这两天回到javafx社区逛了一下&#xff0c;发现对这个问题讨论很多... 看完后&#xff0c;有两种意见。 第一种&#xff1a;是主流的&#xff0c;包括javafx社区以及绝大部分oracle内部javafx开发人员的意见&#xff1a;应该要支持&#xff0c;而且想把这个事情加入roadmap&…

java视窗_java-预览窗口(如Windows 7任务栏显示已打开的...

一个极其简单的实现.import java.awt.*;import java.awt.image.*;import java.awt.event.*;import javax.swing.*;class ShowPreviews {class ToolTipListener extends MouseAdapter {JWindow toolTip;JLabel label;Component preview;ToolTipListener(Component preview) {thi…

linux(ubuntu)下分区和格式化sd卡

我的手机sd卡需要分成两个分区&#xff0c;在windowxp下面死活搞不成。主要的问题是&#xff0c;window只认识sd卡的第一个分区。有人用修改驱动程序&#xff0c;让windows把sd卡认成日立的microdisk&#xff0c;分区和格式化也可以完成。但是在我的笔记本上&#xff0c;sd读卡…

@value 静态变量_Java中的变量——通过示例学习Java编程(4)

作者&#xff1a;CHAITANYA SINGH来源&#xff1a;通过示例学习Java编程&#xff08;4&#xff09;&#xff1a;Java中的变量-方家话题​www.koofun.com变量是用来存放可以更改的值的容器。例如&#xff0c;当我写int i 10; 这里变量名是i&#xff0c;它与值10相关联&#xff…

nmf算法 python_NMF算法简介及python实现

[ pca算法用于原始数据维数较高时对数据进行降维 关于pca算法的学习&#xff0c;有一篇分析特别详细的论文http://www.cs.otago.ac.nz/cosc453/student_tutorials/principal_componen基本原理NMF&#xff0c;非负矩阵分解&#xff0c;它的目标很明确&#xff0c;就是将大矩阵分…

linux 修改消息队列大小

环境&#xff1a;red hat5 linux消息队列的配置文件为&#xff1a; /etc/sysctl.conf ,里面&#xff1a; msgmax:  一条最大消息的字节数 msgmnb&#xff1a; 一个消息队列总共最大字节数 而我的系统这2个值都默认是65536&#xff0c;假如发一条65536长度的消息&#xff0c;…

龙芯购买MIPS指令集的授权

以前指责龙芯购买MIPS授权的那篇文章让人啼笑皆非&#xff0c;只能用无知来概况我在IT从业多年&#xff0c;非常赞同龙芯购买MIPS指令集的授权&#xff01;分几个方面来阐述&#xff1a;&#xff08;1&#xff09;什么是指令集&#xff1f;指令集好像英文的26个字母&#xff0c…

python网络爬虫_Python爬虫实战之网络小说

今天和大家分享的是python爬虫实战&#xff0c;由于本人最近迷上了看网络小说&#xff0c;学生党又穷&#xff0c;只能看看网络dao版小说&#xff0c;现在这类dao版小说网站可以说非常的多&#xff0c;但是所有的网站进去都可以看见一大把的广告信息&#xff0c;非常影响我们的…

java反射机制详解_JAVA反射机制详解_JSP/Java编程_互联网开发技术网_传播最新的编程技术_php361.com...

今天&#xff0c;下午在和朋友聊天的时候&#xff0c;聊起了反射这个话题。我们就从下面这个段简单的代码开始吧。这个代码输出什么&#xff0c;想必大部分的读者跟我一样&#xff0c;会很快地知道答案&#xff1a;0 1 2 3 4 5 6 7 8 9。事实也是如此&#xff1a;朋友这个时候就…

实时修改和读取webconfig

ConfigurationManager.AppSettings.Set("MailUser","3" );ConfigurationManager.AppSettings.Set("MailPassword","2");ConfigurationManager.AppSettings.Set("MailEnable","1" ); 只能临时保存实时修改webconfi…

activity 点击后传递数据给fragment_Fragment 新特性 : Fragment Result API 使用以及源码分析

原标题: Android Fragments: Fragment Result原文地址: https://proandroiddev.com/android-fragments-fragment-result......原文作者: Husayn Hakeem今年 Google 推出了 Fragment Result API 和 Activity Results API&#xff0c;用来取代之前的 Activity 和 Fragment 之间通…

linux动态库与静态库混合连接

在应用程序需要连接外部库的情况下&#xff0c;linux默认对库的连接是使用动态库&#xff0c;在找不到动态库的情况下再选择静态库。使用方式为&#xff1a; gcc test.cpp -L. -ltestlib 如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。如果要指定…