目录
编译
基础环境准备
依赖环境安装
依赖库安装
X264
fdk-aac
X265
ffmpeg-4.3.6
调试
基础项目环境搭建
VS2019项目创建
VS2019项目代码
vs2019配置
VS2019调试
编译
基础环境准备
1、安装vs2019环境
2、安装msys2工具
3、开始菜单启动x86 Native Tools Command Prompt for VS2019
4、进入msys2安装目录找到msys2_shell.cmd脚本,打开修改
rem set MSYS2_PATH_TYPE=inherit 删掉rem,打开环境变量的继承
5、在第3步的终端里输入msys2_shell.cmd -mingw32 启动msys2的mingw32终端窗口
6、在窗口中敲cl正常执行说明VS2019的环境已经继承过来
如果是乱码,则右击终端窗口选择
Options->Text->Locale选择zh_CN
Options->Text->Character set->GBK
依赖环境安装
pacman -S nasm
pacman -S yasm #这两个是汇编需要
pacman -S make cmake
pacman -S diffutils #比较工具,ffmpeg configure生成makefile时用到
pacman -S pkg-config #找依赖使用
pacman -S git
无法翻墙则替换msys2数据源(类似linux数据源):
依赖库安装
X264
使用上述方法进入msys2终端
git下载源码
CC=cl ./configure --enable-shared --prefix=/usr/local #指定编译器和编成动态链接库
make -j8 && make install
fdk-aac
(21条消息) Windows平台下libfdk-aac库的编译方法_libfdk_aac_Jncryang的博客-CSDN博客
git下载源码到msys2家目录,和x264放一起
version 2.0.1
进入 x86 Native Tools Command Prompt for VS2019终端
nmake -f Makefile.vc
nmake -f Makefile.vc prefix=./install install
version 2.0.2
进入 x86 Native Tools Command Prompt for VS2019终端
无 Makefile.vc文件,执行cmake .生成vs sln项目文件,用vs打开编译
或者
使用msys2终端
pacman -S autoconf automake libtool
./autogen.sh
CC=cl ./configure --enable-shared --prefix=/usr/local #指定编译器和编成动态链接库
make -j8 && make install
X265
git clone multicoreware / x265_git / wiki / Home — Bitbucket
/home/admin/x265_git/build/msys-cl
mv /usr/bin/cmake.exe /usr/bin/ccmake.exe #不能使用msys2中的cmake要使用msvc中的cmake,默认可能是/usr/bin/cmake,改个名就默认编程vs2019的cmake了
./make-Makefiles.sh
nmake install #可能会出错因为拷贝最终文件没有c盘的权限 D:\msys64\home\admin\x265_git\build\msys-cl\ cmake_install.cmake中的路径C盘
改成D盘就好了
拷贝D盘的编译生成的数据全部拷贝放到msys2中的 /usr/local
ffmpeg-4.3.6
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
ERROR: libfdk_aac not found
ffbuild/config.log查看错误日志(乱码的话使用vscode 的gbk2312编码方式)
pkg-config --cflags --libs fdk-aac发现找不到fdk-aac.pc
$ echo $PKG_CONFIG_PATH
/mingw32/lib/pkgconfig:/mingw32/share/pkgconfig
把/usr/local/lib/pkgconfig文件夹移动到 /mingw32/lib/即可,或者改 PKG_CONFIG_PATH环境变量添加/usr/local/lib路径
$ pkg-config.exe --cflags --libs fdk-aac
-I/usr/local/include -L/usr/local/lib -lfdk-aac
ERROR: libx264 not found 链接错误没找到libx264
libx264.lib.dll 改成 libx264.lib
ERROR: x265 not found using pkg-configx
libx265.lib 改成 x265.lib
x265.pc中的路径记得改成 prefix=/usr/local 之前默认是C盘的(详见X265 安装说明)
make -j8 && make install
调试
基础项目环境搭建
创建以下目录
bin/x86 所有可执行文件和dll文件 D:\msys64\home\admin\ffmpeg-4.3.6\install\bin中所有dll文件
include 所有头文件 D:\msys64\home\admin\ffmpeg-4.3.6\install\include
lib 所有lib文件 D:\msys64\home\admin\ffmpeg-4.3.6\install\bin中所有lib文件
src 项目文件
tools 源码
doc 文档
上一章编译windows ffmpeg文档中的 最终输出目录
D:\msys64\home\admin\ffmpeg-4.3.6\install
lib和dll详见博客
(22条消息) C/C++库文件全了解(包含静态库、动态库,包含windows、linux,包含dll、lib、so)_GT19930910的博客-CSDN博客
VS2019项目创建
vs2019创建新项目,空项目
位置指定上面的src,钩子勾上
VS2019项目代码
添加main.cpp
添加代码
#include <iostream>
using namespace std;
extern "C"//指定函数是c语言函数,函数名不包含重载标注
{//引用ffmpeg头文件
#include <libavcodec/avcodec.h>
}
//预处理指令导入库
#pragma comment(lib, "avcodec.lib")
int main(int argc, char* argv[])
{cout << "first ffmpeg" << endl;cout << avcodec_configuration() << endl;return 0;
}
vs2019配置
属性-》c/c++-》常规-》附加包含目录-》添加头文件目录 ..\..\include
属性-》链接器-》常规-》附加库目录-》添加编译lib文件目录 ..\..\lib
属性-》链接器-》输入-》附加依赖项-》添加编译需要的依赖lib #此条与代码中的#include <libavcodec/avcodec.h>选一项配置即可
属性-》常规-》输出目录-》..\..\bin\x86 指定可执行文件目录,此目录之前已经放置好所有的dll运行依赖库
VS2019调试
调试avcodec_configuration()函数,f11能进入源码,因为有默认的编译环境
会进入D:\msys64\home\admin\ffmpeg-4.3.6\源码中
若是别的环境,没有此编译环境,需要把源码拷贝到tools中
解决方案-》属性-》调试源文件
添加D:\ffmpeg-lesson\tools\ffmpeg-4.3.6源码目录
D:\msys64\home\admin\ffmpeg-4.3.6\中搜索*.pdb全部拷贝到D:\ffmpeg-lesson\bin\x86中
全部重新构建再次调试即可进入D:\ffmpeg-lesson\tools\ffmpeg-4.3.6的源码中