文档章节

如何将ffmpeg在windows编译和使用

李荣刚
 李荣刚
发布于 2015/03/25 22:08
字数 1808
阅读 1014
收藏 13

FFmpeg在Windows系统下的编译过程,分四步:
如下:
1.        配置编译环境
2.        下载FFMPEG的代码
3.        编译,获取FFMPEG库(头文件,lib,和DLL
4.        在VC下配置,测试
1.        配置编译环境
1)安装MSys
下载文件:
  bash-3.1-MSYS-1.0.11-snapshot.tar.bz2
  msysCORE-1.0.11-20080826.tar.gz
解压msysCORE-1.0.11-20080826.tar.gz,比如解压到X:\msys(以下内容都使用该路径描述,X为你安装的盘符)。
   解压bash-3.1-MSYS-1.0.11-snapshot.tar.bz2,产生一个名为bash-3.1的目录,在该目录下有一个子目录名为 bin,其他的目录不需要关心。复制bin目录中的所有文件到D:\msys\bin,提示是否要覆盖sh.exe的时候,选择是。
  到“D:\msys\postinstall”目录下执行pi.bat,在出现的提示中输入n回车后(这个不搞错了),按任意键退出即可。
2)安装MinGW
  下载文件:
binutils-2.20-1-mingw32-bin.tar.gz
(binutils-2.19.1-mingw32-bin.tar.gz)
gcc-core-3.4.5-20060117-3.tar.gz
gcc-g++-3.4.5-20060117-3.tar.gz
w32api-3.13-mingw32-dev.tar.gz
   mingwrt-3.16-mingw32-dev.tar.gz
(mingwrt-3.15.2-mingw32-dev.tar.gz)
mingwrt-3.16-mingw32-dll.tar.gz
(mingwrt-3.15.2-mingw32-dll.tar.gz)
把它们全部解压到X:\msys\mingw。
3)修改“msys.bat”
   用文本编辑器打开D:\msys\msys.bat,由于打算用MSVC++编译程序,所以需要有.lib文件才能链接到FFmpeg的库,这 些.lib文件可以使用微软的工具链中lib命令产生。为此,机器上必须已经安装了微软的Visual Studio或是Visual C++。把下面一行加到msys.bat的最前面,把路径替换成机器上vcvars32.bat实际存在的路径,比如我的在“D:\program files\Microsoft Visual Studio 8\VC\bin”,于是就添加:
  call "D:\program files\Microsoft Visual Studio 8\VC\bin"
4)系统整合
  复制D:\msys\etc\fstab.sample为X:\msys\etc\fstab,用文本编辑器打开D:\msys\etc\fstab编辑。(需要使用一个支持Unix换行风格的编辑器,比如Notepad++),把下面这行:
  D:/mingw /mingw
  改为:
  D:/msys/mingw /mingw
注意:改的这个目录为mingw你所安装的目录,所以按本文来讲是这个目录。如果你安装不目录不同,就要改成你所安装的目录。
  完成以上步骤,MSys+MinGW系统就配置完成了。
2.      下载FFMPEG的代码
下载代码的办法由两个,一个就是用svn 下载下来。我觉得哪怕你知道svn是啥,也不用这个方法,因为太慢了。一个文件一个文件下,最关键SVN对应的地址是国外,都不知道什么才能全部下完。另外一个直接下一个代码的压缩包。
a)       SVN下载 地址为svn://svn.ffmpeg.org/ffmpeg/trunk
b)       直接压缩包。
首先进入 http://www.ffmpeg.org/download.html 这个是ffmpeg的官方主页。在 选项FFmpeg SVN下,点击full checkout 或者bare sources。这连个链接第一个可以通过SVN更新代码,所以文件要大点,后面那个是纯代码。或许可以直接点击该文件的这个两个链接的一个直接得到。
(我用的是bare sources的程序)
3.      编译,获取FFMPEG库(头文件,lib,和DLL)
首先通过MSys安装目录下的msys.bat启动MSys,这时会出现一个命令行窗口,它是一个运行着bash的rxvt程序,如下图:

这是一个类似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上编译成功所必须指定的,待配置完成后,将回到命令提示符,看到下图所示的画面:
如果没有错误的话,就可以"make"具有基本功能的FFmpeg了,在提示符后输入:make。
  编译的过程将持续很长时间。如果一切正常,结束后将返回提示符,并有如下的最后编译结束的输出画面:
在提示符后输入: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:\audio_video \ffmpeg\ffmpeg-0.5\libavcodec\apiexample.c(ffmpeg的存放目录)拷贝到你建的那个工程。然后改名 apiexample.cpp。编译。你会发现缺头文件。这个时候你需要将E:\msys\mingw \include(mingw安装目录下的include)的inttypes.h,stdint.h,_mingw.h三个文件拷到D:\msys \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")
}
4.1. 我的理解是在api-example.cpp头文件中加入第4条的内容,即
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#ifdef HAVE_AV_CONFIG_H
#undef HAVE_AV_CONFIG_H
#endif
#include "libavformat/avformat.h" //andrew
#include "libavcodec/avcodec.h"
#include "libavutil/mathematics.h"
其中我加了 #include "libavformat/avformat.h",如果不加就会报许多错误,意思是有学多变量没有定义。我测试了加或者不加头#include <math.h>,对编译结果没有影响。
5. api-example.cpp中似乎不支持强制类型转换,如
samples = malloc(frame_size * 2 * c->channels);其实是将(void *)型转换成(short *),于是我在malloc的前面增加了(short *)此问题得以解决。即samples = (short *)malloc(frame_size * 2 * c->channels);
6.按照网上高手的指示我在vs2005的工具->选项->VC++目录中,包含文件一栏,加入我的include文件夹,即D:\msys\local\include

 

以上,你就可以在VC++中编译ffmpeg了。但是,配置MSYS太困难,咱给你一个下载地址,是已经配置好的MSYS哦~

 

地址如下:http://msys-cn.googlecode.com/files/MSYS-Update.rar

ffmpeg的源码,直接从ffmpeg的官网上下载吧。


本文转载自:1229363.blog.163.com/blog/static/19743427201001244711137/

共有 人打赏支持
李荣刚
粉丝 2
博文 18
码字总数 1040
作品 0
海淀
程序员
私信 提问
Android使用FFmpeg(一)--编译ffmpeg

关于 Android使用FFmpeg(一)--编译ffmpeg Android使用FFmpeg(二)--Android Studio配置ffmpeg Android使用FFmpeg(三)--ffmpeg实现视频播放 Android使用FFmpeg(四)--ffmpeg实现音频播放(使用A...

天王盖地虎626
01/14
0
0
最新FFmpeg音视频核心技术精讲与实战(完整版)

第1章 课程导学与准备工作 全民娱乐时代,需要音视频等多媒体产品层出不穷,但会处理音视频数据的工程师却极度匮乏,进入音视频开发领域正当时,这门课程就是为这样的你而生。来吧!加入我们...

L272339
01/06
0
0
2018FFmpeg音视频核心技术精讲与实战(已完结)目前最新

第1章 课程导学与准备工作 全民娱乐时代,需要音视频等多媒体产品层出不穷,但会处理音视频数据的工程师却极度匮乏,进入音视频开发领域正当时,这门课程就是为这样的你而生。来吧!加入我们...

聂友华
2018/12/18
0
0
FFmpeg音视频核心技术精讲与实战(最新分享)

第1章 课程导学与准备工作 全民娱乐时代,需要音视频等多媒体产品层出不穷,但会处理音视频数据的工程师却极度匮乏,进入音视频开发领域正当时,这门课程就是为这样的你而生。来吧!加入我们...

qq_38704763
2018/12/06
0
0
最新FFmpeg音视频核心技术精讲与实战分享

第1章 课程导学与准备工作 全民娱乐时代,需要音视频等多媒体产品层出不穷,但会处理音视频数据的工程师却极度匮乏,进入音视频开发领域正当时,这门课程就是为这样的你而生。来吧!加入我们...

weixin_43746183
2018/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
46分钟前
2
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
3
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
2
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
4
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部