真复杂啊

安装 ffmpeg 库有两种途径,一种是自己下载源码再去编译,另一种是使用 vcpkg 自动安装

一般情况下,第二种是最简单方便的,但是如果你需要使用 ffmpeg 的特定历史版本,那就有点困难了

下面记录下我遇到的坑,

借助这篇文章,我打算使用 vcpkg 切换到 ffmpeg 的历史提交并安装

1. cmd 下切换到 vcpkg.exe 的安装目录下,确保该目录下有 .git 文件夹,没有的话,git init 新创建就行

2. 列出 ffmpeg 历史提交

git log --color=always --pretty="%Cred%h%Creset -%C(auto)%d%Creset %Cgreen%s%Creset %Cgreen(%ad)" --date=short | grep --color=never ffmpeg 

3. 找到你需要的历史提交,复制并切换,这里你可以先自己 checkout 一个测试分支,以免原始分支(master)受到影响

git checkout 351fbda5b

4. 重新安装 ffmpeg 静态库,如果之前已经安装了最新的,卸载即可

vcpkg install ffmpeg:x86-windows-static

问题来了,到这一步应该就安装成功了,可是事实往往相反,报错了

搜了相关错误文章,没有找到合适的解决方法,所以这条路先放弃

补充:要安装 grep 工具,自行查找安装即可,以及 PowerShell Core 工具,可以到 github 上下载安装包


我又尝试手动编译 ffmpeg 库,下载了相关的源码,并借助这篇文章来学习如何编译

文章中的 MINGW 编译库的方法是可以成功的,不过我们需要在 visual studio 中调试源码,所以要用 msvc 编译源码

方法如下:(x86 版本)

1. 打开 x86 Native Tools Command Prompt for VS 2019,切到 msys64 目录

2. 用 Notepad++ 打开 msys2_shell.cmd 并将下面一行取消注释,取消注释后的代码如下

set MSYS2_PATH_TYPE=inherit

3. 在 x86 Native Tools Command 中运行 msys2_shell.cmd,会自动打开 msys2 窗口,在 msys2 窗口切换到 ffmpeg 源码下,并运行 configure

./configure --prefix=usr/local/ffmpegmsvc --disable-shared --enable-static --toolchain=msvc --enable-gpl

这边理论成功的,但是失败了

ffbuild 文件夹下 config.log 记录了错误原因

BEGIN ./ffconf.ZNgb3tDo/test.c
1 int main(void){ return 0; }
END ./ffconf.ZNgb3tDo/test.c
cl -nologo -c -Fo./ffconf.ZNgb3tDo/test.o ./ffconf.ZNgb3tDo/test.c
test.c
./compat/windows/mslink -nologo -out:./ffconf.ZNgb3tDo/test.exe ./ffconf.ZNgb3tDo/test.o
LINK : fatal error LNK1104: 无法打开文件“LIBCMT.lib”
C compiler test failed.

  

这个错误我搜索了很多资料,但是都无法解决

另:我在自己的电脑上操作了上面的安装步骤,是可以成功的,感觉是公司电脑环境有问题,无语

还有要避坑的地方是注意 cl 的路径是否正确,以及 link 的位置,可以使用 which 命令来查看

$ which link
/c/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.37.32822/bin/HostX86/x86/link $ which cl
/c/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.37.32822/bin/HostX86/x86/cl

特别是 link,往往最后会提醒你找不到匹配的 link.exe,因为配置过程中有可能会使用 msys2 下的 link.exe,我们可以简单的将 link.exe 重命名来避免链接错误


 

最后打算使用微软出的 vcpkg 控制版本来完成这个需求,使用 vcpkg.json 文件控制,相关文章如下

更新:(两种方法都可以正常工作)

站内有专门的文章介绍了两种使用 Mainifest 方法,第一种是在 cmake 时检测 vcpkg.json 并构建 .sln 工程

注意:baseline 是控制的最低版本,但是 vcpkg 提供的一些库的历史 baseline 并没有用,在 cmake 时会提示错误,建议多测试几个 baseline

第二种是在 msbuild 中检测 vcpkg.json,该方法是在 build 工程时检测是否有 json 文件(vcpkg.json 需要放在 .sln 同级目录下),如果有,则依赖清单中的库,方法比较简单

补充:这两种方法都需要设置环境变量

变量值个人感觉设置 versions 或者 mainifest 都可以

另外还需要全局集成,命令行输入

vcpkg integrate install

  

一个简单的 vcpkg.json

{
"name": "versions-test",
"version": "1.0.0",
"dependencies": [
"ffmpeg",
"pthreads",
"openssl",
"glew",
"glfw3",
"sdl2"
],
"builtin-baseline": "6a349fe1fbea1e5fcda2e0775f555d829a5e82df",
"overrides": [
{ "name": "ffmpeg", "version": "4.4" },
{ "name": "glew", "version": "2.2.0"},
{ "name": "glfw3", "version": "3.3.8"},
{ "name": "sdl2", "version": "2.26.2"}
]
}

ffmpeg 是 C 接口,需要在相关头文件前加 extern 声明

extern "C" {
#include "libavcodec/avcodec.h"
} 

avcodec 库会引用 windows 系统库,添加一些需要的库是必要的,如下:

ws2_32.lib
crypt32.lib
shlwapi.lib
winmm.lib
ddraw.lib
dxguid.lib
mfuuid.lib
Mfplat.lib
mf.lib
Secur32.lib
Strmiids.lib
Bcrypt.lib

注意:有些库不是必要的,仅供参考

windows 上 ffmpeg 库的安装的更多相关文章

  1. Windows上python开发--2安装django框架

    Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...

  2. Hadoop 在windows 上伪分布式的安装过程

    第一部分:Hadoop 在windows 上伪分布式的安装过程 安装JDK 1.下载JDK        http://www.oracle.com/technetwork/java/javaee/d ...

  3. 【Qt开发】Qt Creator在Windows上的调试器安装与配置

    Qt Creator在Windows上的调试器安装与配置 如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试 ...

  4. 在 Windows 上使用压缩文件 安装 MySQL

    在 Windows 上使用压缩文件 安装 MySQL 1. 下载 MySQL mysql-5.7.27-win32.zip:二进制文件; 服务器类型: mysqld 2. 解压 mysql-5.7.2 ...

  5. Windows上python的virtualenv 安装及使用

    源地址:http://blog.csdn.net/liuchunming033/article/details/46008301 VirtualEnv可以方便的解决不同项目对类库的依赖问题. 现实测试 ...

  6. 逐步在Windows上结合CopSSH + msysGit安装安装Git Server同时集成Git使用Visual Studio

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  7. 在 Windows 上进行 Laravel Homestead 安装、配置及测试

    软件环境:在 Windows 7 64位 上基于 VirtualBox 5.2.12 + Vagrant 2.1.1 使用 Laravel Homestead. 1.准备 先下载VirtualBox- ...

  8. 在windows上,使用虚拟机安装苹果操作系统

    以下是我这两天安装这个苹果操作系统时,所看的文档,集合.已经成功,再次做一个摘录. 分别看了一下几个链接: http://www.bubuko.com/infodetail-2257390.html ...

  9. Windows上Kafka运行环境安装

    1. 安装JDK 1.1 安装文件:http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载JDK1.2 安装完成后需 ...

  10. Windows上PostGIS(压缩版)安装

    PostGIS安装 1.软件下载 postgresql-9.6.1-1-windows-x64-binaries.zip https://www.postgresql.org/download/win ...

随机推荐

  1. [转帖]给我一分钟,让你彻底明白MySQL聚簇索引和非聚簇索引

    https://zhuanlan.zhihu.com/p/142139541 MySQL的InnoDB索引数据结构是B+树,主键索引叶子节点的值存储的就是MySQL的数据行,普通索引的叶子节点的值存储 ...

  2. Ergonomics JVM 的一种FullGC的说明

    https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html 2 Ergonomics Ergo ...

  3. [转帖]Optimizing Block Device Parameter Settings of Linux

    https://support.huawei.com/enterprise/en/doc/EDOC1000181485/ddbc0e8b/optimizing-block-device-paramet ...

  4. 【转帖】通过pip命令安装好包之后,在pycharm中不显示此库,也不能调用

    目录 1. 问题描述 2. 解决方法1 3. 解决方法2 1. 问题描述 在cmd输入pip list 命令可以看到我的库都已经安装好了,但是pycharm中却没有显示. 在PyCharm查找,并没有 ...

  5. Crash的简单学习

    Crash的简单学习 前言 最近进行海光服务器的压测, 多次出现了压测时宕机的情况. 跟OS,DB还有hardware的vender都进行过沟通, 但都比较难定位具体问题. 麒麟操作系统说需要进行一下 ...

  6. [转帖]龙芯总强调同频性能,是因奔腾4要到25+GHz才比得上酷睿11代单核

      https://baijiahao.baidu.com/s?id=1734320620568707041 闲话不说,先上图,是SPEC CPU 2006 int(单任务)测试的成绩: 上图中的成绩 ...

  7. 任意文件下载包含https的图片

    使用a标签进行下载 <a href="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ. ...

  8. 【一个小发现】VictoriaMetrics 中 vmselect 的 `-search.denyPartialResponse` 选项不应该开启

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 一直以为vmselect 的 -search.denyPa ...

  9. CCFLOW源码解读系列01-----发起流程

    1.发起流程 发起流程时主要做了两件事:一是写入业务数据表,二是新建一条审批流程记录. 发起流程的方法 public static Int64 Node_CreateStartNodeWork(str ...

  10. vs2019系统内置方法无提示

    有个同事问我为什么他的vs编写C#代码,对于引用System.dll中的方法,鼠标移上去没有方法的使用说明或接口注释,具体可以看下面的截图,而我绝大多数情况下是使用Rider开发,并没有遇到这个问题, ...