ffmpeg windows编译及调试完整版

news/2024/12/30 1:16:06/

目录

编译

基础环境准备

依赖环境安装

依赖库安装

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的源码中

http://www.ppmy.cn/news/593039.html

相关文章

第十八章、Spring中的事务属性:隔离、传播属性等

1.什么是事务属性 属性&#xff1a;描述物体特征的一系列值 事务属性&#xff1b;描述事务特征的一系列值 1. 隔离属性 2. 传播属性 3. 只读属性 4. 超时属性 5. 异常属性2.如何添加事务属性 Transactional(isloation,propagation,readOnly,timeout,rollbackFor,norollbackFo…

Performance analysis of our own full blown HTTP

2019独角兽企业重金招聘Python工程师标准>>> In previous post Lets do our own full blown HTTP server with Netty 4 you and I were excited by creation of our own web server. So far so good. But how good? Given ordinary notebook cat /proc/cpuinfo | …

有趣的编程----控制自己电脑的CPU

一、题目&#xff1a;写一个程序&#xff0c;让windows任务管理器中的CPU占用率显示为一条正弦函数曲线。 第一眼看到这个题目&#xff0c;本人确实是没有多大思路的。因为一直没有对性能和CPU占用上考虑太多。真正看书查资料弄完才觉得确实很不错的一个应用题。以下将一步步完…

从硬件到语言,详解C++的内存对齐(memory alignment)

转载请保留以下声明 作者&#xff1a; 赵宗晟 出处&#xff1a; https://www.cnblogs.com/zhao-zongsheng/p/9099603.html 很多写C/C的人都知道“内存对齐”的概念以及规则&#xff0c;但不一定对他有很深入的了解。这篇文章试着从硬件到C语言、更彻底地讲一下C的内存对齐。 什…

【数据库七】搭建MySQL主从复制和读写分离详解

详解搭建搭建MySQL主从复制和读写分离 1.案例实施&#xff1a;搭建MySQL主从复制1.1 主节点数据库&#xff08;CentOS 7-5&#xff09;1.2 从节点数据库&#xff08;CentOS 7-6&#xff09;1.3 从节点数据库&#xff08;CentOS 7-7&#xff09;1.4 验证MySQL主从复制 2.案例实施…

从硬件到语言,详解C++的内存对齐

很多写C/C++的人都知道“内存对齐”的概念以及规则,但不一定对他有很深入的了解。小编试着从硬件到C++语言、更彻底地讲一下C++的内存对齐。 什么是内存对齐(memory alignment) 首先,什么是内存对齐(memory alignment)?这个是从硬件层面出现的概念。大家都知道,可执行…

从硬件到语言,详解C++的内存对齐(memory alignment)(一)

作者&#xff1a;赵宗晟  出处&#xff1a;https://www.cnblogs.com/zhao-zongsheng/p/9099603.html 很多写C/C的人都知道“内存对齐”的概念以及规则&#xff0c;但不一定对他有很深入的了解。这篇文章试着从硬件到C语言、更彻底地讲一下C的内存对齐。 什么是内存对齐&#…

Android源码阅读与理解(二):Android系统Build流程详解

个人认为&#xff0c;成为一个靠谱的Android系统工程师&#xff0c;必须具备以下技能&#xff1a; 翻墙会使用Linux系统阅读英文资料 翻墙技能就不用说了&#xff0c;因为不翻墙&#xff0c;Android源码难以获取&#xff0c;更不用谈体验墙外精彩的世界了。关于第二点&#x…