ffmpeg编译

转至:http://airmanisvip.blog.163.com/blog/static/18058158201210231262711/


一、据说以下命令编译只包含h264 decoder的ffmpeg
./configure --enable-static --enable-memalign-hack --disable-swscale --disable-avformat --disable-avfilter --disable-pthreads --disable-w32threads --disable-ffprobe --enable-version3 --disable-everything --enable-decoder=h264 --disable-ffmpeg --enable-parser=h264

二、转自http://blog.csdn.net/seven407/article/details/6170823

现在更新一下目前遇到的问题: 
我想裁减ffmpeg编译出来的Dll库,把avcodec.dll裁减到1MB左右就可以了,只需要用ffmpeg完成H.264的解码和对音频解码的支持. 目前搭建了MinGW+MSYS的环境来编译ffmpeg,make的版本是3.81的. 
编译过程如下: 
./configure --enable-shared --disable-static --enable-memalign-hack --disable-encoders --disable-decoders --enable-decoder=h264 
make 
make install 
但最后编译生成的 avcodec.dll 还是有3.5MB ? 请问还需要在 configure 里加哪些参数,才能达到我所要求的裁减效果呢??

--enable-small


大哥,按照你的方法来做: 
./configure --enable-shared --disable-static --enable-memalign-hack --disable-encoders --disable-decoders --enable-decoder=h264 --enable-small 
make 
make install 
但最后编译生成的 avcodec.dll 还是有2620KB ? 请问还需要在 configure 里加哪些参数,才能达到我所要的裁减(精简到1MB左右)效果呢?? 
我现在是下载的ffmpeg-0.6.1的源代码。我在网上有看到可以把 avcodec.dll裁减到700多KB,不会吧???


--disable-avdevice 
--disable-avfilter 
--disable-network 
然后再 
--disable-everything 
最后再 
--enable-decoder=需要解码的codec格式 
--enable-decoder=xxxx 
... 
--enable-demuxer=需要解码的容器格式 
--enable-demuxer=xxxx


非常感谢楼上的高手!

这一两天终于把ffmpeg裁减好了,avcodec-52.dll 744KB,可以达到我们项目预期的需求.现将整个过程及遇到的问题和解决方法一一列举出来,以供大家日后做为参考: 
1.首先下载ffmpeg-0.6.1的源代码,PC端使用VS2008 + SP1的开发环境; 
2.搭建MinGW+MSYS的ffmpeg编译环境,这个可以参考网上很多这方面的文章.有个地方稍微提下,建议大家安装最新的MinGW环 境,http://sourceforge.net/projects/mingw/files/ 到这个链接可以下载到最新版的MinGW.因为我发现如果GCC的版本太低(例如:3.4,2),编译出来的avcodec.dll在做encode编码 的时候,ffmpeg会报错,提示ffmpeg在编译的过程中使用了版本太低的GCC编译器,建议>=4.2. 
我目前MinGW+MSYS的编译环境,使用的 GCC 是4.5.0, Make版本是 3.81 
3.配置及编译ffmpeg 
./configure --disable-static --enable-shared --enable- memalign-hack --enable-small --disable-encoders --disable-decoders --enable-decoder=h264 --enable-decoder=mpeg4 --enable-decoder=mjpeg --prefix=/e/ffmpeg-sdk/ 
make;make install 
这样,在E盘的ffmpeg-sdk目录下会有include头文件及bin目录下会有对应的avcodec/avformat等等dll和lib库. 
4.用VS2008调用ffmpeg库编写应用程序(使用方法可以参考网上的相关文章),这里提一下三个问题的解决: 
第一,解决:Cannot open include file: 'inttypes.h' 
更新ffmpeg之后,有时编译应用ffmpeg库的工程会发现提示: Cannot open include file: 'inttypes.h': No such file or directory 的出错信息,可通过如下方法解决: 
1、找到include目录中的/libavutil/common.h 
2、在"#define AVUTIL_COMMON_H"之后加入如下代码,同时删除"#include <inttypes.h>" 然后保存: 
#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) 
# define CONFIG_WIN32 
#endif 
#if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(EMULATE_INTTYPES) 
# define EMULATE_INTTYPES 
#endif 
#ifndef EMULATE_INTTYPES 
# include <inttypes.h> 
#else 
typedef signed char int8_t; 
typedef signed short int16_t; 
typedef signed int int32_t; 
typedef unsigned char uint8_t; 
typedef unsigned short uint16_t; 
typedef unsigned int uint32_t; 
# ifdef CONFIG_WIN32 
typedef signed __int64 int64_t; 
typedef unsigned __int64 uint64_t; 
# else /* other OS */ 
typedef signed long long int64_t; 
typedef unsigned long long uint64_t; 
# endif /* other OS */ 
#endif /* EMULATE_INTTYPES */ 
第二,继'inttypes.h'之后的问题 'stdint.h'怎么解决? 
解决方法:经过测试,在VC++2008+SP1下可以将#include <stdint.h>注释掉,不会影响编译和连接。 
第三,是在Windows下环境使用ffmpeg库时发现报错 
error C3861: 'UINT64_C': identifier not found,怎么回事? 
解决方案: 
在/libavutil/common.h里加入定义如下: 
#ifndef INT64_C 
#define INT64_C(c) (c ## LL) 
#define UINT64_C(c) (c ## ULL) 
#endif

好了,就写这么多吧!希望大家可以互相学习,共同进步了

三、一些网站
http://ffmpeg.zeranoe.com/
http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5
windows 编译:http://www.codecoolie.com/ffmpeg/compile-ffmpeg-under-windows/


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值