【音视频开发】第二章 FFmpeg 开发环境

【音视频开发】第二章 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/

Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/

编辑 /etc/pacman.d/mirrorlist.mingw64,在文件开头添加

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/

Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/

编辑 /etc/pacman.d/mirrorlist.msys,在文件开头添加

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/

Server = http://mirrors.ustc.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

6.Qt 使用 MSVC 调用编译好的 ffmpeg 库

相关推荐
给大佬递杯卡布奇诺3 小时前
FFmpeg 基本API avcodec_alloc_context3函数内部调用流程分析
c++·ffmpeg·音视频
给大佬递杯卡布奇诺5 小时前
FFmpeg 基本API avio_open函数内部调用流程分析
c++·ffmpeg·音视频
Damon小智7 小时前
RedPlayer 视频播放器在 HarmonyOS 应用中的实践
音视频·harmonyos·鸿蒙·小红书·三方库·redplayer
云雾J视界9 小时前
Linux企业级解决方案架构:字节跳动短视频推荐系统全链路实践
linux·云原生·架构·kubernetes·音视频·glusterfs·elk stack
Likeadust11 小时前
新版视频直播点播平台EasyDSS用视频破局,获客转化双提升
大数据·音视频
涛涛讲AI1 天前
一段音频多段字幕,让音频能够流畅自然对应字幕 AI生成视频,扣子生成剪映视频草稿
人工智能·音视频·语音识别
lzptouch1 天前
数据预处理(音频/图像/视频/文字)及多模态统一大模型输入方案
人工智能·音视频
casdfxx1 天前
捡到h3开发板,做了个视频小车(二),御游追风plus做遥控器
音视频
给大佬递杯卡布奇诺1 天前
FFmpeg 基本API avcodec_send_packet函数内部调用流程分析
c++·ffmpeg·音视频
酌量1 天前
从 ROS 订阅视频话题到本地可视化与 RTMP 推流全流程实战
经验分享·笔记·ffmpeg·音视频·ros