Windows下FFmpeg库编译安装指南

        之前在学习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

window10_ffmpeg-msys2-msvc编译_h264_mf_Loken2020的博客-CSDN博客 

猜你喜欢

转载自blog.csdn.net/qq_36751491/article/details/129128533