zoukankan      html  css  js  c++  java
  • 音视频技术应用(1)-使用VS2019来编译FFmpeg 环境搭建

    一. 安装并配置msys2

    这个工具主要用于模拟linux端的一些命令和指令。
    下载地址:

    msys2-x86_64-20210725_2.exe 

    链接: https://pan.baidu.com/s/1zOzoNzAt85KrccERo_9RQg 提取码: n64t 

    下载完成后双击exe进行安装,安装时间可能很长,请耐心等待安装结束。

    然后打开VS2019的命令行工具,选择:x86 Native Tools Command Prompt for VS 2019, 右击以管理员权限运行:

     注意:最好以管理员权限运行,否则后续在执行nmake install 指令时可能会发生错误,切记。

    点击打开, cd 到msys2 安装的目录, 执行 msys2_shell.cmd -mingw32, 启动msys2的32位运行环境:

      在新启动的msys2中执行 cl, 看是否能找到cl 编译器,如果提示:bash: cl: 未找到命令

    则说明msys 控制台系统中并没有共享我们本地的VS2019的运行环境,因此需要将 VS2019的运行环境添加到 msys 的控制台系统当中,目的要保证能在msys的环境中要能运行VS2019的控制台。

    打开刚才msys2的解压路径,找到:msys2_shell.cmd 文件,打开:

    找到:

    rem set MSYS2_PATH_TYPE=inherit

    将其修改为:

    set MSYS2_PATH_TYPE=inherit

    允许msys 继承外部的环境变量:

     关闭msys2的控制台窗口,然后重新在 VS2019的控制台窗口中执行:msys2_shell.cmd -mingw32

     打开msys的控制台窗口后,再次执行cl, 若遇到乱码则是因为字符编码不一致导致的,可以右击msys2的标题栏,依次选择“Options”-"Text", 分别修改Locale 和 Character set 为 “zh_CN” 和 “UTF-8”

    修改完毕后,回到msys的控制台,再次执行cl,这样就不会有乱码了:

     到此为止,我们就已经把msys的环境装好了,并且已经包含了cl的命令行工具。

     二. msys2  依赖环境安装

    这里我们主要使用pacman来安装编译依赖工具,pacman 有点类似于ubuntu下的apt, 或是centos下的yum。

    2.1 安装汇编工具

    主要是在编译x264和ffmepg时会用到,如果不安装,在config中需要禁用汇编。

    安装 nasm

    打开msys 控制台窗口,执行 pacman -S nasm , 注意 S 大写

     安装yasm

    一个汇编工具,在编译x264 和 ffmpeg 时会用到,如果不安装,则需要在config中去禁用汇编。

     安装 make cmake

    项目编译工具,必须要安装,cmake 用于生成项目文件

     安装 diffutils

    比较工具,ffmpeg configure 生成 makefile 时会用到。

      安装 pkg-config

    库配置工具,编译x264, x265 时会用到

     安装 git

    版本控制工具,从版本库下载源码时会用到

     如果下载过慢,可添加清华大学开源镜像站的源,参考链接:MSYS2 镜像使用帮助, https://mirrors.tuna.tsinghua.edu.cn/help/msys2/

    三. 安装并配置cmake
    为了保险起见,这里最好使用独立的cmake 程序来执行后面的编译。

    cmake 下载地址:

    链接: https://pan.baidu.com/s/1BjR6SY1u0eWihu2AqdpXfA 提取码: mbty 

    下载完毕后将其解压到任意目录,并在Windows的环境变量中配置cmake 的路径:

     四. 编译x264

    首先下载x264 源码:

    链接: https://pan.baidu.com/s/1R8TdXirYYqah_V_i18z_5Q 提取码: 4gpv 

    下载完毕后将其解压到 msys 的home 目录下:

    回到msys 终端,cd x264当前目录,修改编译工具为 cl ,并将其编译成动态链接库的形式 (若不指定默认则为GCC)

      使用 make -j16 命令开始编译

      等待编译结束

      编译完成后,使用 make install 命令进行安装:

      打开 usrlocallibpkgconfigx264.pc, 可以看到该文件已描述了编译完成后的x264的库文件,头文件所在路径,以及库的调用方式。

     至此x264 库编译完毕。

     五. 编译x265

    首先下载x265 源码:

    链接: https://pan.baidu.com/s/1yLAk82uDy51dXOufMJe3rA 提取码: qu8q 

    将下载完成的压缩包解压到 msys的 home 目录下:

    x265 源码给出了各个环境下的编译脚本:

    PS: 这里注意不要使用 msys2 当中的cmake, 因为msys-cl 目录下生成的make-Makefiles.sh 文件是VS调用的Makefile文件,而不是make的,并且稍候要使用nmake来进行编译。

    通过 where cmake 查看当前cmake安装路径

    如果发现 msys的 usr/bin目录下已经包含cmake, 则将其改名:

      

     修改完毕后,切换到 x265的编译目录:

     执行 ./make-Makefiles.sh 开始编译:

     等待编译结束....

     然后使用 nmake install 指令进行安装:

     可以看到编译完成的x265库被安装到了C盘的Program Files目录下,这里为了使用方便将其拷贝到 msys的 usr/local 路径当中,与之前编译的 x264库保持一致。

    找到x265库的安装路径:

     选中所有文件,将其拷贝到 msys 的 usr/local 目录下:

     由于 x265的 库文件路径已发生变化,所以需要对其路径进行更新:

    打开 x265的 pc文件,位于:usr/local/lib/pkgconfig 目录

     打开x265.pc 文件,将红框内容

     修改成:

     这样的话x265就编译完了,并且路径也配置过了。

    六. 编译fdk-aac

    用于aac格式的编码

    首先下载fdk-aac的源码:

    链接: https://pan.baidu.com/s/13pff3Jk8-UKwlahdslcvTQ 提取码: ug5c 

    下载完毕后将其解压到 msys 的 home 目录下:

    可以看到,fdk-aac的源码库已经提供了VC编译的Makefile,因此就不需要再借助msys控制台环境来编译了,直接在VS的控制台环境下编译即可,打开VS 的控制台,并且切换到fdk-aac的源码目录:

    执行:nmake -f Makefile.vc 开始编译:

    编译完毕后,执行:nmake -f Makefile.vc prefix=.install install 将编译完成的库拷贝到fdk-aac的install目录下:

    下一步我们将整个编译完成的所有文件全部拷贝到之前用于存放x264,x265的 usr/local 目录下:

    这样就添加了fdk-aac的支持,不过有一个问题就是刚才编译生成的fdk-aac 并没有像先前编译x264,x265一样生成pkgconfig:

    下面我们手动的为编译好的fdk-aac 库添加 pkgconfig:

    回到 fdk-aac的源码目录:home/fdk-aac, 

     找到 fdk-aac.pc.in 文件,将其拷贝到 刚才添加的 usr/local/lib/pkgconfig 目录下,并重命名为:fdk-aac.pc

    打开fdk-aac.pc 文件,仿照 x264.pc, 将其文件内容由:

    修改为:

    prefix=/usr/local
    exec_prefix=${prefix}
    libdir=${exec_prefix}/lib
    includedir=${prefix}/include
    
    Name: Fraunhofer FDK AAC Codec Library
    Description: AAC codec library
    Version:
    Libs: -L${libdir} -lfdk-aac
    Libs.private:
    Cflags: -I${includedir}

    这样的话我们就生成了一个fdk-aac 的pkgconfig的配置项。aac就全部编译完成了。

    七. 编译ffmpeg

    这里编译的是ffmpeg4.3 版本, ffmpeg4.3 版本下载:
    链接: https://pan.baidu.com/s/19XftM8VX8u_DioyIU7HP-Q 提取码: bzgf 

    同样,先将解压后的ffmpeg 4.3 目录拷贝到 msys 的home 目录下:

    ffmpeg 在 windows 中的编译还是需要用到 msys2, 并且ffmpeg编译要先生成Makefile, 接下来我们为编译作准备,先生成 Makefile

    生成Makefile 的代码如下:

    CC=cl.exe ./configure --prefix=./install --toolchain=msvc --enable-shared --disable-programs --disable-ffplay --disable-ffmpeg --disable-ffprobe --enable-libx264 --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libx265

    参数说明:

    参数说明:
    --prefix=./install                   指定输出的目录是在当前目录的install目录下
    --toolchain=msvc                   指定编译工具链为vs

    --enable-shared                   编译为动态链接库

    --disable-programs                不编译工具
    --disable-ffply
    --disable-ffmpeg
    --disable-ffprobe

    --enable-libx264                  支持x264
    --enable-libx265                  支持x265
    --enable-gpl                    支持h264协议,x264 x265 必备

    --enable-libfdk-aac --enable-nonfree         支持aac音频编码 aac 必须包含-enable-nonfree

    在msys的控制台窗口中切换到 ffmpeg-4.3目录下,执行上述指令尝试生成Makefile

    点回车确认后可能需要一些时间,因为ffmpeg内部有一些测试工具,如果中途出现问题,可以打开ffmpeg的源码目录,找到ffbuild目录中的config.log, 里面详细记录了失败的详细原因。

    比如我现在开始执行后,控制台就返回一条错误消息:

    提示我libfdk-aac 这个库找不到。我们打开 config.log:

    它说找不到fdk-aac/aacenc_lib.h这个头文件。但是我们打开 usr/local/include/fdk-aac 这个目录,发现是有 fdk-aac/aacenc_lib.h 这个头文件的,这是为什么呢?这是因为我们先前在usr/local/lib目录中存放的pkgconfig文件没有被找到,为了让msys能够顺利找到pkgconfig, 我们需要把pkgconfig 剪切到 msys64/mingw32/lib 目录下,因为我们启动的是mingw32的环境,所以它会到这个目录下去找。

    剪切完毕后,我们再次回到msys的控制台窗口,再次执行刚才的指令:

    这次又报了libx264没有找到,我们打开ffbuild目录下的 config.log,滑到末尾,发现是:

    找不到libx264.lib, 无法执行链接,我们打开先前编译好的libx264的 lib 目录:

    注意到没有libx264.lib 这个文件,现在的名字叫 libx264.dll.lib, 我们将 libx264.dll.lib 重命名为 libx264.lib, 再次执行刚才的指令:

    修改完毕后再次执行刚才的指令:

    这次又提示 ERROR: x265 not found using pkg-config, 我们再打开 config.log:

    这次的提示跟上次差不多,也是链接错误,找不到 x265.lib, 我们打开x265 的lib 目录:

    将libx265.lib 重命名成 x265.lib:

    再次执行刚才的指令:

    这次终于可以顺利生成Makefile了。

    接下来我们执行 make -j16  开始编译:

     编译过程可能有点长,视机器配置而定,我的电脑大约用了3分钟完成编译:

    最后我们再执行 make install , 将编译完成的文件安装到 当前目录的install 目录下。install 目录之前已经指定过了。

    等待install 结束,打开 ffmpeg 目录下的install 目录:

    出现上述的图示就说明 ffmpeg 库已经全部编译完成了。

    <完>

  • 相关阅读:
    flex布局语法
    sqlserver判断text字段是否有数据
    z-index设置后导致遮罩层显示跳动问题
    C# UpdatePanel加载完毕回调JS
    json日期字符串格式化时间
    钉钉考勤机开发需要注意的一个坑
    python bs4 + requests4 简单爬虫
    温故而知新: 关于 js Form 方式提交的一些新认知
    window 环境 Composer 安装 thinkphp5
    百度地图 绘制东莞东城地图示例
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/15496963.html
Copyright © 2011-2022 走看看