当前位置: 首页 > news >正文

ffmpeg编译

网上有很多版本的ffmpeg编译指南,大部分不可用,不是链接失效,就是不符合我的应用需求。

自己整理一份留作备份:

1、  下载编译环境MinGW+Msys,地址是:http://sourceforge.net/projects/mingwbundle/files/,在这个页面上点击Download下载那个zip文件。下载完成后,直接安装,不建议修改任何默认路径(现在的电脑,C盘空间都大的很)。

MinGW和Msys以前都是分别安装的,现在可以一次性一起安装。可以在线安装,也可以离线安装。推荐离线安装,上面这个链接是用来下载离线安装包的。

2、在http://yasm.tortall.net/Download.html上下载yasm的exe文件(需要根据自己的操作系统选择是Win32.exe还Win64.exe),下载完后重命名为yasm.exe,放到MinGW安装目录的bin目录下。

如果没有这一步操作,在后面编译ffmpeg的过程中,可能会提示找不到yasm命令。ffmpeg里面的汇编加速部分的代码需要用到它,如果禁用汇编加速,会影响编译出来的编解码库的运行效率。

3、下载ffmpeg,在http://ffmpeg.org/download.html可以找到最新的版本,我下载的是http://ffmpeg.org/releases/ffmpeg-0.8.5.tar.gz。下载完成后解压到某处待命。

4、通过桌面或开始菜单的快捷方式,进入MinGW的命令行,进入ffmpeg的解压目录。

注意:切换盘符用“cd 盘符”命令,如“cd d: ”表示切换到d盘。

5、使用configure命令配置ffmpeg的编译参数。我配置的参数如下(仅供参考):

./configure --enable-shared --enable-gpl --enable-version3 --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --enable-w32threads --disable-network --enable-memalign-hack --disable-everything --enable-decoder=h264 --enable-decoder=mpeg2video --enable-parser=h264 --enable-encoder=mpeg2video --disable-debug

通过./configure --help可以查看帮助,上面的每一个参数,都可以在帮助中找到说明;

由于我仅仅需要ffmpeg用来完成MPEG2视频的编码和解码,H.264视频的解码,因此我在上面的参数中,禁用了大量我用不着的内容。一方面加快编译的速度,另外一方面编译出来的库会比较小。

6、输入make进行编译。

7、编译完成后,输入make install进行部署。

如果没有修改过msys的安装路径,那么生成的文件会部署在“C:\msys\1.0\local”目录下。

生成的动态库在“msys目录\local\bin”目录下;

链接库文件在“msys目录\local\lib”目录下的,*.dll.a为动态库需要的链接文件,*.a为纯静态库(不依赖dll);修改扩展名为.lib就可以用了。

需要的头文件在“msys目录\local\include”目录下。







1.写在ffmpeg编译前

关于ffmpeg的编译过程google一搜,一大堆,ffmpeg编译真的有那么难么?在我编译成功后回头来看,网上的资料过多,反而使自己走了很多的弯路。即便有些楼主亲自测试后编译成功了,由于受机器的环境、ffmpeg版本、以及个人操作的影响,导致在自己编译的时候不成功。

有些帖子发表的时间已经很久了,其中提到的到的软件现在也有了很大的更新,就如我后面提到的MinGW,较新的版本直接安装就可以了,无需手动更新一些文件。我写这篇文章的时间是2011/08/30。

系统环境:

操作系统:Windows 7 家庭普通版 Service Pack 1

Ffmpeg版本:ffmpeg-0.6.3,ffmpeg-0.6

开发环境:VS2008

注:

1) win7下的用户要特别注意了,之前我在参考:http://www.chinavideo.org/viewthread.php?tid=9129&extra=page%3D1&page=1 

中的帖子编译ffmpeg-0.6.3时,能够生成lib文件,但在调用这些lib库时却出现了莫名奇妙的问题,而且在我make install时也出现了permission deny的错误。这想问题应该出在,Msys和MinGW时没有使用管理员权限安装。

2) 关于ffmpeg的版本,我在编译ffmpeg-0.6.3时,能够生成lib文件,但在编译ffmpeg-0.6时,却生成的是.dll.a和.def后缀的文件,关于这个问题,文章后面会有解决方法。

1.1 MinGW安装以及ffmpeg0.6编译lib

安装过程和相关软件的下载是参照这篇帖子:http://zhaostudy2.blog.163.com/blog/static/13535020520110179271153/

但仍有几个重要的细节需要补充下:

1) Win7下的用户在安装MinGW时,要选择“以管理员身份运行”,这样会避免在编译ffmpeg-0.6.3时,生成的lib文件不能用的问题。同样的,在运行Msys时,也要选择“以管理员身份运行”。

2) 楼主提供的在csdn上提供的ffmpeg0.6我在照他的配置后并不能生成动态库(lib),在官方网站上下载的ffmpeg0.6还是不能自动生成动态库(lib),有可能是自带MakeFile的问题。在该文章的留言中,也有用户反映了这个问题。

3) Source forge上面的那个链接页面已经更改,“Tools”文件夹已经消失,还好楼主在csdn上有备份,不得不佩服楼主的先见之明。

1.1.1 ffmpeg0.6编译后不能生成lib文件的解决步骤:

以make后的ffmpeg0.6\libavcodec目录下为例,注意到在该目录中有一个avcodec-52.def的文件,对于该文件,在VS中是可以直接将def文件转换成lib文件的!

关于如何转换,直接参考:

http://blog.163.com/zhucongdzkd@126/blog/static/1399971932010814111127686/

里面也提到关于“没有找到mspdb80.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”的解决方案。

我的命令行参数如下图所示:

生成的lib可用!问题解决!

2.最终的编译文档

为防止前面引用的文章无法访问,我再将我的编译过程整理如下:

2.1MinGW下载及安装

1) MinGW下载地址:http://download.csdn.net/source/2988856

2) MinGW安装:win7下选择“以管理员身份运行”运行exe文件,后面步骤使用默认选项安装即可

2.2下载及编译ffmpeg0.6.3动态链接库

Ffmpeg0.6.3是可以直接编译生成动态链接库及.lib文件的。

Ffmpeg0.6.3官方下载地址:http://ffmpeg.org/releases/ffmpeg-0.6.3.tar.bz2

以管理员身份运行”运行MinGW32\MSYS\msys.bat文件

执行以下3条命令,

[plain]  view plain copy
  1. <span style="font-family:'Microsoft YaHei';font-size:13px;">cd /E/ffmpeg0.6.3  
  2. ./configure --enable-shared --disable-static --enable-memalign-hack   
  3. make</span>  

漫长的等待...


make


执行完以上3条命令后在E:\ffmpeg0.6.3\libavcodec下就可以找到avcodec-52.lib和avcodec-52.dll,其他几个lib开头的文件夹下也有相应的.lib文件和.dll文件,至此,ffmpeg编译动态链接库成功完成。

2.3下载及编译ffmpeg0.6动态链接库

Ffmpeg0.6官方下载地址:http://ffmpeg.org/releases/ffmpeg-0.6.tar.bz2

前面步骤与编译ffmpeg0.6时一致,但只生成了dll文件和def文件,没有生成lib文件。

后面就要使用VS2008中提供的lib.exe工具将def文件转换成lib文件。

1) 在C:\Program Files\Microsoft Visual Studio 9.0\VC\bin下双击lib.exe文件。若弹出“没有找到mspdb80.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”

将C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\mspdb80.dll复制到C:\Program Files\Microsoft Visual Studio 9.0\VC\bin下,再次双击lib.exe文件,lib.exe就可以正常启动了。


注意:为避免今后使用VS遇到问题,在成功生成lib文件后,要将mspdb80.dll从C:\Program Files\Microsoft Visual Studio 9.0\VC\bin目录下删除。

2) 假设avcodec-52.def文件位于C:\test目录下,执行如下命令:

lib /out:c:\test\avcodec.lib /machine:IX86 /def:C:\test\avcodec-52.def

即可生成lib文件


至此,所有问题圆满解决

重要补充!!!

与我的解决方法很相似,但更加详细,还提到了无法生成.def文件时,修改config.mak文件的方法。http://blog.csdn.net/xiajia/article/details/6533182



转载于:https://www.cnblogs.com/zhiweiyouzhishenghuo/p/5005462.html

相关文章:

  • windows上安装Django
  • 故障原因:由于exchange服务器设置自动更新服务器重启后登陆owa报错http 500错误...
  • My name Hunk
  • 在VIM中添加一键编译和一键运行
  • baidumap demo(二)
  • css3中定义required,focus,valid和invalid样式
  • C#控制定位Word光标移动到任意行或者最后一行,取得光标位置等操作
  • Linux-ip配置
  • c#工厂模式与抽象工厂模式
  • 江南style之---黄山
  • Linux服务器操作系统基础篇
  • 网卡及MAC和PHY的区别
  • 终端I/O之终端标识
  • Hadoop中MapReduce获取命令行参数例子(11)
  • 得到Revit子窗体
  • 78. Subsets
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript设计模式与开发实践系列之策略模式
  • Java超时控制的实现
  • js ES6 求数组的交集,并集,还有差集
  • Linux Process Manage
  • Making An Indicator With Pure CSS
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • tensorflow学习笔记3——MNIST应用篇
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • tweak 支持第三方库
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Vue全家桶实现一个Web App
  • vue数据传递--我有特殊的实现技巧
  • 百度小程序遇到的问题
  • 浮现式设计
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 简单实现一个textarea自适应高度
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 我从编程教室毕业
  • 我的面试准备过程--容器(更新中)
  • 学习笔记:对象,原型和继承(1)
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 从如何停掉 Promise 链说起
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • (1)常见O(n^2)排序算法解析
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (JS基础)String 类型
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (十一)c52学习之旅-动态数码管
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)C#调用WebService 基础
  • (转)http协议
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)socket Aio demo