FFMpeg环境搭建(WIN10)

news2024/9/23 13:26:34

0、前期准备

软件环境:Win10 + qtcreator
软件准备:MSYS2 安装包、 FFmpeg源码

1、软件安装

通过MSYS2安装编译工具

1、打开MSYS2安装包,一路next即可
(注:如果需要更改路径可以自行更改)
在这里插入图片描述
在这里插入图片描述
2、安装完成之后,打开软件,输入以下命令进行mingw安装,命令如下

# 先运行
pacman -Syu
pacman -S make
# 64位工具链
pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2
# 32位工具链
pacman -S mingw-w64-i686-nasm mingw-w64-i686-gcc mingw-w64-i686-SDL2 \
      mingw-w64-i686-pkgconf mingw-w64-i686-binutils

编译FFMpeg

1、打开MSYS2 安装路径
(笔者安装的路径为:D:\msys64,具体看安装时选择的路径)

  • 进入home文件夹,里面有一个以用户名的命名的文件夹,
  • 进入该文件夹里面(如D:\msys64\home\xxx)
  • 将下载好的FFmpeg源码拷贝到该文件夹,然后解压,然后返回上两层文件夹(D:\msys64)

2、根据要编译的dll为32位还是64位,打开相对应的软件
在这里插入图片描述
3、打开之后输入gcc -v,检查编译链的版本位数是否是想要的位数,如下:
在这里插入图片描述
4、输入 ls 查看是否有刚才解压的ffmpeg文件,如下:
在这里插入图片描述
5、确认有该文件之后,若无该文件回到第4步骤检查,清楚文件路径是否正确,进入解压后的文件,输入下面配置(具体配置看自己的需要来选择),然后回车
(注意:configure时间有点长要稍微等一会,出现下面现在之后表示配置成功)

./configure \
  --prefix="$HOME/ffmpeg_build" \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --extra-libs=-lpthread \
  --extra-libs=-lm \
  --bindir="$HOME/ffmpeg_build/bin" \
  --enable-gpl \
  --enable-nonfree \
  --enable-shared \
  --enable-decoder=h264 \
  --enable-parser=h264 

在这里插入图片描述
6、输入make -j4 && make install进行编译安装
7、编译安装完成之后,来到D:\msys64\home\xxx目录下,就会看到ffmpeg_build目录,该目录下的内容如下
在这里插入图片描述
8、进行文件分类,新建 ffmpeg 文件夹,进入 ffmepg 文件夹,
新建 lib 文件夹,将 ffmpeg_build 中的 bin 文件中的.lib文件拷贝到该目录
新建 dll 文件夹,将 ffmpeg_build 中的 bin 文件中的.dll文件拷贝到该目录
将 ffmpeg_build 中的文件 include 文件夹拷贝到ffmepg目录

2、测试

文件拷贝

1、将ffmpeg_build目录名字修改为ffmpeg之后(可以不修改),拷贝到qt项目之下,如下:
在这里插入图片描述

打开QT Creator

1、新建qt工程
2、修改.pro文件,修改后的内容如下

QT -= gui

CONFIG += c++11 console
CONFIG -= app_bundle

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

win32: LIBS += -L$$PWD/ffmpeg/lib/ -lavcodec\
                -L$$PWD/ffmpeg/lib/ -lavdevice\
                -L$$PWD/ffmpeg/lib/ -lavfilter\
                -L$$PWD/ffmpeg/lib/ -lavformat\
                -L$$PWD/ffmpeg/lib/ -lavutil\
                -L$$PWD/ffmpeg/lib/ -lpostproc\
                -L$$PWD/ffmpeg/lib/ -lswresample\
                -L$$PWD/ffmpeg/lib/ -lswscale\

INCLUDEPATH += $$PWD/ffmpeg/include
DEPENDPATH += $$PWD/ffmpeg/include

3、mian.cpp文件中,输入如下代码

#include <QCoreApplication>
#include <iostream>
#include <string>

using namespace std;
extern "C" {
    #include <libavcodec/avcodec.h>
    #include <libavformat/avformat.h>
    #include <libswscale/swscale.h>
    #include <libavdevice/avdevice.h>
    #include <libavformat/version.h>
    #include <libavutil/time.h>
    #include <libavutil/mathematics.h>
}

int main()
{
    av_log_set_level(AV_LOG_DEBUG);
    av_log(NULL, AV_LOG_DEBUG,"Hello ffmpeg!\n");
    av_log(NULL, AV_LOG_DEBUG,"ffmpeg version = %s\n", av_version_info());
    return 0;
}

4、编译运行。结果如下:
(注意:记得把ffmpeg/bin/下的dll文件拷贝到生成的exe文件目录下,否则无法运行成功)
在这里插入图片描述
在这里插入图片描述
到此完结

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

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

相关文章

虚拟现实辅助工程技术助力多学科协同评估

在当今高速发展的经济环境中&#xff0c;制造业面临着多重挑战&#xff0c;包括提高产品性能、压缩设计周期、实现轻量化设计和降低成本。为了有效应对这些挑战&#xff0c;多学科协同评估成为缩短研发周期和提升研制质量的关键手段。 传统的多学科评估面临着数据孤立与融合困难…

Android 系统源码项目加载预编好的so库

Android 系统源码项目加载预编好的so库 文章目录 Android 系统源码项目加载预编好的so库一、前言二、源码中加载so1、Android.mk加载so加载so的主要相关代码&#xff1a; 2、Android.bp加载so&#xff08;1&#xff09;Android.mk使用源码命令编译成Android.bp&#xff08;2&am…

Java灰度发布

有没有在北京面试java的小伙伴&#xff0c;每家公司面试问的问题都不一样&#xff0c;昨天面试官问到了灰度发布&#xff0c;一脸懵&#xff0c;好像在哪儿听说过&#xff0c;毕竟我都没发布过&#xff0c;之前都是项目组长在干这些事儿&#xff0c;所以聊聊&#xff0c;了解一…

驾驭Autofac,ASP.NET WebApi实现依赖注入详细步骤总结

前言 嘿&#xff0c;小伙伴们&#xff0c;今天我们来一场 Autofac 的学习之旅吧&#xff01; Autofac 是一个轻量级的依赖注入框架&#xff0c;专门为 .NET 应用程序量身定做&#xff0c;它就像是你代码中的 “魔法师”&#xff0c;用它来管理对象的生命周期&#xff0c;让你…

828华为云征文|华为云Flexus X实例docker部署最新gitlab社区版,搭建自己的私人代码仓库

828华为云征文&#xff5c;华为云Flexus X实例docker部署最新gitlab社区版&#xff0c;搭建自己的私人代码仓库 华为云最近正在举办828 B2B企业节&#xff0c;Flexus X实例的促销力度非常大&#xff0c;特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Ng…

大数据采集迁移工具

Flume Sqoop kafka框架 MQ&#xff1a;消息队列 broker相当于服务器 消息队列

栈和队列(1)

空栈先移动栈顶再加数据&#xff0c;满栈先插入数据再移 栈的基本概念栈是一种后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09;的数据结构。栈支持两种主要的操作&#xff1a;•压栈&#xff08;Push&#xff09;&#xff1a;向栈中添加一个元素。•弹栈&…

Kubernetes v1.28.0安装详解

Kubernetes v1.28.0安装详解 一.环境初始化 要在所有节点执行命令进行配置 1、检查操作系统的版本 此部署环境为CentOS 7.9 [rootCentOS7 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootCentOS7 ~]#2、主机名解析 为了方便集群节点间的互相调…

活动系统开发之采用设计模式与非设计模式的区别-数据库设计及代码设计

1、数据库ER图 2、应用框架选用 PHP语言对应的thinkphp6.1应用框架 3、功能代码设计(后端) a、父类Base.php i&#xff1a;控制登录&#xff0c;只能登录后管理员才能操作&#xff1b; ii&#xff1a;控制按钮权限&#xff0c;管理员不仅要登录&#xff0c;且必须要有对应菜单…

报错处理:超过Uobject最大数量

处理方式 一、打包时项目中设置游戏中UObject的最大数量为100000000 二、打包后的配置文件中设置 打包路径&#xff1a; 一厅统管\Windows\YZ_YTTG\Saved\Config\Windows\Engine.ini文件下添加配置文件 [/Script/Engine.GarbageCollectionSettings] gc.MaxObjectsInEditor1000…

API 网关 OpenID Connect 实战:单点登录(SSO)如此简单

作者&#xff1a;戴靖泽&#xff0c;阿里云 API 网关研发&#xff0c;Higress 开源社区 Member 前言 随着企业的发展&#xff0c;所使用的系统数量逐渐增多&#xff0c;用户在使用不同系统时需要频繁登录&#xff0c;导致用户体验较差。单点登录&#xff08;Single Sign-On&a…

2024最新!Facebook手机版和网页版改名教程!

Facebook作为全球最大的社交平台之一&#xff0c;允许用户自定义名字和昵称。在Facebook更新姓名可以帮助您更好的展现账号形象。本文将为您提供详细的步骤指导&#xff0c;帮助您在手机APP和网页版上轻松完成Facebook改名操作。 Facebook手机版改名 打开Facebook APP并登录账号…

区块链ARC如何能让节点能够大规模处理交易数据

​​发表时间&#xff1a;2024年8月7日 TAAL技术主管Michael Bckli表示&#xff0c;TAAL公司一直在对ARC进行测试&#xff0c;并准备在今年年底全面发布。因TAAL在区块链交易处理方面具备深厚的专业知识&#xff0c;BSV区块链委托TAAL进行ARC开源参考落地方案的开发。 ARC是一个…

魔珐科技受邀参与外滩大会:以3D数字人AIGC产品赋能大资管行业,重塑金融服务边界

在人工智能浪潮的推动下&#xff0c;金融行业正经历着前所未有的场景革命。2024年Inclusion外滩大会作为行业交流的盛会&#xff0c;汇聚了众多学者、专家及企业领袖&#xff0c;共同探讨AI技术在多领域的深度应用&#xff0c;特别是其在金融行业中的革新潜力。 在外滩大会上&…

在桌面商业分析应用程序中启用高级 Web UI

挑战 Mercur Business Control 应用程序在企业界&#xff0c;尤其是金融领域&#xff0c;拥有悠久的应用历史。它帮助企业处理、可视化和分析海量数据&#xff0c;从而做出明智的商业决策。 随着产品的不断演进和现代化&#xff0c;Mercur Solutions AB 为该应用创建了 Web 客…

使用RestTemplate获取国内大盘股票数据的基本信息并存入数据库中

目录 使用RestTemplate获取国内大盘股票数据的基本信息并存入数据库中 第一步&#xff1a;导入RestTemplate依赖&#xff0c;并配置RestTemplate让其加入到SpringIoC容器中 第二步&#xff1a;在yml文件定义股票的相关参数 第三步&#xff1a;向新浪网发送请求&#xff0c;获…

FP7195:非同步升压恒流LED区动IC

前言&#xff1a;LED驱动芯片是什么&#xff1f; LED驱动芯片是一种能够将电源的电压和电流转换为适合LED&#xff08;发光二极管&#xff09;使用的电压和电流的芯片。这种芯片的主要作用是控制LED的亮度和电流&#xff0c;从而保证LED的正常工作和长寿命。简单来说&#xff…

【C++二分查找】1802. 有界数组中指定下标处的最大值

本文涉及的基础知识点 C二分查找 LeetCode 1802. 有界数组中指定下标处的最大值 给你三个正整数 n、index 和 maxSum 。你需要构造一个同时满足下述所有条件的数组 nums&#xff08;下标 从 0 开始 计数&#xff09;&#xff1a; nums.length n nums[i] 是 正整数 &#xf…

Vue组件:使用$emit()方法监听子组件事件

1、监听自定义事件 父组件通过使用 Prop 为子组件传递数据&#xff0c;但如果子组件要把数据传递回去&#xff0c;就需要使用自定义事件来实现。父组件可以通过 v-on 指令&#xff08;简写形式“”&#xff09;监听子组件实例的自定义事件&#xff0c;而子组件可以通过调用内建…

Ollama Qwen2 支持 Function Calling

默认 Ollama 中的 Qwen2 模型不支持 Function Calling&#xff0c;使用默认 Qwen2&#xff0c;Ollama 会报错。本文将根据官方模板对 ChatTemplate 进行改进&#xff0c;使得Qwen2 支持 Tools&#xff0c;支持函数调用。 Ollama 会检查对话模板中是否存在 Tools&#xff0c;如…