ffmpeg windows编译及调试完整版

2023-11-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
/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详见博客

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的源码中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ffmpeg windows编译及调试完整版 的相关文章

随机推荐

  • c++11 std::enable_if在模板偏特化的妙用

    1 模板自动推导功能 先看个例子 在调用TestTemplate函数时 我们可以在函数后面加上 lt 类型 gt 无歧义地指定调用的版本 结果如下 由于模板参数在函数参数中的位置是固定的 编译器其实可以推导出参数的类型 这样程序员们就可以不
  • 无线网络几种攻击方式

    Evil Twin Attack 双面恶魔攻击 攻击者使用相同的SSID创建一个欺诈性接入点 因为与受害者常用SSID名称一样 并且具有更强的型号 因此可以轻易欺骗受害者与之连接 建立连接后 攻击者可以替换网页 比如亚马逊付费界面替换成攻击
  • 字符串转换成数字的方法【C#】

    在C 中 经常需要将字符串转换成数字 简单总结三种方法 一 Convert 将一个基本数据类型转换成另一个基本数据类型 比如 将用户输入的数学成绩进行转换 int math Convert ToInt32 Console ReadLine
  • Nginx+Tomcat负载均衡、动静分离

    一 Tomcat多实例部署 Tomcat的多实例部署简单的讲就是基于端口的虚拟主机设置 1 1 安装jdk 1 安装jdk 某rpm包尚未安装 我们可以通过该命令查询其说明信息 安装以后会生成的文件 rpm qpl jdk 8u201 li
  • oracle查询某一个字段的数量总和

    select count from select count from 表名称 group by 多种数据量 表名 举个栗子 比如说我有一个数据类型的字段 里面有很多种的数据类型 而且每个数据类型都有近些年的数据 就是有很多重复的数据类型的
  • 【踩坑专栏】0%classes,0% lines covered

    这东西一般都是不小心点到debug按钮右边的coverage按钮出现的 解决办法 Ctrl Alt F6 取消勾选你的应用 点击最左侧的show detected 或直接点击下方中间的no coverage 参考文章 1 IDEA 项目结构
  • python连接数据库

    参考python核心编程 编写一个用户洗牌的脚本 根据用户输入 选择连接sqlserver或者MySQL 创建数据库 表 随机生成数据 并实现增删改查 其中 为了兼容python2和python3 统一了打印函数 录入函数 动态导包等 一些
  • mysql怎么让表中某一列字段按某字符分割一行变成多行

    注意暂时看不懂的请看下列的解析方法 代码下面有具体解释 SELECT a XH substring index substring index a QZYSBM b help topic id 1 1 AS splitName FROM S
  • 【C++】deque容器

    0 前言 1 deque构造函数 include
  • 计网实验A3:简单的web服务器

    文章目录 计网实验A3 简单的web服务器 实验介绍 相关背景介绍 Socket编程接口 HTTP传输协议 实验功能要求 总体设计 详细设计 数据结构设计 函数分析 调试设计 运行结果 实验总结 困难与解决 心得与思考 计网实验A3 简单的
  • Andrew Ng机器学习算法入门((六):多变量线性回归方程求解

    多变量线性回归 之前讨论的都是单变量的情况 例如房价与房屋面积之前的关系 但是实际上 房价除了房屋面积之外 还要房间数 楼层等因素相关 那么此时就变成了一个多变量线性回归的问题 在实际问题中 多变量的线性回归问题是更加常见的 下面这个例子就
  • Tomcat 相关配置参数说明,性能调优

    Tomcat 相关配置参数说明 1 server xml connect中相关参数说明
  • 爬虫简单爬取网页图片

    仅供学习 请遵守法律法规和robots协议 请在爬取时设置爬取延时 防止给网站造成不必要的麻烦和损失 也避免给自己送进去 爬取图片一般需要导入的库有 import requests import re 正则表达式 import os os用
  • 多线程提高spark streaming数据写入到数据库

    多线程提高spark streaming数据写入到数据库 需求 集群环境资源有限 需要跑多个spark streaming任务 每个任务必须占据1核 cpu利用率很低 需要对数据进行实时统计更新到数据库mysql给业务实时展示 数据聚合程度
  • java-打印项目相对路径的根目录

    IDEA里 System out println System getProperty user dir
  • Java中栈Stack的bug(继承) 以及自己实现一个栈 支持范型 动态扩展

    问题 解决一 封装Stack 解决二 自己实现 Array java ArrayStack java 问题 import java util Stack public class Main public static void main S
  • 【论文笔记】对比学习综述

    跟李沐学AI的b站视频视频 论文精读笔记第五期 https www bilibili com s video BV19S4y1M7hm 最后有总结 请添加图片描述
  • Java 中通过 key 获取锁的正确方式

    一 概览 本文我们将了解如何通过特定键获取锁 以保证该键上的操作的线程安全 并且不妨碍其他键 一般来说 我们需要实现两个方法 void lock String key void unlock String key 本文以字符串作为键为例 大
  • hive报错FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException

    问题描述 创建表时 没有问题 简单插入数据出现这个报错 hive报错FAILED SemanticException org apache hadoop hive ql metadata HiveException Failed to ex
  • ffmpeg windows编译及调试完整版

    目录 编译 基础环境准备 依赖环境安装 依赖库安装 X264 fdk aac X265 ffmpeg 4 3 6 调试 基础项目环境搭建 VS2019项目创建 VS2019项目代码 vs2019配置 VS2019调试 编译 基础环境准备 1