Windows环境 源码编译 FFmpeg

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

目录

一、安装MSYS2

1.下载安装

2.配置

3.修改源

4.测试与更新

二、安装其他必要工具

1.安装MinGW-w64

2.安装git

3..安装make等工具

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

①.重命名link.exe

②.下载和安装YASM

[③.安装Visual Studio](#③.安装Visual Studio)

④.检查

[5.下载和编译 x264](#5.下载和编译 x264)

[6.下载和编译 fdk-aac](#6.下载和编译 fdk-aac)

[7.下载和编译 mp3](#7.下载和编译 mp3)

[8.下载和编译 libvpx](#8.下载和编译 libvpx)

[三、下载和编译 ffmpeg](#三、下载和编译 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文件的最上方加入如下源

bash 复制代码
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/

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

bash 复制代码
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/

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

bash 复制代码
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/

4.测试与更新

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

bash 复制代码
#如果想要打开64的窗口
msys2_shell.cmd -mingw64

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

#如果想要打开msys2的msys的窗口
msys2_shell.cmd

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

bash 复制代码
pacman -Sy

二、安装其他必要工具

1.安装MinGW-w64

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

bash 复制代码
pacman -S mingw-w64-x86_64-toolchain

安装MinGW-w64编译工具。

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

2.安装git

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

bash 复制代码
pacman -S git

3..安装make等工具

依次执行如下命令进行安装:

bash 复制代码
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 (相应找到自己的安装路径)

bash 复制代码
cd D:
cd /usr/bin/
mv link.exe link.bak

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

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

②.下载和安装YASM

bash 复制代码
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注册即可。

bash 复制代码
git clone http://git.videolan.org/git/x264.git

cd x264

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

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

make

make install

注意:

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

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

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

bash 复制代码
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

bash 复制代码
git clone --depth 1 https://gitee.com/mirrors/fdk-aac.git

cd 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

bash 复制代码
git clone --depth 1 https://gitee.com/hqiu/lame.git

cd lame
./configure --prefix=/home/17634/ffmpeg/build/libmp3lame --disable-shared --disable-frontend --enable-static
make -j4
make install

# 有问题的话,可以 make clean 后继续

8.下载和编译 libvpx

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

bash 复制代码
git clone --depth 1 https://github.com/webmproject/libvpx.git

cd 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

1.下载

bash 复制代码
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,然后拷贝如下命令到文件中(注意替换自己的路径)

bash 复制代码
./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"

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

bash 复制代码
cd /home/17634/ffmpeg/ffmpeg/
sh build_ffmpeg.sh
make -j4
make install

注意:

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

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

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

bash 复制代码
 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文件,添加头文件 路径和路径

bash 复制代码
INCLUDEPATH += \
            $$PWD/ffmpeg-4.2/include

LIBS += $$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添加头文件和测试代码验证即可

bash 复制代码
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文件夹的上一层路径即可。

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

完!

相关推荐
IT专业服务商2 小时前
联想 SR550 服务器,配置 RAID 5教程!
运维·服务器·windows·microsoft·硬件架构
海尔辛2 小时前
学习黑客5 分钟小白弄懂Windows Desktop GUI
windows·学习
路溪非溪2 小时前
关于ffmpeg的简介和使用总结
ffmpeg
gushansanren2 小时前
基于WSL用MSVC编译ffmpeg7.1
windows·ffmpeg
伐尘3 小时前
【Qt】编译 Qt 5.15.x For Windows 基础教程 Visual Studio 2019 MSVC142 x64
windows·qt·visual studio
专注代码七年3 小时前
在Windows 境下,将Redis和Nginx注册为服务。
windows·redis·nginx
simple_whu9 小时前
开启WSL的镜像网络模式
windows·wsl
modest —YBW13 小时前
Ollama+OpenWebUI+docker完整版部署,附带软件下载链接,配置+中文汉化+docker源,适合内网部署,可以局域网使用
人工智能·windows·docker·语言模型·llama
code在飞13 小时前
windows 部署 Kafka3.x KRaft 模式 不依赖 ZooKeeper
windows·分布式·zookeeper·kafka
不会飞的鲨鱼15 小时前
Windows系统下使用Kafka和Zookeeper,Python运行kafka(二)
windows·zookeeper·kafka