Windows环境 源码编译 FFmpeg

devtools/2024/10/4 20:19:03/

记录一下windows环境纯代码编译ffmeg的过程!

目录

一、安装MSYS2

1.下载安装

2.配置

3.修改源

4.测试与更新

二、安装其他必要工具

1.安装MinGW-w64

2.安装git

3..安装make等工具

4.编译前的其他准备工作

①.重命名link.exe

②.下载和安装YASM

③.安装Visual Studio

④.检查

5.下载和编译 x264

6.下载和编译 fdk-aac

7.下载和编译 mp3

8.下载和编译 libvpx

ffmpeg-toc" style="margin-left:0px;">三、下载和编译 ffmpeg

1.下载

2.编译

3.测试

4.添加其他必要的dll库

四、QT使用msvc64位编译器测试


一、安装MSYS2

1.下载安装

https://www.msys2.org/

注意

使用国外浏览器下载速度可能会很慢,例如谷歌浏览器,微软浏览器等;

推荐使用国内浏览器下载,例如搜狗浏览器等,速度会稍微快一些!!!

下载完成后直接双击安装即可!!

2.配置

进入自己的安装路径,打开 msys2_shell.cmd 文件

打开文件后,搜索 MSYS2_PATH_TYPE ,找到如下图这一行内容,删掉前面的rem即可。

3.修改源

进入路径 etc\pacman.d,打开如下三个文件

①.在mirrorlist.mingw32文件的最上方加入如下源

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

②.在mirrorlist.mingw64文件的最上方加入如下源

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

③.在mirrorlist.msys文件的最上方加入如下源

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

4.测试与更新

打开命令提示符窗口,进入msys2自己的安装路径

#如果想要打开64的窗口
msys2_shell.cmd -mingw64#如果想要打开32的窗口
msys2_shell.cmd -mingw32#如果想要打开msys2的msys的窗口
msys2_shell.cmd

因为本教程使用的是64位,所以在输入命令 msys2_shell.cmd -mingw64 打开的窗口中,输入如下命令进行更新:

pacman -Sy

二、安装其他必要工具

1.安装MinGW-w64

更新完毕后,继续输入命令:

pacman -S mingw-w64-x86_64-toolchain

安装MinGW-w64编译工具。

默认安装全部即可,输入命令后按下回车,会出现安装选项,再次按下回车即可,然后输入Y进行安装,最后等待安装完成即可。

2.安装git

安装完成后,继续输入命令:

pacman -S git

3..安装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
pacman -S mingw-w64-x86_64-SDL2

4.编译前的其他准备工作

①.重命名link.exe

继续在msys窗口输入命令进入路径 D:\msys64\usr\bin (相应找到自己的安装路径)

cd D:
cd /usr/bin/
mv link.exe link.bak

如果窗口已被关闭可以通过如下命令重新打开:

# cmd 进入命题提示符窗口输入如下命令进入msys2窗口
D:
cd D:\msys64
msys2_shell.cmd -mingw64

②.下载和安装YASM

pacman -S nasm
pacman -S yasm

③.安装Visual Studio

自行网上下载安装,我这里是安装了vs2017的;

注意,安装时,需要选择安装msvc64位的编译器!!!

安装成功后,添加环境变量

④.检查

重启电脑!!!

可以输入命令 which cl link yasm cpp 检查 cl link yasm cpp 编译工具是否正常;

注意,如果有出现 which: no cpp in ... 那么就说明没有找到cpp,cpp没有装好;

which: no cl in ... 那么就说明vs环境变量没有配置好导致的。(配置好后需要电脑重启才会生效)

5.下载和编译 x264

进入自己的home路径,新建ffmpeg文件夹

然后输入命令下载x264。可能需要你输入账号密码,自己去GitHub注册即可。

git clone http://git.videolan.org/git/x264.gitcd x264

然后进入下载好的x264文件夹执行如下命令进行编译:(注意替换自己的路径)

# 如需生成dll库,需要加上  --enable-shared
./configure --prefix=/home/17634/ffmpeg/build/libx264 --host=x86_64-w64-mingw32 --enable-static --extra-ldflags=-Wl,--output-def=libx264.defmakemake install

注意:
执行完如上命令后是没有生成libx264.lib的,需要手动生成;

首先执行完 configure 命令后,会生成 libx264.def 文件,将其拷贝到  /home/17634/ffmpeg/build/libx264/lib (修改自己的路径)

然后进入该路径,执行命令 lib /machine:x64 /def:libx264.def 即可,如下:

cp libx264.def /home/17634/ffmpeg/build/libx264/lib/
cd /home/17634/ffmpeg/build/libx264/lib/# 生成64位lib使用
lib /machine:x64 /def:libx264.def# 生成32位lib使用
#lib /machine:i386 /def:libx264.def

6.下载和编译 fdk-aac

ffmpeg文件下,输入命令下载和编译fdk-aac

git clone --depth 1 https://gitee.com/mirrors/fdk-aac.gitcd fdk-aac
./autogen.sh
./configure --prefix=/home/17634/ffmpeg/build/libfdk-aac --enable-static --enable-shared
make -j4
make install# 有问题的话,可以 make clean 后继续

7.下载和编译 mp3

ffmpeg文件下,输入命令下载和编译md3

git clone --depth 1 https://gitee.com/hqiu/lame.gitcd lame
./configure --prefix=/home/17634/ffmpeg/build/libmp3lame --disable-shared --disable-frontend --enable-static
make -j4
make install# 有问题的话,可以 make clean 后继续

8.下载和编译 libvpx

ffmpeg文件下,输入命令下载libvpx

git clone --depth 1 https://github.com/webmproject/libvpx.gitcd libvpx
./configure --prefix=/home/17634/ffmpeg/build/libvpx --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
make -j4
make install# 有问题的话,可以 make clean 后继续

ffmpeg" style="background-color:transparent;">三、下载和编译 ffmpeg

1.下载

git clone git://source.ffmpeg.org/ffmpeg.git
# 或者
git clone https://gitee.com/mirrors/ffmpeg.git# 查看版本
git branch -a
# 选择4.2版本
git checkout remotes/origin/release/4.2

注意,可以根据自己需要切换版本, 这里切换为4.2的版本

2.编译

手动进入ffmpeg文件夹,新建文件 build_ffmpeg.sh,然后拷贝如下命令到文件中(注意替换自己的路径)

./configure \--prefix=/home/17634/ffmpeg/build/ffmpeg-4.2 \--arch=x86_64 \--enable-shared \--enable-gpl \--enable-libfdk-aac \--enable-nonfree \--enable-libvpx \--enable-libx264 \--enable-libmp3lame \--extra-cflags="-I/home/17634/ffmpeg/build/libfdk-aac/include" \--extra-ldflags="-L/home/17634/ffmpeg/build/libfdk-aac/lib" \--extra-cflags="-I/home/17634/ffmpeg/build/libvpx/include" \--extra-ldflags="-L/home/17634/ffmpeg/build/libvpx/lib" \--extra-cflags="-I/home/17634/ffmpeg/build/libx264/include" \--extra-ldflags="-L/home/17634/ffmpeg/build/libx264/lib" \--extra-cflags="-I/home/17634/ffmpeg/build/libmp3lame/include" \--extra-ldflags="-L/home/17634/ffmpeg/build/libmp3lame/lib"

然后进入路径后执行脚本编译即可

cd /home/17634/ffmpeg/ffmpeg/
sh build_ffmpeg.sh
make -j4
make install

注意:

如果在执行脚本中出现如下报错

①.有可能是 pkg-config 没有成功被安装,在上面找到安装命令重新安装一遍;

②.需要给他设置环境变量,通过如下命令(替换自己的路径);

 export PKG_CONFIG_PATH=/home/17634/ffmpeg/build/libx264/lib/pkgconfig:$PKG_CONFIG_PATH

(或者说还遇到别的什么问题,可根据错误提示自行百度解决!)

3.测试

手动进入路径 cd /home/17634/ffmpeg/build/ffmpeg-4.2/bin/ 

手动拷贝一个视频到此路径中,然后使用 ffplay.exe 进行播放测试即可

4.添加其他必要的dll库

双击 ffmpeg.exe 或者 ffplay.exe 或者 ffprobe.exe ,会出现异常报错提醒

然后下载一个 Everything 应用程序,全局搜索缺少的库 libfdk-aac-2.dll

拷贝我们自己编译的,将其拷贝到build/ffmpeg-4.2/bin/ 路径下;

然后点击确定,如果还有报错,则根据报错提示,继续查找相应的dll库,继续拷贝到build/ffmpeg-4.2/bin/ 路径下,直到双击 ffmpeg.exe 或者 ffplay.exe 或者 ffprobe.exe 任一程序不再有报错为止。

注意:一般选择我们自行编译的库和msys64\mingw64\bin路径的库!

四、QT使用msvc64位编译器测试

新建QT项目时,选择MSVC64bit编译器

然后把自己编译的整个ffmpeg文件夹拷贝到QT工程路径下

然后双击打开.pro文件,添加头文件路径和路径

INCLUDEPATH += \$$PWD/ffmpeg-4.2/includeLIBS += $$PWD/ffmpeg-4.2/bin/avformat.lib       \$$PWD/ffmpeg-4.2/bin/avcodec.lib        \$$PWD/ffmpeg-4.2/bin/avdevice.lib       \$$PWD/ffmpeg-4.2/bin/avfilter.lib       \$$PWD/ffmpeg-4.2/bin/avutil.lib         \$$PWD/ffmpeg-4.2/bin/swresample.lib     \$$PWD/ffmpeg-4.2/bin/swscale.lib

最后在main.cpp添加头文件和测试代码验证即可

extern "C" {
#include "libavutil/avutil.h"
}// 打印版本信息
qDebug() << "Hello FFmpeg :" << av_version_info();

注意:如果不使用 extern "C" { } 包裹头文件,会报错的,因为ffmepg是使用C语言编写的,所以需要指明是C语言头文件。

新建纯C++项目也是需要extern "C" { } 包裹;但是纯C语言项目不需要!

如果无法运行,那么需要将ffmpeg/bin路径的所有dll库拷贝到debug文件夹下,或debug文件夹的上一层路径即可。

如果有报错头文件找不到,将图片中框住的文件删除掉,再次编译可能就不会报错了!

完!


http://www.ppmy.cn/devtools/121435.html

相关文章

Java数据结构链表(LinkedList详解)

前言&#xff1a; Java数据结构链表部分和顺序表有所相似&#xff1a; 首先都扩展了接口List&#xff0c;List里面的方法都会在LinkedList中重写。 其次都可以实现数据的增删查改等基础功能。 当然ArrayList相较于LinkedList有一定的缺陷&#xff0c;比如果在中间位置插入数据&…

常用性能优化方法

在一个Java项目中进行性能优化是至关重要的。性能优化能够提高项目的效率和响应速度&#xff0c;提升用户体验&#xff0c;并且可以节省服务器资源和成本。 首先&#xff0c;性能优化可以确保项目的高效运行。当项目在运行时&#xff0c;性能问题可能会导致应用程序变慢、响应时…

ST-GCN模型实现花样滑冰动作分类

加入深度实战社区:www.zzgcz.com&#xff0c;免费学习所有深度学习实战项目。 1. 项目简介 本项目实现了A042-ST-GCN模型&#xff0c;用于对花样滑冰动作进行分类。花样滑冰作为一项融合了舞蹈与竞技的运动&#xff0c;其复杂的动作结构和多变的运动轨迹使得动作识别成为一个具…

汽车信息安全 -- 再谈车规MCU的安全启动

目录 1. 安全启动流程回顾 1.1 TC3xx的安全启动 1.2 RH850的安全启动 1.3 NXP S32K3的安全启动 1.4 小结 2.信任链的问题 3.国产HSM IP的拓展 今天接着 汽车信息安全 -- 存到HSM中的密钥还需包裹吗&#xff1f;-CSDN博客这篇文章深究另一个重要功能-- 安全启动。 该文章…

动态时钟控件:Qt/C++ 项目代码解读

基于Qt的动态时钟控件项目。该项目展示了如何通过Qt的绘图系统绘制一个带有表盘背景、时针、分针、秒针、以及时间日期显示的时钟。同时&#xff0c;这个时钟控件支持背景切换&#xff0c;并且每秒钟刷新一次&#xff0c;实时显示当前时间。 项目结构与功能概述 该时钟控件主…

Visual Studio 字体与主题推荐

个人推荐&#xff0c;仅供参考&#xff1a; 主题&#xff1a;One Monokai VS Theme 链接&#xff1a;One Monokai VS Theme - Visual Studio Marketplacehttps://marketplace.visualstudio.com/items?itemNameazemoh.onemonokai 效果&#xff1a; 字体&#xff1a;JetBrain…

【优选算法】(第十二篇)

目录 搜索旋转排序数组中的最⼩值&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 0〜n-1中缺失的数字&#xff08;easy&#xff09; 题目解析 讲解算法原理 编写代码 搜索旋转排序数组中的最⼩值&#xff08;medium&#xff09; 题目解析 1.题目链接…

【蚂蚁HR-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…