之前在学习FFmpeg时,都是网上零零散散的知识点拼凑起来,没有经过系统地学习,最近时间比较多,于是决定开始深入学习FFmpeg,从自己动手编译源码开始。
本文记录了在自己编译过程中踩的坑,以及完整的编译安装流程,建议先看踩过的坑里面最后一条
目录
环境准备
安装MSYS2及编译工具链
FFmpeg源码下载
x264源码下载
SDL下载
编译和安装
踩过的坑
参考文章
环境准备
- 安装并配置MYSY2
- 下载FFmpeg源码
- 下载x264源码
- 下载SDL源码(可选,在编译FFplay.exe时需要)
安装MSYS2及编译工具链
MSYS2 是 Windows 下的一组编译套件,它可以在 Windows 系统中模拟 Linux 下的编译环境,如使用 shell 运行命令、使用 pacman 安装软件包、使用 gcc (MinGW) 编译代码等。简单来说,使用 MSYS2 ,你可以通过在 Linux 下非常熟悉的各种命令,来编译 Windows 下的软件。MSYS2官网下载exe安装包,管理员权限安装,安装后会有6个shell程序
启动MSYS2 MINGW64,依次输入以下命令行开始安装mingw64编译链和基本依赖
sed -i "s#mirror.msys2.org/#mirrors.ustc.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*
pacman -Sy #提高下载速度,将下载源换成中科大的
pacman -S mingw-w64-x86_64-toolchain # mingw64编译工具链,win下的gcc,用于编译64位的库
pacman -S mingw-w64-i686-toolchain # 用于编译32位的库
pacman -S base-devel # 一些基本的编译工具
pacman -S yasm nasm # 汇编器
FFmpeg源码下载
在FFmpeg官网下载源码
三个包都可以下载
x264源码下载
去x264官网下载
SDL下载
去SDL官网下载
编译和安装
将下载好的安装好放在同一个目录(路径中不能有空格和中文),解压所有文件到当前目录,为了区分源码目录和库的安装目录,建议修改下名称(非必要)
新建编译安装脚本文件.sh,复制以下命令,其中./configure编译参数可打开对应源码目录下的configure文件查看,这里参数仅供参考,参数含义可查看FFmpeg编译参数分析 - 掘金
#!/bin/sh
#进入执行脚本所在目录
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}
#进入h264源码目录
cd ${basepath}/x264-src # 根据路径名称自行修改
pwd
#配置编译参数
./configure --prefix=${basepath}/x264-install --enable-shared
#开始16线程编译
make -j16
#将编译后的文件拷贝到--prefix参数配置目录
make install
#进入ffmpeg源码目录
cd ${basepath}/ffmpeg-5.1.2-src # 根据路径名称自行修改
pwd
#指定PKG_CONFIG_PATH变量,告知编译器x264库的路径
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${basepath}/x264-install/lib/pkgconfig
echo ${PKG_CONFIG_PATH}
#配置编译参数
./configure --prefix=${basepath}/ffmpeg-5.1.2-install \
--enable-gpl \
--enable-libx264 \
--disable-static \
--enable-shared \
--enable-sdl2 \
--enable-ffplay \
--enable-ffprobe \
--enable-ffmpeg \
--disable-vulkan \
--extra-cflags=-l${basepath}/x264-install/include \
--extra-ldflags=-L${basepath}/x264-install/lib
#开始16线程编译
make -j16
#将编译后的文件拷贝到--prefix参数配置目录
make install
打开SDL源码中的sdl2-config文件
修改其中的prefix路径,具体路径根据你文件所在位置确定,不能直接复制文件资源管理器中的路径,需要修改为以下格式
prefix=/e/shell/SDL2-2.26.3/x86_64-w64-mingw32
打开FFmpeg源码目录中的configure文件
修改SDL2_CONFIG路径,规则同上
SDL2_CONFIG="/e/shell/SDL2-2.26.3/x86_64-w64-mingw32/bin/sdl2-config"
打开MSYS2 MINGW64,进入脚本所在目录,执行脚本,等待编译安装完成,大概十分钟左右
cd /e/shell
./build-ffmpeg-5.1.2.sh
编译安装完成后就可以在install目录下看到库文件了
踩过的坑
1.源码所在目录路径中含有中文,会导致在编译FFmpeg时提示找不到x264库,如下图
2.未修改SDL源码中sdl2-config文件和FFmpeg源码configure文件中的SDL相关路径,会在编译FFmpeg时提示找不到SDL库,如下图
3.配置FFmpeg编译参数时,未添加--disable-vulkan,在编译时会报错,未知原因,暂不知道禁用这个模块会有什么影响(又给自己挖了个坑)
4.编译32位时提示无法找到c编译器,解决方法参考linux 下 编译 x264 遇到的 No working C compiler found 错误_老姚---老姚的博客-CSDN博客
5.本文用的是mingw编译器来编译FFmpeg,这样编译出来的库只能在使用mingw编译器的工程中使用,否则会出问题,我本来是打算用VS+Qt+FFmpeg库来做一个项目的,使用msvc编译器,引入上述方法编译的库之后,程序无法启动,查了下才知道mingw编译器与msvc无法兼容,而且VS还不能使用mingw编译器,只好再找找用msvc编译器编译FFmpeg的方法了,好在没花多久就找到了解决方法,看了这位大佬的文章才知道,新版本的FFmpeg自带h264编解码器,不需要额外下载h264源码自己编译,另外,如果不需要编译ffplay.exe的话,SDL源码也不需要下载了,这样编译的流程就简化了很多,且基本无坑,一遍就能通过,后面会整理下自己用msvc编译ffmpeg的过程发出来
参考文章
win10编译ffmpeg和ffplay - 简书
win10编译ffmpeg和ffplay - 简书 (jianshu.com)
FFmpeg编译参数分析 - 掘金
linux 下 编译 x264 遇到的 No working C compiler found 错误_老姚---老姚的博客-CSDN博客
解决Android NDK编译FFmpeg 4.2.2的x86 cpu版时的问题 – K-Res的Blog文章来源:https://www.toymoban.com/news/detail-640968.html
window10_ffmpeg-msys2-msvc编译_h264_mf_Loken2020的博客-CSDN博客 文章来源地址https://www.toymoban.com/news/detail-640968.html
到了这里,关于Windows下FFmpeg库编译安装指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!