最近一时兴起想整一下windows下面的FFmpeg编译,当然可以直接下载官方编译好的库,有个缺点就是官方的是默认的编译配置,所以如果我们想自定义配置ffmpeg的编译参数,还是得自己亲自来编译,官方提供三个版本的编译: 
- static:只有编译完成的exe程序; 
- shared:包含dll和exe; 
- dev: 包含头文件.h,lib和dll.a

先来几个参考网站,

1、官方编译网站

2、Microsoft官方实例

编译需要的原料:

1、FFmpeg源码 —————– 官方下载

2、MSYS2(编译环境) ————-MSYS2官方下载

3、YASM ————————官方下载地址

4、gas-preprocessor ————下载地址

安装msys2

msys2类似于cygwin(可以在windows上配置linux环境)和mingw(git的bash环境),安装完成之后,先需要把安装目录下的msys2_shell.cmd中注释掉的rem set MSYS2_PATH_TYPE=inherit,改成set MSYS2_PATH_TYPE=inherit,主要是将vs的环境继承给msys2;接着打开msys2的shell,安装4个编译工具,

pacman -S make gcc perl diffutils1

如果之前安装了cygwin,这里的安装可能会出现冲突问题,导致cygwin的bash窗口中没法使用一些命令,如:ls等等,一般会报错:

1 [main] ls (138392) D:\msys64\usr\bin\ls.exe: *** fatal error - cygheap base mismatch detected - 0x180305408/0x1802FE408.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version.  The most recent version *should*
reside in x:\cygwin\bin, where 'x' is the drive on which you have
installed the cygwin distribution.  Rebooting is also suggested if you
are unable to find another cygwin DLL.1234567

这时候我们需要在我的电脑中改变一下环境变量,在Path中将D:\cygwin64\bin提到D:\msys64\usr\bin前面,没有的话可以先配置

替换yasm

将下载的yasm-**-win64.exe改成yasm.exe,替换msys安装目录x:\msys64\usr\bin\yasm.exe,可以做个备份把原来的改成yasm.bak

安装gas-preprocessor

将下载的gas-preprocessor.pl放到msys2安装目录下面x:\msys64\usr\bin\gas-preprocessor.pl

从VS的命令窗口重新启动msys2的bash窗口

这一步没有把握正确,编译很容易出错,例如cl is unable to create an executable file.正确的启动步骤是:先去打开VS的工具命令提示符,C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2015\Visual Studio Tools\Windows Desktop Command Prompts,然后在命名窗口中使用命令符打开msys2的bash窗口, 
我安装在D盘,依次执行命令如下:

D:
cd msys64
msys2_shell.cmd123

在bash窗口中先检查,安装环境是否已经正确配置:

$ which cl
/d/Program Files (x86)/Microsoft Visual Studio 14.0/VC/BIN/amd64_x86/cl

$ which link
/d/Program Files (x86)/Microsoft Visual Studio 14.0/VC/BIN/amd64_x86/link

$ which yasm
/usr/bin/yasm

$ which cpp
/usr/bin/cpp

$ which gas-preprocessor.pl
/usr/bin/gas-preprocessor.pl1234567891011121314

正确配置之后就可以进行编译了。

开始编译

编译ffmpeg,有两种方式,

微软官方Demo

可以按照微软官方的Demo教程来编译,先使用git下载,

git clone git://github.com/microsoft/FFmpegInterop.git
cd FFmpegInterop
git clone git://source.ffmpeg.org/ffmpeg.git123

下载完成之后,目录结构如下:

.
├── ARM
├── BuildFFmpeg.bat
├── Debug
├── FFmpegConfig.sh
├── FFmpegInterop
├── FFmpegInterop.pfx
├── FFmpegWin10.VC.db
├── FFmpegWin10.sln
├── FFmpegWin8.1.sln
├── LICENSE
├── README.md
├── Samples
├── Tests
├── UpgradeLog.htm
├── ffmpeg
└── ipch1234567891011121314151617

直接在bash窗口中进入,执行执行编译相应版本的命令就行了

BuildFFmpeg.bat win10                     - Build for Windows 10 ARM, x64, and x86
BuildFFmpeg.bat phone8.1 ARM              - Build for Windows Phone 8.1 ARM only
BuildFFmpeg.bat win8.1 x86 x64            - Build for Windows 8.1 x86 and x64 only
BuildFFmpeg.bat phone8.1 win10 ARM        - Build for Windows 10 and Windows Phone 8.1 ARM only
BuildFFmpeg.bat win8.1 phone8.1 win10     - Build all architecture for all target platform12345

手动编译

首先步骤是./configure配置编译参数,可以参考微软Demo中的脚本FFmpegConfig.sh,先进入下载的FFmepg源码目录, 
比如编译Win10的x64版本,

./configure \
        --toolchain=msvc \
        --disable-programs \
        --disable-d3d11va \
        --disable-dxva2 \
        --arch=x86_64 \
        --enable-shared \
        --enable-cross-compile \
        --target-os=win32 \
        --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WIN32_WINNT=0x0A00" \
        --extra-ldflags="-APPCONTAINER WindowsApp.lib" \
        --prefix=./Build/Windows10/x64
        make install12345678910111213

编译完成之后,ffmpeg的编译库就在Build/Windows10/x64目录下面,目录结构如下:

.
├── bin
│   ├── avcodec-57.dll
│   ├── avcodec.lib
│   ├── avdevice-57.dll
│   ├── avdevice.lib
│   ├── avfilter-6.dll
│   ├── avfilter.lib
│   ├── avformat-57.dll
│   ├── avformat.lib
│   ├── avutil-55.dll
│   ├── avutil.lib
│   ├── swresample-2.dll
│   ├── swresample.lib
│   ├── swscale-4.dll
│   └── swscale.lib
├── include
│   ├── libavcodec
│   ├── libavdevice
│   ├── libavfilter
│   ├── libavformat
│   ├── libavutil
│   ├── libswresample
│   └── libswscale
└── lib
    ├── avcodec-57.def
    ├── avdevice-57.def
    ├── avfilter-6.def
    ├── avformat-57.def
    ├── avutil-55.def
    ├── pkgconfig
    ├── swresample-2.def
    └── swscale-4.def

11 directories, 21 files1234567891011121314151617181920212223242526272829303132333435

手动编译,这里特别注意一下编译不同版本的configure脚本,不然会出现各种编译错误: 
比如: 
make: *** [cmdutils.o] Error 2 
make: *** [/c/ffmpeg/common.mak:60: cmdutils.o] Error 2 
…….. 
还有一些其他的错误,下面列出不同版本的基本的configure脚本:

win10 32位:

./configure \
        --toolchain=msvc \
        --disable-programs \
        --disable-d3d11va \
        --disable-dxva2 \
        --arch=x86 \
        --enable-shared \
        --enable-cross-compile \
        --target-os=win32 \
        --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WIN32_WINNT=0x0A00" \
        --extra-ldflags="-APPCONTAINER WindowsApp.lib" \
        --prefix=../../../Build/Windows10/x86123456789101112

win10 64位:

./configure \
        --toolchain=msvc \
        --disable-programs \
        --disable-d3d11va \
        --disable-dxva2 \
        --arch=x86_64 \
        --enable-shared \
        --enable-cross-compile \
        --target-os=win32 \
        --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WIN32_WINNT=0x0A00" \
        --extra-ldflags="-APPCONTAINER WindowsApp.lib" \
        --prefix=../../../Build/Windows10/x64123456789101112

win10 ARM:

./configure \
        --toolchain=msvc \
        --disable-programs \
        --disable-d3d11va \
        --disable-dxva2 \
        --arch=arm \
        --as=armasm \
        --cpu=armv7 \
        --enable-thumb \
        --enable-shared \
        --enable-cross-compile \
        --target-os=win32 \
        --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_APP -D_WIN32_WINNT=0x0A00 -D__ARM_PCS_VFP" \
        --extra-ldflags="-APPCONTAINER WindowsApp.lib" \
        --prefix=../../../Build/Windows10/ARM123456789101112131415

win8.1 32位:

./configure \
        --toolchain=msvc \
        --disable-programs \
        --disable-d3d11va \
        --disable-dxva2 \
        --arch=x86 \
        --enable-shared \
        --enable-cross-compile \
        --target-os=win32 \
        --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP -D_WIN32_WINNT=0x0603" \
        --extra-ldflags="-APPCONTAINER" \
        --prefix=../../../Build/Windows8.1/x86123456789101112

win8.1 64位:

./configure \
        --toolchain=msvc \
        --disable-programs \
        --disable-d3d11va \
        --disable-dxva2 \
        --arch=x86_64 \
        --enable-shared \
        --enable-cross-compile \
        --target-os=win32 \
        --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP -D_WIN32_WINNT=0x0603" \
        --extra-ldflags="-APPCONTAINER" \
        --prefix=../../../Build/Windows8.1/x64123456789101112

win8.1 ARM:

./configure \
        --toolchain=msvc \
        --disable-programs \
        --disable-d3d11va \
        --disable-dxva2 \
        --arch=arm \
        --as=armasm \
        --cpu=armv7 \
        --enable-thumb \
        --enable-shared \
        --enable-cross-compile \
        --target-os=win32 \
        --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_PC_APP -D_WIN32_WINNT=0x0603 -D__ARM_PCS_VFP" \
        --extra-ldflags="-APPCONTAINER -MACHINE:ARM" \
        --prefix=../../../Build/Windows8.1/ARM123456789101112131415

phone 8.1 x86:

./configure \
        --toolchain=msvc \
        --disable-programs \
        --disable-d3d11va \
        --disable-dxva2 \
        --arch=x86 \
        --enable-shared \
        --enable-cross-compile \
        --target-os=win32 \
        --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP -D_WIN32_WINNT=0x0603" \
        --extra-ldflags="-APPCONTAINER -subsystem:console -opt:ref WindowsPhoneCore.lib RuntimeObject.lib PhoneAppModelHost.lib -NODEFAULTLIB:kernel32.lib -NODEFAULTLIB:ole32.lib" \
        --prefix=../../../Build/WindowsPhone8.1/x86123456789101112

phone 8.1 ARM:

./configure \
        --toolchain=msvc \
        --disable-programs \
        --disable-d3d11va \
        --disable-dxva2 \
        --arch=arm \
        --as=armasm \
        --cpu=armv7 \
        --enable-thumb \
        --enable-shared \
        --enable-cross-compile \
        --target-os=win32 \
        --extra-cflags="-MD -DWINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP -D_WIN32_WINNT=0x0603 -D__ARM_PCS_VFP" \
        --extra-ldflags="-APPCONTAINER -MACHINE:ARM -subsystem:console -opt:ref WindowsPhoneCore.lib RuntimeObject.lib PhoneAppModelHost.lib -NODEFAULTLIB:kernel32.lib -NODEFAULTLIB:ole32.lib" \
        --prefix=../../../Build/WindowsPhone8.1/ARM123456789101112131415

win7 32位:

./configure \
        --toolchain=msvc \
        --disable-programs \
        --disable-d3d11va \
        --disable-dxva2 \
        --arch=x86 \
        --enable-shared \
        --enable-cross-compile \
        --target-os=win32 \
        --extra-cflags="-MD -D_WINDLL" \
        --extra-ldflags="-APPCONTAINER:NO -MACHINE:x86" \
        --prefix=../../../Build/Windows7/x86123456789101112

win7 64位:

./configure \
        --toolchain=msvc \
        --disable-programs \
        --disable-d3d11va \
        --disable-dxva2 \
        --arch=amd64 \
        --enable-shared \
        --enable-cross-compile \
        --target-os=win32 \
        --extra-cflags="-MD -D_WINDLL" \
        --extra-ldflags="-APPCONTAINER:NO -MACHINE:x64" \
        --prefix=../../../Build/Windows7/x64123456789101112

还有会遇到下面的错误:

Could not create temporary library1

解决办法: 
清除之前编译的缓存,重新编译,

make clean
make distclean
ls -l */*.o   //检查是否有
--------------------- 
作者:斑图不巫 
来源:CSDN 
原文:https://blog.csdn.net/danjuan123/article/details/65444054 
版权声明:本文为博主原创文章,转载请附上博文链接!

Windows平台下编译FFmpeg相关推荐

  1. ffmpeg for android windows,windows10下编译ffmpeg for android

    最近实现了一款基于FFMpeg的支持多路视频的实时流媒体播放器:https://github.com/huweijian5/RtspPlayer 有兴趣能够关注下.html 本文记录在windows1 ...

  2. Windows msys2 下编译FFmpeg并实现x265依赖

    这里写自定义目录标题 引言 Msys2的安装 x265的编译 编译FFmpeg 结语 引言 为了做毕设,要使用FFmpeg与x265,由于之前没有相关方面的经验,算是一个小白,所以安装过程属实艰辛.暂 ...

  3. linux编译ffmepg,在Ubuntu下编译FFmpeg

    在之前,我们成功地使用mingw+msys在Windows平台下编译FFmpeg(见 http://www.linuxidc.com/Linux/2014-11/109839.htm),并生成了ffp ...

  4. WINDOWS 下编译 ffmpeg 源码总结

    WINDOWS 下编译 ffmpeg 源码,有两种方式:VC.GCC 1.VC 编译:   https://github.com/ShiftMediaProject/FFVS-Project-Gene ...

  5. mysql windows编译_Windows平台下编译Mysql源码 | 学步园

    最近由于项目的关系,需要使用到Mysql数据库,而我的工作任务与数据库有很大的关系,所以,决定好好学学Mysql,同时,也把Mysql的源码下载了,希望能有利于对它的学习.这里记录一下windows平 ...

  6. 在windows平台上编译SCIP

    作者:朱金灿 来源:clever101的专栏 SCIP是什么   SCIP是一个开源整数规划求解器,支持混合整数(非线性)规划和Constraint integer programming,支持语言包 ...

  7. 在Windows下编译FFmpeg详细说明

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

  8. ZLMediaKit在windows平台下的编译和运行

    ZLMediaKit是一个新出的流媒体服务器,与SRS功能基本一致,但是SRS不支持windows,ZLMediaKit是支持windows平台的. 方便在windows平台下进行学习和开发. 具体的 ...

  9. 在Windows下编译ffmpeg完全手册

    本文的内容几乎全部来自于FFmpeg on Windows,但是由于国内的网络封锁,很难访问这个域名下的内容,因此我一方面按照我自己的理解和实践做了翻译,另一方面也是为了能提供一个方便的参考方法. 注 ...

  10. 【FFMPEG系列】之windows下编译FFMPEG篇----之三(MingW64)

    目录结构 序 1 .安装mingw64 1.1 mingw64的安装 1.2 msys的安装 2.编译ffmpeg 2.1 编译 序 前文"windows下编译FFMPEG篇----之一(M ...

最新文章

  1. Multithread 之 introduction
  2. Linux下如何使用虚拟用户增加FTP的安全性
  3. IntelliJ IDEA 2017.01配置jdk和tomcat
  4. API 调用次数限制实现
  5. WannaCry警示:学会检测和减轻云端恶意内容
  6. SAP CRM Fiori note automatic delete deletion scenario
  7. python-mysql 基础知识记录
  8. 列表流和feed流_通过流而不是列表
  9. 解决 : Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile
  10. install scikit-learn
  11. 云服务器Linux安装,配置,使用nginx
  12. k上升段,对于排列问题的处理
  13. 如何设置jquery的ajax方法为同步
  14. python_类方法和静态方法
  15. 用PS为网迅安卓公司设计基于安卓平台的手机应用图标
  16. php5.6 mysql被重置_php5.6连接mysql8出现错误解决方法
  17. cms采集系统-批量文章采集支持各大CMS采集
  18. 亚马逊要验证收款查关联?
  19. 中国电信5G技术无线频率
  20. linux基因组文件,科学网-NGS基础 - 参考基因组和基因注释文件-陈同的博文

热门文章

  1. css设置自适应屏幕高度
  2. 【转】勤奋小孩的遗言:没有理由不坚持。
  3. 程序员揭秘 一些鲜为人知的编程真相
  4. android状态栏自定义,如何自定义Android状态栏颜色
  5. vuex实现及简略解析
  6. 78. Subsets 1
  7. 静态密码已经OUT 探索身份验证新方式
  8. 向窗口输入文字--TextOut和DrawText函数
  9. spring boot 配置启动后执行sql, 中文乱码
  10. 数据库(学习整理)----5--Oracle常用的组函数