FFmpeg编译很辛苦,刚开始学习FFmpeg没必要自己编译FFmpeg,它的官网有编译好的FFmpeg下载,直接下载使用就行。等待FFmpeg学有所成后,需要修改FFmpeg的时候再编译。
下载FFmpeg官网编译好的库,请参考第5节。
这里介绍的是手动编译FFmpeg。
另外可以看看 Shift Media Project,提供了一键下载依赖并编译的方法。查看我写的另外一篇文章:FFmpeg - Windows下使用ShiftMediaProject方法编译FFmpeg
下载地址: MSYS2
(1) 使用默认安装目录安装,安装在目录 c:\msys64
;
(2) 安装完成后,打开MSYS,执行下面两步更新数据:
pacman -Syu
pacman -Su
(3)安装其他工具包:
pacman -S make cmake diffutils pkg-config nasm yasm git
找到MSYS2 MSYS这个应用,打开,会出现一个终端:
MSYS2终端
,创建一个resources
目录,在这个目录下使用git下载:
(1)修改msys2_shell.cmd文件
(2)右键使用管理员身份打开适用于VS 2017的x64本机工具
(英文:x64 Native Tools Command Prompt for VS 2017)”
打开 适用于VS 2017的x64本机工具
的终端后,进入msys64
的安装目录,执行
msys2_shell.cmd -mingw64
这样会打开一个新的 MSYS2 的终端:
MSYS2终端
中,进入x264
的下载目录,编译(编译成动态库):(指令中的 -j4 可以根据自己电脑性能改成自己电脑最大线程 比如: -j16 等)
cd ~/resources/x264/
CC=cl ./configure --enable-shared
make -j4
make install
首先查询cmake
路径:
whereis cmake
需要修改 x265_git\build\msys-cl\make-Makefiles-64bit.sh
文件两处地方:
(1)把原文件中的 amd64
改为 x64
,如果不改,则编译的时候报: 64 bit target not set, please launch ‘visual studio command prompt’ and run ‘…\vcvarsall.bat amd64 | x86_amd64 | amd64_x86’ 的错误;
(2)把 cmake
改为全路径,这个路径是通过上面的whereis cmake
指令查到的,比如我这里是这样的:
"/c/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cmake.exe" -G "NMake Makefiles" -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4" ../../source
如果不改的话, 会报 CMake Error: Could not create named generator NMake Makefiles 的错误
编译:
cd ~/resources/x265_git/build/msys-cl/
./make-Makefiles-64bit.sh
nmake install
编译安装完后,安装到了这个目录:
把这个目录下的bin
、include
、lib
下的文件分别拷贝到 /usr/local/bin
、/usr/local/include
、/usr/local/lib
目录下
然后把 /usr/local/lib/pkgconfig/x265.pc
文件中的第一行修改为:prefix=/usr/local
fdk-aac
的编译是在Windows
下使用cmake
编译的。
很多网上的老的编译教程中fdk-aac的源码目录中有个Makefile.vc
的文件,但是新的版本没有了。下面使用Windows下CMake的编译方法:
首先,下载Windows版本的 CMake安装(下载地址:Download CMake)
安装完后, 打开 cmake-gui
点击Configure
之后,选择你安装的Visual Studio
版本,选择x64
或者win32
(我要编译64位的,就选择x64)
configure
完成后,会出现下面这些配置项,更改 CMAKE_INSTALL_PREFIX
为 msys64安装目录下的 /usr/local
,然后再次点击 Configure
, 之后点击 Generate
之后在build
目录会生成 fdk-aac.sln
,使用Visual studio
打开 fdk-aac.sln
编译完后, 选择 INSTALL
编译
完成后, 可以看到编译后的文件都自动生成在了指定的目录:
修改fdk-aac.pc
文件,把prefix
改为 /usr/local
如果需要编译ffplay
,则需要下载SDL2
,并配置。
下载地址:https://www.libsdl.org/download-2.0.php
下载VC
版本
下载解压后,我放到了C盘:
按照以下操作配置:
(1)配置sdl2对msvc可见
在MSYS2控制台执行(注意目录得使用Windows格式 C://…而非 /c/…):
export INCLUDE=$INCLUDE";sdl2头文件目录"
export LIB=$LIB";sdl2库文件目录"
例如,我这里这样填的:
export INCLUDE=$INCLUDE";C:\SDL2-2.0.22\include"
export LIB=$LIB";C:\SDL2-2.0.22\lib\x64"
(2)配置sdl2对pkg-config可见
在 /mingw64/lib/pkgconfig
(在MSYS终端
使用指令 echo $PKG_CONFIG_PATH
查询到的目录) 新建一个名为 sdl2.pc
的文件,编写规则为:
prefix=你的sdl2所在目录(目录格式/c/...而非C://...)
libdir=${prefix}/lib/x64 这里注意你用的是x64还是x86
includedir=${prefix}/include
Name: sdl2
Description: sdl2
Version: 2.0.22 你下载的版本
Libs: -L${libdir} -lsdl2
例如:
编译之前,修改两个lib文件名
将 /usr/local/lib
目录下的 pkgconfig
文件夹 拷贝到 /mingw64/lib
目录下 (如果是32位的,拷贝到 mingw32/lib 目录)
在MSYS2终端中执行:
CC=cl.exe ./configure --prefix=./install --toolchain=msvc --arch=x64 --enable-shared --enable-sdl2 --enable-gpl --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-nonfree
参数说明:
参数 | 说明 |
---|---|
–prefix=./install | 指定输出的目录是在当前目录的install目录下 |
–toolchain=msvc | 指定编译工具链为vs |
–arch=x64 | 编译64位,不加这项则编译32位 |
–enable-shared | 编译为动态链接库 |
–enable-sdl2 | 如果要编译ffplay则需要sdl2 |
–enable-libx264 | 支持x264 |
–enable-libx265 | 支持x265 |
–enable-gpl | 支持h264协议,x264 x265 必备 |
–enable-libfdk-aac | 支持aac音频编码 |
–enable-nonfree | aac 必须包含-enable-nonfree |
然后执行: (指令中的 -j4 可以根据自己电脑性能改成自己电脑最大线程 比如: -j16 等)
make -j4
make install
执行比较慢,执行完成后,生成下列文件,FFmpeg就编译完成了 :
注意:
如果拷贝给其他人使用,需要把 x264
、x265
、fdk-aac
、sdl2
这些库一起拷贝
例如:
编译FFmepg时可能会报这样的错误:
fftools/ffprobe.c(3047): error C2001: 常量中有换行符
我就把这一行ffprobe.c的3047行打印字符给注释了,两处代码:
//av_log(NULL, level, "%sbuilt with %s\n", indent, CC_IDENT);
//print_str("compiler_ident", CC_IDENT);
FFmpeg官网有已经编译好的库文件: Download FFmpeg
Gyan.dev和BtbN都提供了FFmpeg的预编译版本。
Gyan.dev通常使用MSVC编译器,而BtbN使用MinGW编译器。因此,Gyan.dev的版本可能会更符合Windows标准,而BtbN的版本可能会更加开放和跨平台。
这里以 Gyan.dev的版本为例:
essential
就是简版,只包含ffmpeg.exe、ffplay.exe、ffprobe.exefull版
也是只包含ffmpeg.exe、ffplay.exe、ffprobe.exe,但是比essential版本包含的功能更多full-shared版
不仅包含ffmpeg.exe、ffplay.exe、ffprobe.exe,还包含开发所需要的dll和lib,这使得开发者可以使用FFmpeg的功能实现自己的应用程序或集成FFmpeg到自己的项目中。接下来在打开命令终端 执行: ffmpeg -version
Windows10 使用MSYS2和VS2019编译FFmpeg源代码-测试通过
VS2019+Msys2 编译ffmpeg
音视频技术应用(1)-使用VS2019来编译FFmpeg 环境搭建
Windows + MSVC环境编译ffmpeg