windows下适用msvc编译ffmpeg 适用于ffmpeg-7.1

devtools/2025/2/28 22:20:09/

需要的工具:
visual studio 2019 (可以是其他版本,只是本人电脑上装的为2019)
msys2
ffmpeg-7.1源码

1. 修改msys2_shell.cmd
在msys2目录修改msys2_shell.cmd
打开后找到行set MSYS2_PATH_TYPE=inherit
删除开头的rem

2. 运行msys2
运行x64 Native Tools Command Prompt for VS 2019
打开后跳转到msys2目录,并运行msys2_shell.cmd,会打开msys2窗口
在msys2窗口输入cl,查看是否有输出:

用于 x64 的 Microsoft (R) C/C++ 优化编译器 19.29.30148 版
版权所有(C) Microsoft Corporation。保留所有权利。用法: cl [ 选项... ] 文件名... [ /link 链接选项... ]

如果没有输出,则表示没有继承到VS 2019环境,查看msys2_shell.cmd是否修改成功

3. 配置环境
在msys2中运行:

pacman -Syu
pacman -S make
pacman -S diffutils
pacman -S yasm
pacman -S nasmmv /usr/bin/link.exe /usr/bin/link.exe.bak

4. 编译ffmpeg-7.1
在msys2窗口中进入ffmpeg-7.1目录下
创建build.sh,输入:

#!/bin/shexport CC=cl./configure \
--prefix=/d/lib/ffmpeg-7.1/build_windows \
--toolchain=msvc \
--arch=x86_64 \
--enable-x86asm \
--enable-asm \
--enable-shared \
--disable-programs \
--enable-d3d11va \
--enable-d3d12va \
--enable-dxva2 \
--disable-static

如果有报错查看ffmpeg目录下的ffbuild/config.log文件
等待配置完成
然后依次输入:

make V=1 j 8
make install

5. libx264
如果需要libx264,需要自行下载libx264源码并编译
在libx264目录下运行:

CC=cl ./configure --prefix=<编译物输出目录> --enable-shared
make -j 8
make install

ffmpeg配置的时候添加(libx264为gpl):

--enable-gpl \
--enable-libx264 \
--extra-ldflags="-LIBPATH:<你的libx264编译输入目录>/lib/" \
--extra-cflags="-I<你的libx264编译输入目录>/include/"

即可编译带有x264的ffmpeg

msys2 下载
ffmpeg-7.1 源码下载
libx264


http://www.ppmy.cn/devtools/163459.html

相关文章

电脑键盘知识

1、键盘四大功能区 1. 功能区 2. 主要信息输入区 3. 编辑区 4. 数字键盘区 笔记本电脑键盘的功能区&#xff0c;使用前需先按Fn键 1.1、功能区 ESC&#xff1a;退出 F1&#xff1a;显示帮助信息 F2&#xff1a;重命名 F4&#xff1a;重复上一步操作 F5&#xff1a;刷新网页 …

【大模型系列篇】如何解决DeepSeek-R1结构化输出问题,使用PydanticAl和DeepSeek构建结构化Agent

今日号外&#xff1a;&#x1f525;&#x1f525;&#x1f525; DeepSeek开源周&#xff1a;炸场&#xff01;DeepSeek开源FlashMLA&#xff0c;提升GPU效率 下面我们开始今天的主题&#xff0c;deepseek官方明确表示deepseek-r1目前不支持json输出/function call&#xff0c;可…

在 MySQL 中,删除数据库和表后,自动递增的值通常会被重置为初始值,一般是 1。但如果自动递增不为零,可能有以下原因及解决办法:

在MySQL中&#xff0c;删除数据库和表后&#xff0c;自动递增的值通常会被重置为初始值&#xff0c;一般是1。但如果自动递增不为零&#xff0c;可能有以下原因及解决办法&#xff1a; 原因 数据文件残留&#xff1a;MySQL的数据存储在数据文件中&#xff0c;虽然删除了数据库…

Elasticsearch 数据量大时如何优化查询性能?

Elasticsearch 数据量大时如何优化查询性能&#xff1f; 在面试中&#xff0c;如果你被问到&#xff1a;“Elasticsearch&#xff08;ES&#xff09;在数据量很大的情况下&#xff08;数十亿级别&#xff09;如何提高查询效率&#xff1f;” 那么面试官其实是在测试你是否有实…

LC-单词拆分、最长递增子序列、乘积最大子数组、分割等和子集、最长有效括号

单词拆分 定义状态&#xff1a; 设 dp[i] 表示字符串 s 的前 i 个字符 s[0:i] 是否可以由 wordDict 中的单词拼接而成。 状态转移方程&#xff1a; 设 wordDict 中的某个单词 word&#xff0c;如果 s[j:i] (即 s 从 j 到 i-1 的子串) 在 wordDict 中&#xff0c;且 dp[j] tru…

Geo3D城市引擎大规模建筑植被渲染

import * as Geo3D from "../src"; import InitHelper from "./InitHelper"; //3D场景初始化 const sceneControl InitHelper.init3D(); const container document.querySelector("#map") as HTMLElement; container && sceneControl.…

【Viewer.js】vue3封装图片查看器

效果图 需求 点击图片放大可关闭放大的 图片 下载 cnpm in viewerjs状态管理方法 stores/imgSeeStore.js import { defineStore } from pinia export const imgSeeStore defineStore(imgSeeStore, {state: () > ({showImgSee: false,ImgUrl: ,}),getters: {},actions: {…

Ubuntu 下通过 Docker 部署 Nginx 服务器

Docker 和 Nginx 简介 Docker 是一种开源平台&#xff0c;旨在简化应用程序的开发、交付和运行。通过容器化技术&#xff0c;Docker 能够将应用及其依赖项封装在一个独立的环境中&#xff0c;确保在任何地方都能一致地运行。Nginx 是一款高性能的 HTTP 和反向代理服务器&#…