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官网的编译指导也可以参考

https://ffmpeg.org/platform.html#Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows

编译 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

编译参考 https://ffmpeg.org/platform.html#Microsoft-Visual-C_002b_002b-or-Intel-C_002b_002b-Compiler-for-Windows

编译 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的一种编译方式的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg与VS2010

与 VS2017 和 FFMPEG 4 完全矛盾的未解决的外部符号 + 未使用的库

ffmpe转码添加时间水印

如何用vs08编译ffmpeg

利用VS编译libiconv库

vs2019编译ffmpeg4.4为静态库或动态库