ffmpeg的精简

    技术2024-07-04  72

    转自:http://www.chinavideo.org/viewthread.php?tid=5567&extra=page%3D1&page=2

    现在更新一下目前遇到的问题: 我想裁减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

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

    Powered by Zoundry Raven

    最新回复(0)