windows7下ffmpeg编译支持x265
一. 下载ffmpeg
之前的2.1.1版本的ffmpeg不支持x265,在http://www.ffmpeg.org/releases/下载2.3版本ffmpeg-2.3.tar.gz,解压到D:\MinGW\msys\1.0\home\Administrator\source,解压出ffmpeg-2.3文件夹。
二. mingw编译 x265
准备工作,利用tortoiseHg的Locate下载好x265文件,位于D:\MinGW\msys\1.0\home\Administrator\source\x265。
下载x265源代码
通过Tortoisehg下载x265, x265的下载地址为https://bitbucket.org/multicoreware/x265/src
TortoiseHg安装完成后,新建x265文件夹(如D:\x265),在D:\x265鼠标右键菜单TortoiseHg->clone
安装在D:\MinGW\msys\1.0\home\Administrator\source\x2651. 双击msys.bat打开mingw32
cd /d/MinGW/msys/1.0/home/Administrator/source/x265/build/msys
执行make-Makefiles.sh出现CMake
配置好vld,yasm.exe,support_winxp, 输出路径(即make install安装路径), Configure, Generate, File->exit.
mingw环境下: make
等待完成100%,
然后执行make install
x265输出路径(C:\ProgramFiles (x86)\x265)下 include && lib && bin 拷贝到D:\MinGW\msys\1.0\home\Administrator\install\对应的include&& lib && bin下面.
三. 编译ffmpeg
mingw32 下面进入/d/MinGW/msys/1.0/home/Administrator/source/ffmpeg-2.3
执行configure(增加libx265)
./configure --prefix=/home/Administrator/install--extra-cflags=-I/home/Administrator/install/include --extra-ldflags=-L/home/Administrator/install/lib --enable-gpl --enable-version3 --enable-memalign-hack --enable-nonfree--disable-static --enable-shared --disable-doc --disable-htmlpages--disable-manpages --disable-podpages --disable-txtpages --enable-bzlib--enable-zlib --enable-iconv --enable-libx264 --enable-libx265 --enable-libxavs--enable-libmp3lame --enable-libfaac --enable-libfdk-aac --enable-libvo-aacenc--enable-libvo-amrwbenc --enable-libopencore-amrnb --enable-libopencore-amrwb
配置结束
执行make
编译出错:
以libavutil/file.c为例
/**********************************************************************/
In fileincluded from libavutil/file.c:27:0:
d:\mingw\include\unistd.h:79:1:error: expected ',' or ';' before 'int'
int __mingw_sleep( unsigned long, unsignedlong );
^
In fileincluded from libavutil/file.c:27:0:
d:\mingw\include\unistd.h:105:1:error: expected ',' or ';' before 'int'
int nanosleep( const struct timespec *, structtimespec * );
^
d:\mingw\include\unistd.h:125:28:error: expected ',' or ';' before 'usleep'
int _cdecl __MINGW_NOTHROW usleep( useconds_t)__MINGW_ATTRIB_DEPRECATED;
^
d:\mingw\include\unistd.h:138:10:error: conflicting types for '_cdecl'
unsigned _cdecl __MINGW_NOTHROW sleep(unsigned );
^
d:\mingw\include\unistd.h:125:5:note: previous declaration of '_cdecl' was here
int _cdecl __MINGW_NOTHROW usleep( useconds_t)__MINGW_ATTRIB_DEPRECATED;
^
d:\mingw\include\unistd.h:138:33:error: expected ',' or ';' before 'sleep'
unsigned _cdecl __MINGW_NOTHROW sleep(unsigned );
^
d:\mingw\include\unistd.h:153:12:error: expected '=', ',', ';', 'asm' or '__attribute__' before 'ftruncate'
int _cdecl ftruncate( int, off_t );
^
make:*** [libavutil/file.o] Error 1
/**********************************************************************/
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavutil\file.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavutil\file_open.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavutil\log.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavutil\random_seed.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavutil\time.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavformat\cache.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavformat\file.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavformat\hdsenc.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavformat\id3v2.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavformat\mov.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavformat\smoothstreamingenc.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavformat\swfdec.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavformat\swfenc.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavcodec\cscd.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavcodec\dxa.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavcodec\lcldec.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavcodec\lclenc.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavcodec\pngdec.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavcodec\pngenc.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavcodec\svq3.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavcodec\tiff.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavcodec\tiffenc.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavcodec\tscc.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavcodec\zmbv.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\libavcodec\zmbvenc.c
D:\MinGW\msys\1.0\home\Administrator\source\ffmpeg-2.3\ffmpeg.c
对策:#include<unistd.h> 或 #include <zlib.h> 或 #include"swf.h" 前面添加#include<windows.h>
make install
提示avcodec-55.dll 文件已存在,应该是误报,再执行一遍make install
最终执行完毕
测试:将h264文件app.h264 转码为h265文件app.hevc
ffmpeg.exe -i /d/app.h264 -vcodec libx265 /d/app.hevc