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之类的字符串