音视频开发三:Windows环境下FFmpeg编译安装

简介

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证 。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec。

FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、[Mac OS X](https://baike.baidu.com/item/Mac OS X/470629?fromModule=lemma_inlink)等。

用户既可以使用命令行直接对音视频进行操作(CLI),也可以调用其开源库进行个性化的功能开发(SDK)。

如果要在自己的程序中使用 ffmpeg ,那么使用它的 SDK 是最好的选择。当前 ffmpeg 包含以下几个库:

  • libavcodec : 编/解码
  • libavfilter : 帧级操作(如添加滤镜)
  • libavformat : 文件 I/O 和 封装/解封装
  • libavdevice : 设备视频文件的封装/解封装
  • libavutil : 通用工具集合
  • libswresample : 音频重采样、格式处理、混音等
  • libpostproc : 预处理
  • libswscale : 色彩处理和缩放

FFmpeg编译

为什么要编译它呢?

​ 由于ffmpeg 目前不提供预编译的库文件,而是需要自己下载源码并编译,而且可以自定义配置和优化,比直接下载预编译的二进制的版本更加灵活。

编译安装准备

在 Windows 下,编译需要做的准备如下:

  • 安装并配置 MYSY2
  • 安装 git (可选)
  • ffmpeg 源码

安装 MSYS2 及编译工具链

MSYS2 是 Windows 下的一组编译套件,它可以在 Windows 系统中模拟 Linux 下的编译环境,如使用 shell 运行命令、使用 pacman 安装软件包、使用 gcc (MinGW) 编译代码等。简单来说,使用 MSYS2 ,你可以通过在 Linux 下非常熟悉的各种命令,来编译 Windows 下的软件。

MSYS2 的安装也非常省心,只需要到 MSYS2 官网 下载.exe安装包,管理员身份运行安装即可。

注意安装盘必须是NTFS,路径要全使用 ACSII 字符,不能有空格。建议就安装在默认位置,如果不想装在 C 盘,就直接改下盘符,装在其他盘的根目录。

安装完毕后,开始菜单里就会有下面的程序:

点击它们就会启动一个 shell 窗口,Just like on Linux ! 这个 shell 程序默认是 Mintty,类似 Linux 系统中的 bash shell

MSYS2 支持多个编译器工具链,它们的环境是独立的(可以去安装文件夹查看),

在开始菜单打开MSYS2 MSYS,使用命令pacman -Syu升级所有库

在编译安装FFmpeg之前,先安装FFmpeg编译需要的依赖和工具

pacman -S mingw-w64-x86_64-toolchain  # mingw64编译工具链,win下的gcc
pacman -S base-devel    # 一些基本的编译工具
pacman -S yasm nasm     # 汇编器
pacman -S mingw-w64-x86_64-SDL2 # SDL2 是ffmpeg依赖的,因为没有它ffpaly不能用

安装完毕后,可以输入gcc -v查看 gcc 版本:

最后需要添加环境变量。右击此电脑 -> 属性 -> 高级系统设置 -> 环境变量 -> 选择 Path (用户变量和系统变量都要)-> 编辑 -> 新建,添加编译工具链的路径:

2022-12-09-11-07-29

添加环境变量这一步,是为了以后使用其他编辑器或者IDE时,能够找到 MINGW64 的编译工具链。在 MSYS2 中编译 ffmpeg 本身是不需要添加 Windows 的环境变量的。

ffmpeg 源码下载

ffmpeg 官网 下载源码,目前最新的版本是 5.1.2 。注意不要下载成 executable files 了,那个是可以直接运行的 CLI 程序。

三个 download 都可以,只是压缩包格式不一样:

下载后解压到一个好找的文件夹即可。

在 MSYS2 的 shell 中,打开源码所在文件夹。

执行编译安装命令

我们编译安装ffmpeg选择使用mingw64终端 (如果你也是64位系统的话)。

  1. ./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-sdl2 --disable-static

    括号中的值都是可选的。

    configure说明
     --prefix=/usr/local/ffmpeg        # 安装位置
     --enable-debug                    # 启动debug调试
     --enable-sdl2					   # 引入SDL2库,ffplay编译必须;
     --enable-static                   # 编译静态库(默认开启)
     --enable-shared                   # 编译动态库(默认关闭)
     --enable-libvpx                   # VP8/VP9 视频编码器
     --enable-libvmaf                  # VMAF视频质量评估工具
     --disable-x86asm                  # 未知
     --enable-gpl                      # 允许使用GPL(默认关闭)
     --enable-nonfree                  # 允许使用非免费的代码, 产生的库和二进制程序将是不可再发行的
     --enable-libx264                  # 启用H.264编码(默认关闭)
     --enable-libfdk-aac               # 使能aac编码(默认关闭)
     --disable-optimizations           # 禁用编译器优化
     --disable-asm                     # 禁用全部汇编程序优化
     --enable-librtmp                  # 使用librtmp拉流(默认关闭)
    

    更多详细说明可查询ffmpeg ./configure参数说明

  2. 编译:make -j 4

    4 表示编译需要用4个线程。

  3. 安装 sudo make install

这一步都安装完成了,在安装目录下的bin目录执行.\ffmpeg.exe -version

设置环境变量

为了能够每次打开的时候,都能执行ffmpeg命令。在配置文件中末尾添加 export PATH=$PATH:/d/repos/ffmpeg/ffmpeg_5.2.1_install/bin这个命令。配置文件就是msys的安装位置/msys64/etc/profile.这个文件和 Linux 下的/etc/profile文件作用是类似的。

ffmpeg 集成x264

libx264 编译安装

ffmpeg 提供了相当多的外部库支持,但是如果要使用的话需要自己编译外部库。

libx264 由 VideoLAN 组织所发布,它是 H.264 的一套性能较好的软编码器实现(不包括解码器)。H.264 (AVC) 是当前较常用的视频编码,目前 H.264 的继任者 H.265 (HEVC) 也渐趋成熟, VideoLAN 也有一套实现 libx265。

  1. 进入x264官网页面下载

    官方建议使用 git 下载源码(下载压缩包再解压应该也是一样的):

    git clone https://code.videolan.org/videolan/x264.git

  2. 进入源码目录

  3. 执行以下命令进行编译和安装

    编译安装过程和ffmpeg相似。

./configure --prefix=安装路径 --enable-shared
make -j 4
make install 

– enable-shared ,同时在系统中生成共享库,方便其他程序调用。

  1. 查看libx264是否安装成功

    到x264的可执行文件目录,执行./x264.exe --version打印类似如下信息,安装成功。

编译ffmpeg库,集成libx264

  1. 检查 PKG_CONFIG_PATH 环境变量是否正确配置

    pkg-config 工具通过 PKG_CONFIG_PATH 环境变量来查找库的 pkg-config 配置文件。ibx264的pkg-config是一个用于管理库依赖的工具。它可以帮助开发者在编译和链接源代码时自动包含库文件,并提供必要的编译器和链接器选项。此外,它还可以与其他开发工具集成,例如Autotools和CMake,以实现更完整和自动化的构建过程。

    可以执行以下命令确认 PKG_CONFIG_PATH 是否包含了 libx264 的 pkg-config 配置文件路径:

    echo $PKG_CONFIG_PATH
    

    如果没有包含,你可以使用以下命令将 libx264 的 pkg-config 配置文件路径添加到 PKG_CONFIG_PATH 中:

     export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/f/software/install/ffmpeg/x264_install/lib/pkgconfig
    
  2. 编译安装ffmpeg

    ./configure --prefix=/f/software/install/ffmpeg/ffmpeg_install \
    --enable-shared --enable-sdl2 --disable-static  --enable-gpl --enable-libx264 \
    --extra-cflags=-I/f/softweg/x264_install/include \
    --extra-ldflags=-L/f/software/install/ffmpeg/x264_install/lib
    
    make -j 4
    
    make install
    

    这里使用了以下参数:

    • 加入--enable-libx264 参数
  • 加入--enable-gpl参数。否则会提示libx264 is gpl and --enable-gpl is not specified

  • –extra-cflags=“-I/f/softweg/x264_install/include”:指定 x264 的头文件路径为 /f/softweg/x264_install/include。

    • –extra-ldflags=“-L/f/software/install/ffmpeg/x264_install/lib”:指定 x264 的库文件路径为/f/software/install/ffmpeg/x264_install/lib,并链接到 libx264.so 动态库文件。

注意: 有一个坑就是 编译安装完成之后,执行ffmpeg、ffplay等命令都没有反应。或者双节ffmpeg.exe 提示 由于找不到libx264-164.dll,无法继续执行代码。重新安装程序可能会解决此问题。这是因为我们libx264和ffmpeg的安装路径不在同一个地方。需要libx264安装目录的bin文件夹下的libx264-164.dll放到ffmpeg安装路径的bin目录下。

参考

fmpeg库编译安装及入门指南(Windows篇)

猜你喜欢

转载自blog.csdn.net/qq_38056514/article/details/129827722