windows编译/调试ffmpeg vs2013编译/调试ffmpeg win7 64位

来源:互联网 发布:淘宝qs工业生产许可证 编辑:程序博客网 时间:2024/05/18 20:47

1,下载MinGW,下载到C:/MinGW下,进入Installer目录选择mingw-get-setup.exe在线安装即可

http://sourceforge.net/projects/mingw/files/Installer/


2,如果C:\MinGW\msys\1.0\bin下没有yasm.exe,就从下面下载并命名为yasm.exe扔进去。

http://yasm.tortall.net/releases/Release1.2.0.html


3,下载x264,当前最新版本是x264-snapshot-20141009-2245

http://www.videolan.org/developers/x264.html

解压出来,用mingw进入源代码目录

执行:

./configure --prefix=/x264 --enable-shared --enable-static

make

make install

这时候在C:\MinGW\msys\1.0下面会出现一个x264文件夹,里面就是所需要的库了

把x264下的所有文件覆盖到C:\MinGW下


4,下载faac源码"faac-1.28.tar.bz2",faac的补丁"faac-1.28.diff"

http://www.audiocoding.com/downloads.html

http://www.linuxfromscratch.org/blfs/view/svn/multimedia/faac.html

执行:

patch -p1 < faac-1.28.diff

./bootstrap

./configure LDFLAGS="-LC:/MingW/Lib" LIBS="-lWS2_32" --prefix=/faac --with-mp4v2 --enable-shared --enable-static

make
make install

这时候在C:\MinGW\msys\1.0下面会出现一个faac文件夹,里面就是所需要的库了

把faac下的所有文件覆盖到C:\MinGW下


5,下载ffmpeg,当前最新版本是ffmpeg-2.4.2

http://ffmpeg.org/download.html

解压出来,用mingw进入源代码目录

执行:

./configure --enable-yasm --prefix=/ffmpeg --disable-debug --disable-static --enable-shared --enable-gpl --enable-libx264 --enable-libfaac --enable-nonfree

make

make install

这时候在C:\MinGW\msys\1.0下面会出现一个ffmpeg文件夹,里面就是所需要的库和exe了。

这里说的用mingw进入源代码目录的意思是用C:\MinGW\msys\1.0\msys.bat来启动命令行。


在ubuntu编译找不到x264提示,在configure加入下面这句

--extra-cflags=-I/usr/local/include--extra-ldflags=-L/usr/local/lib


6,打开vs2013,添加文件如下

cmdutils.c

cmdutils_opencl.c

ffmpeg.c

ffmpeg_filter.c

ffmpeg_opt.c

cmdutils.h

cmdutils_common_opts.h

config.h

ffmpeg.h


先开始编译,看看有哪些错误。


剩下就是排错了,

把inline去掉

把缺少的.h都添加到相应目录里

把snprintf修改为_snprintf


config.h中

CONFIG_NETWORK 0


ffmpeg.c 上面添加

#pragma comment(lib,"../lib/avutil.lib")  
#pragma comment(lib,"../lib/avdevice.lib")  
#pragma comment(lib,"../lib/avcodec.lib")  
#pragma comment(lib,"../lib/avformat.lib")  
#pragma comment(lib,"../lib/avfilter.lib") 
#pragma comment(lib,"../lib/swscale.lib") 
#pragma comment(lib, "../lib/swresample.lib")
#pragma comment(lib, "../lib/postproc.lib")
#pragma comment(lib,"Psapi.lib")


屏蔽 

#if HAVE_UNISTD_H
//#include <unistd.h>
#endif


屏蔽 cmdutils.c里的函数实现

static void print_all_libs_info(int flags, int level)
{
/*
    PRINT_LIB_INFO(avutil,   AVUTIL,   flags, level);
    PRINT_LIB_INFO(avcodec,  AVCODEC,  flags, level);
    PRINT_LIB_INFO(avformat, AVFORMAT, flags, level);
    PRINT_LIB_INFO(avdevice, AVDEVICE, flags, level);
    PRINT_LIB_INFO(avfilter, AVFILTER, flags, level);
    PRINT_LIB_INFO(avresample, AVRESAMPLE, flags, level);
    PRINT_LIB_INFO(swscale,  SWSCALE,  flags, level);
    PRINT_LIB_INFO(swresample,SWRESAMPLE,  flags, level);
    PRINT_LIB_INFO(postproc, POSTPROC, flags, level);*/
}


这样应该就差不多了,能生成出来ffmpeg.exe


执行命令验证一下


ffmpeg.exe -f image2 -i C:/ffmpeg_vs2013/Debug/image%d.jpg test.mp4

文件有image1.jpg image2.jpg...image6.jpg

执行正常

如果写批处理%d修改为%%d

如果用vs命令参数最好不要用%02d之类的格式,直接用%d,否则总是成为/xd之类的字符串

0 0
原创粉丝点击