之前在学习FFmpeg时,都是网上零零散散的知识点拼凑起来,没有经过系统地学习,最近时间比较多,于是决定开始深入学习FFmpeg,从自己动手编译源码开始。
本文记录了在自己编译过程中踩的坑,以及完整的编译安装流程,建议先看踩过的坑里面最后一条
目录
环境准备
安装MSYS2及编译工具链
FFmpeg源码下载
x264源码下载
SDL下载
编译和安装
踩过的坑
参考文章
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官网下载源码
三个包都可以下载
去x264官网下载
去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
1.源码所在目录路径中含有中文,会导致在编译FFmpeg时提示找不到x264库,如下图
2.未修改SDL源码中sdl2-config文件和FFmpeg源码configure文件中的SDL相关路径,会在编译FFmpeg时提示找不到SDL库,如下图
3.配置FFmpeg编译参数时,未添加--disable-vulkan,在编译时会报错,未知原因,暂不知道禁用这个模块会有什么影响(又给自己挖了个坑)
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
window10_ffmpeg-msys2-msvc编译_h264_mf_Loken2020的博客-CSDN博客