windows环境编译ffmpeg +visual studio 2022

news2024/12/25 12:15:12

最近在配置ffmpeg环境,记录一下坑点。

系统环境

visual stdio 2022  安装c++桌面开发人员版 大概8g 实际下载2g左右,配置齐全其余不选。

然后环境配置,这里我使用别人的图,路劲都差不多。找到VS即可

 

PATH配置:

编译

MSYS2 是一个在 Windows 上运行的 Unix 环境和软件发行版。它提供了一个基于 Cygwin 的 Bash shell 和一组常用的 Unix 工具,帮助开发者在 Windows 上使用 Unix 风格的工作流程。

MSYS2 的主要特点包括:

  1. 基于 Cygwin 构建,提供了一个完整的 Bash shell 环境。

  2. 集成了 MinGW-w64 工具链,支持在 Windows 上编译 C/C++ 程序。

  3. 拥有丰富的软件包仓库,可以通过 pacman 包管理器安装各种 Unix 工具。

  4. 兼容性强,可以与 Visual Studio、Git 等 Windows 开发工具无缝集成。

  5. 易于安装和更新,能够快速建立开发环境。

在使用 ffmpeg 等开源软件时,MSYS2 环境可以提供以下便利:

  1. 提供 Bash shell 及常用 Unix 命令,方便执行编译等操作。

  2. 集成了 MinGW 工具链,能够直接在 Windows 上编译 ffmpeg 源代码。

  3. 可以通过 pacman 安装 ffmpeg 所需的依赖库,简化编译配置。

  4. 与 Windows 开发工具良好兼容,方便开发者的整体工作流程。

总之,MSYS2 是 Windows 平台上非常有价值的 Unix 开发环境,在使用 ffmpeg 等开源软件时可以发挥重要作用。如果您还有其他问题,欢迎继续询问。

简单理解:msys2能够在windows正常使用linux子系统,黑窗口编程。

MSYS2开发环境搭建

1.下载链接
https://www.msys2.org/

下载安装MSYS2(按照官⽹安装到⾃⼰指定的⽬录下,本⼈安装于D:/msys64)

2.安装完成之后,先把安装⽬录下的msys2_shell.cmd中注释掉的
 rem set MSYS2_PATH_TYPE=inherit  改成 
set MSYS2_PATH_TYPE=inherit

这是为了将vs的环境继承给MSYS2。
2.1 修改pacman的源 加入国内包下载域
cd msys64\etc\pacman.d\
编辑 /etc/pacman.d/mirrorlist.mingw32 ,在文件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
编辑 /etc/pacman.d/mirrorlist.mingw64 ,在⽂件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
编辑 /etc/pacman.d/mirrorlist.msys ,在⽂件开头添加:
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/

3.修改验证方式 
要先修改 msys64\etc\pacman.conf(大概40行),修改后:
SigLevel = Never
#SigLevel    = Required 
#LocalFileSigLevel = Optional

4.启动msys2
通过x64 Native Tools Command Prompt for VS 2019 这个命令工具打开命令行窗口: 4.1
点击 x64 Native Tools Command Prompt for VS 2019 打开命令行,目的是让 msys2 来继承vs2019 的环境变量,即是set MSYS2_PATH_TYPE=inherit 的意义。
启动后的界面:
D:
cd  D:\msys64
msys2_shell.cmd -mingw64

源码编译第三方库和FFmpeg

1.x264

提前在/home/jbj/ffmpeg/build 创建
mkdir libmp3lame libfdk-aac libvpx

cd ~/ffmpeg
git clone --depth 1 https://github.com/mirror/x264.git 
cd x264 
进入cmd 输入模式一切运行正常
cmd
powershell 
CC=cl ./configure  --enable-shared   --prefix=...
make 
make install
cp  /usr/local/lib/libx264.dll.lib /usr/local/lib/libx264.lib 

2.x265

2.x265
cd ~/ffmpeg6.0_sources 
git clone https://gitee.com/mirrors_videolan/x265.git
cd x265/build/msys-cl 
进入cmd 输入模式一切运行正常
cmd
powershell 
./make-Makefiles.sh

# 将编译好的文件拷贝到需要的目录,这里如果直接使用nmake install安装则实际是安装到vs2019对应的安装路径,所以手动拷贝
cp x265.exe libx265.dll /usr/local/bin
# 这里改下名字,265是打开x265.lib
cp libx265.lib /usr/local/lib/x265.lib
cp x265-static.lib /usr/local/lib/
cp x265_config.h /usr/local/include/
cp ../../source/x265.h /usr/local/include/
cp x265.pc /usr/local/lib/pkgconfig/

这里插入一条将项目变为动静态库方法
方法1 :编译好后存在下列文件,cp到目录
 cp ./libx264.def /home/jbj/ffmpeg/build/libx264/lib/
 cd /home/32687/ffmpeg/build/libx264/lib
 #若要⽣成64位lib⽂件则输⼊如下命令:
 lib /machine:X64 /def:libx264.def
 #若要⽣成32位lib⽂件则输⼊如下命令:
 lib /machine:i386 /def:libx264.def
 
方法2: 使用vs 重新生成项目,问题在于没有.sin,那就可以构建它
x265举例  下列命令会以source 源代码构架一个符合vs的工程 得到工程之后重新生成 在debug就有了lib dll等等文件 .pc在工程目录

cmake -G "Visual Studio 17 2022" -S ./source -B ./build/project

d-----        2024-08-08     13:49                .git
d-----        2024-08-08     13:49                build
d-----        2024-08-08     13:49                doc
d-----        2024-08-08     13:49                source
-a----        2024-08-08     13:49            122 .hgignore
-a----        2024-08-08     13:49          18120 COPYING
-a----        2024-08-08     13:49            826 readme.rst
-a----        2024-08-08     13:49            125 x265Version.txt

vs编译文件分析

  1. libx265.dll

    • 这是 x265 编码器的动态链接库文件。

    • 它提供了 x265 编码器的动态链接 API,可以被其他程序调用使用。

    • 如果你需要在程序中使用 x265 编码器,可以链接和加载这个 DLL 文件。

  2. libx265.explibx265.lib

    • 这两个文件是为 libx265.dll 服务的。

    • libx265.exp 描述了 DLL 中公开的函数和变量。

    • libx265.lib 是静态链接库文件,在链接其他程序时使用它来链接 libx265.dll

  3. libx265.pdb

    • 这是 libx265.dll 的程序数据库文件。

    • 它包含了动态链接库的调试信息,可用于调试 libx265.dll

  4. x265-static.lib

    • 这是 x265 编码器的静态链接库文件。

    • 如果你需要在程序中静态链接 x265 编码器,可以使用这个文件。

  5. x265.exe

    • 这是 x265 编码器的独立可执行文件。

    • 它可以直接用于命令行编码视频文件。

  6. x265.h

    • 这是 x265 编码器的头文件。

    • 它定义了 x265 API 的函数和数据结构。

    • 如果你需要在程序中使用 x265 编码器,需要包含这个头文件。

  7. x265.pc

    • 这是 x265 的 pkg-config 文件。

    • 它提供了一些编译和链接 x265 的相关信息。

  8. x265.pdb

    • 这是 x265.exe 可执行文件的程序数据库文件。

    • 它包含了可执行文件的调试信息,可用于调试 x265.exe

  9. x265_config.h

    • 这是 x265 编码器的配置头文件。

    • 它定义了一些编译时的宏和选项。

可以理解为

static版本是静态库,可以单独使用,缺点是编译时代码量会增大。

dll版本有两个文件 lib是桥梁 dll是动态库 优点是动态加载,不会增加编译时间。

在使用时需要修改.pc文件prefix=路劲字段


3.下载编译 fdk-aac


3.下载编译 fdk-aac
cd ~/ffmpeg 
git clone   https://github.com/mstorsjo/fdk-aac.git fdk-aac-2.0.1
cd fdk-aac-2.0.1
git checkout v2.0.1

# 编译 在windows黑创进行 cmd powershell 
nmake -f Makefile.vc all
# 安装,安装后fdk相关的头文件、库文件就和x264 x265同样的目录了
nmake -f Makefile.vc prefix=/usr/local install

然后在/usr/local/lib/pkgconfig目录  创建fdk-aac.pc并添加以下内容:
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: Fraunhofer FDK AAC Codec Library
Description: AAC codec library
Version: 2.0.1
Libs: -L${libdir} -lfdk-aac
Libs.private:
Cflags: -I${includedir}

 4.配置SDL2

4.配置SDL2
https://www.yuque.com/linuxer/uv7x5q/hpato3deri5zbqfk?singleDoc#UmVM9
下载 SDL2-devel-2.30.6-VC.zip
cp SDL2-devel-2.30.6-VC/include/  /usr/local/include/sdl2/
cp SDL2-devel-2.30.6-VC/lib/  /usr/local/include/lib/
cp SDL2-devel-2.30.6-VC/lib/pkgconfig/sdl2.pc  /usr/local/include/lib/sdl2.pc
配置sdl2对pkg-config
prefix=/usr/local
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir=${prefix}/include

Name: sdl2
Description: Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer.
Version: 2.26.5
Requires:
Conflicts:
Libs: -L${libdir} -lSDL2main -lSDL2
Cflags: -I${includedir} 


vim ~/.barsh 
export INCLUDE=$INCUDLE"/usr/local/include/SDL2"
export LIB=$LIB";/usr/local/lib"


5.源码编译FFmpeg 


5.源码编译FFmpeg
cd ~/ffmpeg
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
git checkout  remotes/origin/release/6.0
# 返回上一级别
cd ..
# 拷贝一份ffmpeg源码,因为原始的ffmpeg编译代码在msvc编译器有些地方报错,需要做修改
cp -arf FFmpeg ffmpeg6.0
修改ffmpeg6.0目录的源码fftools\ffprobe.c注释 
如图1
fftools\opt_common.c注释
如图2

进入ffmpeg6.0代码编译
cd ffmpeg6.0
编译 在windows黑创进行 cmd powershell 
CC=cl.exe  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ ./configure   --toolchain=msvc --enable-shared  --enable-ffplay  --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-sdl2  --enable-gpl  --enable-nonfree  --disable-optimizations  --disable-stripping  

make 
make install

测试ffmpeg命令 一条行就是成功
ffplay.exe http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4
ffplay.exe http://mirror.aarnet.edu.au/pub/TED-talks/911Mothers_2010W-480p.mp4

 

 

 总结:

1.坑有点多,主要出现在路劲上。比如export LIB=$LIB";D:\msys64\usr\local\lib" 加入了也没什么用,应该是msys2子系统不能识别D:xxxx 使用/usr/local/lib这种方法就可以。

2.在编译三方库时不是很顺利,CC=cl --toolchain=msvc 反正关于msvc编译器的命令,就有问题。 比如在msys2黑窗口 使用CC=cl 有可能引发声明了但未定义的问题(有cl命令但是就是报cl无法使用),猜测是有命令但是没有识别到命令动态库 建议在windows黑窗口使用 因为windwos肯定能寻到vs命令,就不需要太在意环境问题。 比如: CC=cl ./configure --enable-shared 参数.... --prefix=../../../usr/local/ 一定要用这种安装路劲方式,绝对路劲不行。

参考学习

VS2019 | Visual Studio编译器cl.exe环境变量配置 | cl命令行选项 | fatal error C1034:不包括路径集_visual studio2019环境变量设置-CSDN博客

Windows11编译x265源码生成Visual Studio工程详细步骤_windows x265-CSDN博客

Windows使用MSYS2编译x265并集成进ffmpeg_windows编译ffmpeg集成x265-CSDN博客

Windows使用MSYS2编译x265并集成进ffmpeg_windows编译ffmpeg集成x265-CSDN博客

ffmpeg5.0+h264+h265 windows下编译方法-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1992283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring 三级缓存解决循环依赖源码分析

什么是循环依赖? ServiceA依赖ServiceB,ServiceB依赖ServiceA。 启动Spring项目时,如果想实例化ServiceA,创建完ServiceA对象后,需要依赖注入ServiceB的对象,而ServiceB实例化时,需要ServiceA&…

大模型场景应用全集:持续更新中

一、应用场景 1.办公场景 智能办公:文案生成(协助构建大纲优化表达内容生成)、PPT美化(自动排版演讲备注生成PPT)、数据分析(生成公式数据处理表格生成)。 智能会议:会议策划&…

C++之 bind 绑定器深入学习:从入门到精通!

简介 本文详细阐述了 C 中关于 bind 绑定器技术的基本概念和常用技巧。 引入动机 在标准算法库中&#xff0c;有一个算法叫 remove_if&#xff0c;其基本使用如下&#xff1a; #include <iostream> #include <string> #include <algorithm> #include &l…

FANUC发那科模块 A03B-0823-C003 I/0 EXT

IO模块接线 在FANUC系统中IO模块的种类比较多&#xff0c;每种IO模块的使用场合也不相同&#xff0c;每种IO模块的接线脚位也有很大区别&#xff0c;对于电气设计人员来说&#xff0c;清楚知道常用IO模块的接线脚位&#xff0c;才能更好的规划地址、设计图纸&#xff0c;对于设…

MySQL多表

表关系 1.一对多 应用场景 班级和学生 部门和员工 建表原则 设置&#xff08;ForeginKey&#xff09;外键连接 一个表的外键即为另外一张表的主键,以此简历两张表的关系 因此需要再学生表中新增一列&#xff0c;命名为 班级表_id&#xff0c;即班级表的主键&#xff0c;又叫…

【力扣】572.另一棵树的子树

题目描述 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看…

电脑屏幕录制工具分享5款,附上详细电脑录屏教程(2024全新)

日月更迭&#xff0c;转眼间已经来到了2024年的立秋&#xff0c;在这个数字技术快速发展的时代&#xff0c;电脑录屏技术已经成为了一项不可或缺的技能&#xff0c;无论是用于工作汇报、在线教学、游戏直播还是个人娱乐。那么录屏软件哪个好用呢&#xff1f;接下来&#xff0c;…

QT按钮组

目录 按钮组 Push Button&#xff08;按钮&#xff09; Tool Button&#xff08;图片文字&#xff09; Radio Button(单选&#xff09; Check Button(多选) Command Link Button Dialog Button Box(对话按钮&#xff09; 按钮组 Push Button&#xff08;按钮&#xff09…

手机游戏录屏软件哪个好,3款软件搞定游戏录屏

在智能手机普及的今天&#xff0c;越来越多的人喜欢在手机上玩游戏&#xff0c;并希望能够录制游戏过程或者分享游戏技巧。然而&#xff0c;面对市面上众多的手机游戏录屏软件&#xff0c;很多人可能会陷入选择困难。究竟手机游戏录屏软件哪个好&#xff1f;在这篇文章中&#…

数据跨境传输的安全合规风险如何规避?获取免费解决方案白皮书

在全球化的背景下&#xff0c;企业进行有 效的资源整合&#xff0c;学习海外市场的先进技术和管理经验&#xff0c;寻找新的增长点&#xff0c;实现业务的多元化和 可持续发展&#xff0c;不仅有利于开辟新市场&#xff0c;更有助于巩固和增强企业在全球中的地位。在这种前景 下…

如何把项目上传到Gitee(超详细保姆级教程)

目录预览 一、远程仓库1、新建远程仓库1.1 克隆/下载信息介绍 2、新建分支3、配置私人令牌 二、本地仓库1、初始化本地仓库2、创建分支&#xff0c;并切换到该分支3、设置用户名、邮箱3.1 全局3.2 局部 4、设置Remote地址4.1 远程仓库有文件4.2 远程仓库没有文件 5、拉取最新代…

全面掌握Xilinx FPGA开发技术与实战技巧

FPGA以其灵活性、可定制性和并行处理能力&#xff0c;为工程师提供了实现创新解决方案的强大工具。对于初学者来说&#xff0c;学习FPGA开发需要掌握一些基础知识和技能。 学习FPGA必备的基础知识点&#xff1a; 数字逻辑基础&#xff1a;理解基本的数字逻辑概念&#xff0c;…

基于danceTrack相关论文代码列表

文章目录 数据集下载2023Observation-Centric SORT: Rethinking SORT for Robust Multi-Object Tracking 数据集下载 https://github.com/DanceTrack/DanceTrack 2023 Observation-Centric SORT: Rethinking SORT for Robust Multi-Object Tracking code: https://github.c…

微型导轨:光学仪器精准定位的支撑者

微型导轨是指宽度在25mm以下的导轨系统&#xff0c;通常由导轨和滑块组成&#xff0c;具有体积小、重量轻、精度高、噪音低、寿命长等特点。主要用于支撑和定位光学元件&#xff0c;如镜子、透镜、滤光片等。微型导轨通过提供高精度的运动控制&#xff0c;‌有利于提高设备的性…

重磅发布 |《一本书讲透数据资产入表》在全球数据资产大会上发布

2024年8月2日&#xff0c;全球数据资产大会在厦门举行&#xff0c;数据资产管理标杆厂商亿信华辰正式发布全新力作《一本书讲透数据资产入表》&#xff0c;荣获“数据资产十大先锋机构”&#xff0c;并发表主题演讲&#xff0c;展现其在数据资产管理领域的领军风采与创新实力。…

macOS Java多版本管理工具

macOS Java多版本管理工具 可以使用 sdkman&#xff0c;也可以使用jenv 能用 sdkman 就建议使用 sdkman &#xff0c;用不了就使用 jenv # sdkman的安装及使用 蚁景网安学院-一个开放的网络安全交流学习论坛 # jenv 的安装及使用 # 安装JDK8 下载 JDK8 JDK8下载页面&…

Ubuntu环境安装MySQL

Ubuntu环境安装MySQL 1. 访问下载界面并下载发布包2. 安装发布包3. 安装MySQL 1. 访问下载界面并下载发布包 下载地址 也可直接去mysql.com官网下载 这里如果要下载其他版本的或可以去http://repo.mysql.com/这个网页查询相关的版本。 2. 安装发布包 使用切换到root用户…

美元兑人民币汇率的变化,对A股直接影响是什么

美元兑人民币汇率的变化对A股的直接影响是复杂且多面的&#xff0c;主要体现在以下几个方面&#xff1a; 一、市场情绪与投资者信心 汇率波动引发市场担忧&#xff1a;当美元兑人民币汇率大幅波动时&#xff0c;尤其是人民币贬值&#xff0c;可能会引发市场担忧&#xff0c;影…

数据复盘“黑色星期一”:加密市场震荡,代币表现如何?

8月5日的“黑色星期一”成为了全球金融市场的动荡日&#xff0c;这一波及到加密市场的剧烈震荡导致了大量清算事件和代币的暴跌。本文将通过数据复盘&#xff0c;分析这一事件中加密货币的表现&#xff0c;并探讨未来市场的可能走向。 一、暴跌中的惨痛数据 在“黑色星期一”事…

Linux初次体验

Linux系统也是的命令字符也是多的离谱&#xff0c;本来不想写的就顺便写写吧 首先 ctrlaltT 打开终端 这里我就创建了一个文件&#xff0c;test&#xff0c;使用 vi 文件名.c 默认模式是命令行模式 无法写代码的 输入 i 后进入输入模式&#xff0c;开始写代码 退出输入模式…