【音视频开发】第二章 FFmpeg 开发环境
文章目录
- [【音视频开发】第二章 FFmpeg 开发环境](#【音视频开发】第二章 FFmpeg 开发环境)
- [一、Window 安装开发环境](#一、Window 安装开发环境)
-
- [1.FFmpeg 命令行环境搭建](#1.FFmpeg 命令行环境搭建)
- [2.Visual Studio 和 Qt 安装](#2.Visual Studio 和 Qt 安装)
- [3.CDB 调试器安装](#3.CDB 调试器安装)
- [4.Windows 编译 FFmpeg](#4.Windows 编译 FFmpeg)
- 5.编译第三方库
- [6.Qt 使用 MSVC 调用编译好的 ffmpeg 库](#6.Qt 使用 MSVC 调用编译好的 ffmpeg 库)
一、Window 安装开发环境
1.FFmpeg 命令行环境搭建
FFMPEG 官网:ffmpeg.org
下载以下文件:
源码:ffmpeg-x.x.x.tar.bz2
Shared:ffmpeg-x.x.x-winxx-shared.zip(包含 FFMPEG 的 dll 库文件)
Static:ffmpeg-x.x.x-winxx-static.zip(包含了 FFMPEG 的官方文档)
Dev:ffmpeg-x.x.x-winxx-dev.zip(包含 FFMPEG 的 lib 文件/头文件,以及 example 范例)
拷贝可执行文件到 C://Windows
- ffmpeg转码
- ffplay播放器
- ffprobe分析码流成分
拷⻉动态链接库到C:\Windows\SysWOW64
输⼊ffmpeg -version测试
- configuration表示开启/关闭了哪些配置
2.Visual Studio 和 Qt 安装
Qt 下载地址:download.qt.io/archive/online_installers
这里下载的是 Qt 的在线安装程序
选择 Qt 版本时,需要注意 Visual Studio 和 Qt 的版本是否兼容
配置 Visual Studio 环境变量
D:\Program Files\VisualStudio\VC\Tools\MSVC\14.43.34808\bin\Hostx64\x64
3.CDB 调试器安装
MSVC 编译器使用 windbg 下的 cdb 调试器,所以需要安装 windbg
https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools

4.Windows 编译 FFmpeg
安装 MSYS2
MSYS2(Minimal System 2)是一个开源的软件发行环境和软件包管理器,主要用于在 Windows 上提供类似于 Unix/Linux 的开发体验。它是基于 Cygwin、MSYS(Minimal SYStem)和 MinGW-w64 项目的改进和扩展。MSYS2 提供了一个类 Unix 环境,以及支持 Windows 原生应用程序构建的工具链。
下载地址:www.msys2.org
安装完成之后,先把安装目录下 msys2_shell.cmd 中的
rem set MYS2_PATH_TYPE=inherit
改成
set MYS2_PATH_TYPE=inherit
这是为了将 VS 的环境继承给 MSYS2
MSYS2 可以选择 msys 或者 MinGW -w64 环境来编译,不过在 msys 下使用 gcc 编译出来的 exe 和 dll 依赖 msys-2.0.dll,而 MinGW -w64 下编译出来的文件不需要依赖这个 dll,从程序的运行效率来看,不依赖这个 dll 的程序的效率更高,所以选择 MinGW -w64 来编译更佳。
修改 pacman 的源
pacman 是一个软件包管理器,用来在 MSYS2 中安装软件,但是默认的国外源,下载安装包时非常慢,所以需要修改为国内源,可以选择中科大的源

编辑 /etc/pacman.d/mirrorlist.mingw32,在文件开头添加
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
编辑 /etc/pacman.d/mirrorlist.mingw64,在文件开头添加
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
编辑 /etc/pacman.d/mirrorlist.msys,在文件开头添加
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
在 MSYS2 安装目录下输入以下命令,分别打开 64 位和 32 位的 shell
然后在 msys2 的 shell 中执行
pacman -Sy

刷新软件包数据
安装编译环境
安装 mingw-w64
打开 MSYS2 MinGW64,在 shell 窗口中输入:
pacman -S mingw-w64-x86_64-toolchain
输入回车默认全部安装
安装 git
pacman -S git
安装 make 等工具
pacman -S make
pacman -S automake
pacman -S autoconf
pacman -S perl
pacman -S libtool
pacman -S mingw-w64-i686-cmake
pacman -S pkg-config
如果需要编译出 ffplayer,还需要安装 SDL
pacman -S mingw-w64-x86_64-SDL2
重命名 link.exe
重命名 msys64/usr/bin/link.exe 为 msys64/usr.bin/link.bak,避免和 MSVC 的 link.exe 冲突
安装 YASM
pacman -S nasm
pacman -S yasm
检查编译环境
which cl link yasm cpp
看返回结果,没有 no 的结果一般就没问题
修改支持中文显示
窗口右键 -> Options -> Text,然后 locale 选择:zh_CN,Character set 选择 UTF-8
5.编译第三方库
下载和编译 x264
www.videolan.org/developers/x264.html

解压到此处
进入 x264 目录
./configure --prefix=/home/${userName}/ffmpeg/build/libx264 --host=x86_64-w64-mingw32 --enable-shared --enable-static --extra-ldflags=-Wl,--output-def=libx264.def
make
make install
生成 libx264.lib
上面编译出来的结果没有包含 lib 文件,需要自己手动生成
cp ./libx264.def /home/${username}/ffmpeg/build/libx264/lib
cd /home/${username}/ffmpeg/build/libx264/lib
lib /machine:X64 /def:libx264.def
如果想在程序中直接使用 x264,将 include 中的 .h 头文件、libx264.lib 和 libx264-165.dll 复制到项目中对应位置,并且在程序中添加头文件
下载和编译 fdk-aac
https://sourceforge.net/projects/opencore-amr/files/fdk-aac
./autogen.sh
./configure --prefix=/home/${username}/ffmpeg/build/libfdk-aac --enable-static --enable-shared
make
make install
下载和编译 mp3
https://sourceforge.net/projects/lame
./configure --prefix=/home/${username}/ffmpeg/build/libmp3lame --disable-shared --disable-frontend --enable-static
make
make install
下载和编译 libvpx
https://github.com/webmproject/libvpx
./configure --prefix=/home/${username}/ffmpeg/build/libvpx --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
make
make install
下载和编译 ffmpeg
https://gitee.com/mirrors/ffmpeg
./configure --prefix=/home/{username}/ffmpeg/build/ffmpeg --arch=x86_64 --enable-shared --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libvpx --enable-libx264 --enable-libmp3lame --extra-cflags="-I/home/{username}/ffmpeg/build/libfdk-aac/include" --extra-ldflags="-L/home/{username}/ffmpeg/build/libfdk-aac/lib" --extra-cflags="-I/home/{username}/ffmpeg/build/libvpx/include" --extra-ldflags="-L/home/{username}/ffmpeg/build/libvpx/lib" --extra-cflags="-I/home/{username}/ffmpeg/build/libx264/include" --extra-ldflags="-L/home/{username}/ffmpeg/build/libx264/lib" --extra-cflags="-I/home/{username}/ffmpeg/build/libmp3lame/include" --extra-ldflags="-L/home/${username}/ffmpeg/build/libmp3lame/lib"
make
make install
!注意 pkg-config