Skip to content

在Windows编译ffmpeg以及踩坑

没有定制过ffmpeg的不是一个好的音视频工程师(误(我也不是音视频工程师))

总而言之,今天我们来在Windows下编译ffmpeg

首先,我们需要,Visual Studio C++负载,MSYS

打开x64 Native Tools Command Prompt,在其中打开MSYS

msys2_shell.cmd -use-full-path

cd到ffmpeg源码位置,然后直接

./configure --toolchain=msvc
make -jx
make install

这样就能编译出能用的ffmpeg,但是这也仅仅算“能用”,其不包含任何的附加组件,想要使用libx264和libx265以及avs文件都是没办法的,所以得往里面enable一些库

例如在我编译的版本中,enable了avisynth库与libx264库,其中有一点坑

我使用的是msg7086所mod的x264-Yuuki版本,其中在commit c96d03中添加了一个新的非官方参数device,这个参数会导致ffmpeg的libx264.c文件编译报错,所以推荐使用这个版本

然后我们需要编译一下x264,需要以--enable-static的形式编译,还是在之前打开的MSYS窗口中,cd到x264源码的位置,编译x264

CC=cl ./configure --prefix=/usr --enable-static
make -jx
make install

这里我们选择安装在了/usr路径下(主要是方便之后用上多个库之后可以不需要额外指定位置),在/usr/lib路径下应该会有libx264.lib文件,这个就可以用来链接ffmpeg

然后需要avisynth+,这个很简单,其实只需要clone下来然后进入目录

mkdir avisynth-build && cd avisynth-build
cmake ../ -DHEADERS_ONLY:bool=on -DCMAKE_INSTALL_PREFIX=/usr -GNinja
ninja install

就可以把头文件加载进/usr/include了

然后我们要启用配置里的--enable-libx264和--enable-avisynth

./configure --toolchain=msvc --enable-gpl --enable-version3 --enable-nonfree --enable-static --enable-libx264 --enable-avisynth --extra-cflags=-I/usr/include --extra-ldflags='-LIBPATH:/usr/lib' --prefix=/usr/local/ffmpeg
make -jx
make install

坑1:网上大多数教程是基于gcc的,gcc的链接命令是-L,但是msvc的链接命令是 -LIBPATH:

坑2:你直接make应该是没办法link成功的,你需要更改libavcodec/libx264.c,去掉其中的

#if defined(_MSC_VER)
#define X264_API_IMPORTS 1
#endif

这几行,这样才能正常编译

编译完成后,可以在msys64\usr\local\ffmpeg路径中找到完整的ffmpeg文件,其余的大部分功能都可以用这种方法来加入ffmpeg中编译

Published in技术探究

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注