ffmpeg vs2017的一种编译方式
Posted itisyang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ffmpeg vs2017的一种编译方式相关的知识,希望对你有一定的参考价值。
下载 yasm
将 yasm-1.3.0-win64.exe 复制到 C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\Hostx64\\x64
重命名为 yasm.exe
安装 msys2
进入msys2的安装路径,我这里的路径是D:\\mysys64,编辑该目录下的msys2_shell.cmd文件,在setlocal后加入一行
call "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Auxiliary\\Build\\vcvars64.bat"
执行 msys2_shell.cmd
windows系统默认是gbk编码,编译过程中可能出现乱码,需要修改该窗口的text为gbk编码,右键点击窗口选择Options,再选择Text,修改编码为gbk
进入FFmpeg的源码目录进行编译
cd /f/ffmpeg-4.2.2/
这里提供一个我是用的编译选项,自己根据需要可以进行修改
./configure --enable-gpl --enable-version3 --enable-shared --toolchain=msvc --prefix=x64 \\
--enable-libsoxr \\
--enable-libx264 \\
--enable-encoder=png \\
--enable-decoder=png \\
--enable-demuxer=image2 \\
--enable-protocol=file \\
--enable-zlib \\
--enable-ffnvcodec \\
--enable-cuvid \\
--enable-nvenc \\
--enable-nvdec \\
--enable-libfdk_aac \\
--enable-nonfree \\
--enable-libfreetype \\
--enable-libfontconfig \\
--enable-libfribidi \\
--enable-decklink \\
--extra-cflags=-I/f/ffmpeg-4.2.2/decklink \\
--extra-ldflags=-LIBPATH:/f/fdk-aac-2.0.1/install/lib \\
--extra-cflags=-I/f/fdk-aac-2.0.1/install/include \\
--extra-ldflags=-LIBPATH:/d/soxr/lib \\
--extra-cflags=-I/d/soxr/include \\
--extra-ldflags=-LIBPATH:/f/Downloads/x264-master/builds/lib \\
--extra-cflags=-I/f/Downloads/x264-master/builds/include \\
--extra-ldflags=-LIBPATH:/f/libpng/lpng1637/projects/vstudio/Release \\
--extra-ldflags=-LIBPATH:/f/libpng/zlib/contrib/vstudio/vc14/x64/ZlibStatRelease \\
--extra-cflags=-I/f/libpng/zlib \\
--extra-cflags=-I/f/freetype_2.10.4/include \\
--extra-ldflags=-LIBPATH:/f/freetype_2.10.4 \\
--extra-cflags=-I/f/libfontconfig_2.13.0_msvc15/include \\
--extra-ldflags=-LIBPATH:/f/libfontconfig_2.13.0_msvc15/lib/x64 \\
--extra-cflags=-I/f/libfribidi_v1.0.10_msvc15/include \\
--extra-ldflags=-LIBPATH:/f/libfribidi_v1.0.10_msvc15/lib/x64
make -j4
make install
错误处理
查看 ffbuild/config.log 错误信息,进行对应更改
cl.exe is unable to create an executable file.
cl.exe: command not found
C compiler test failed.
export PATH=$PATH:/c/'Program Files (x86)'/'Microsoft Visual Studio'/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx64/x64
cmp: command not found
pacman -S diffutils
pkg-config not found
pacman -S pkg-config
make: 未找到命令
pacman -S make
常量中有换行符
全局搜索CC_IDENT,删除中文字符
checking for a Python interpreter with version >= 3... none
configure: error: no suitable Python interpreter found
export PATH=$PATH:/d/Python/Python37
msys pacman换源
http://www.blogdaren.com/post-2589.html
ERROR: cuvid requested, but not all dependencies are satisfied: ffnvcodec
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
make
将Makefile 中 PREFIX = /usr/local 改为 PREFIX = /usr
make install
其他问题及第三方库编译
github上一个编译ffmpeg的仓库可以作为参考,一些第三方库里面已经编译好,可以直接使用
https://github.com/ShiftMediaProject/FFmpeg/tree/master/SMP
ffmpeg官网的编译指导也可以参考
编译 x264
下载源码:x264, the best H.264/AVC encoder - VideoLAN
pacman -S mingw-w64-x86_64-gcc
安装nasm https://github.com/ShiftMediaProject/VSNASM/releases/latest
./configure --prefix=./build --enable-win32thread --enable-shared --enable-static --enable-strip --extra-ldflags=-Wl,--output-def=libx264.def
make
libx264.dll.a 修改为 libx264.lib
编译 zlib
使用pacman -S zlib/zlib-dev 安装的版本与ffmepg不兼容,需要自己编译或安装
先卸载已安装的版本,否则优先使用的还是mingw目录下的版本
pacman -R zlib-devel
pacman -R zlib
编译 fdk-aac
fdk-aac其实提供了在windows下的一个编译脚本Makefile.vc,使用msvc nmake去编译即可
在vs2017提供命令工具中直接进入fdk-aac的源码目录,使用如下命令进行编译
nmake -f Makefile.vc prefix=install install
FFmpeg与VS2010
编译FFmpeg是一件痛苦的事情,一般都直接使用Zeranoe FFmpeg Builds。
如果使用这个版本,需要注意ffmpeg的帮助里的一段话:
To create import libraries that work with the /OPT:REF option (which is enabled by default in Release mode), follow these steps:
Open the Visual Studio Command Prompt.
Alternatively, in a normal command line prompt, call ‘vcvars32.bat’ which sets up the environment variables for the Visual C++ tools (the standard location for this file is something like ‘C:\\Program Files (x86_\\Microsoft Visual Studio 10.0\\VC\\bin\\vcvars32.bat’).
Enter the ‘bin’ directory where the created LIB and DLL files are stored.
Generate new import libraries with lib.exe:
lib /machine:i386 /def:..\\lib\\foo-version.def /out:foo.lib
Replace foo-version and foo with the respective library names.
即根据dll重新生成lib文件。
否则Relesae下就会出问题。
这是VS2010的一个bug,据说VS2012后已经修复。
以上是关于ffmpeg vs2017的一种编译方式的主要内容,如果未能解决你的问题,请参考以下文章