当前位置: 首页 > news >正文

macOS上用Qt creator编译并跑shotcut

1 简介

    Shotcut是一个开源的跨平台的视频编辑软件,支持WIN/MACOS/LINUX等平台,由于该项目的编译较为麻烦,踩坑几许,因此写此文章记录完整编译构建过程,后续按此法编译,可减少走弯路,提高生产力。

    编译构建环境:

  • qt sdk版本 >= 6.4,此文是qt 6.5.3,请自行下载安装,笔者已安装好;
  • Shortcut SDK版本23.09.29,universal build;

2 源码下载

    源码下载建议不要在github上下载,那不够,建议从官方文档上下载。详情参见第6章。

    下载后将shotcut-macos-sdk-230929.txz拷贝到以下home目录,并解压:

     按实际Shotcut项目路径修改mlt-framework-7文件内容:

prefix=/Users/mingo/Applications/workspace/av/Shotcut
exec_prefix=${prefix}/build
libdir=${prefix}/Contents/Frameworks
includedir=${prefix}/Contents/Frameworks/include
datadir=${prefix}/build/sharemoduledir=${prefix}/lib/mlt
mltdatadir=${datadir}/mltName: mlt-framework
Description: MLT multimedia framework
Version: 7.19.0
Requires:
Libs: -L${libdir} -lmlt-7
Cflags: -I${includedir}/mlt-7

    按实际Shotcut项目路径需改mlt++-7文件内容: 

prefix=/Users/mingo/Applications/workspace/av/Shotcut
exec_prefix=${prefix}/build
libdir=${prefix}/Contents/Frameworks
includedir=${prefix}/Contents/Frameworks/include
datadir=${prefix}build/shareName: mlt++
Description: C++ API for MLT multimedia framework
Version: 7.19.0
Requires: mlt-framework-7
Libs: -L${libdir} -lmlt++-7
Cflags: -I${includedir}/mlt-7/mlt++

     在Shotcut项目路径建立软链接:

# 建立软连接
mingo@localhost:~/Applications/workspace/av$ ln -s Shotcut Shotcut.app
drwxr-xr-x@   4 mingo  staff   128  9 30  2023 Shotcut/
lrwxr-xr-x    1 mingo  staff     7  5 28 15:42 Shotcut.app@ -> Shotcut

     接下来就是qt creator上的配置了。

3 qt creator配置 

    按如下图配置:

遇到问题:

-- Checking for module 'fftw3'
--   No package 'fftw3' found
-- Checking for module 'fftw'
--   No package 'fftw' found
CMake Error at /opt/homebrew/Cellar/cmake/3.26.0/share/cmake/Modules/FindPkgConfig.cmake:607 (message):A required package was not found

问题原因:以下目录缺失fftw3.pc文件.

mingo@localhost:~/Applications/workspace/av/Shotcut/Contents/Frameworks/lib/pkgconfig$tree -L 1
.
├── fftw3.pc
├── frei0r.pc
├── frei0r.pc.bak
├── libavcodec.pc
├── libavcodec.pc.bak
├── libavdevice.pc
├── libavdevice.pc.bak
├── libavfilter.pc
├── libavfilter.pc.bak
├── libavformat.pc
├── libavformat.pc.bak
├── libavutil.pc
├── libavutil.pc.bak
├── libpostproc.pc
├── libpostproc.pc.bak
├── libswresample.pc
├── libswresample.pc.bak
├── libswscale.pc
├── libswscale.pc.bak
├── libvmaf.pc
├── libvmaf.pc.bak
├── mlt++-7.pc
├── mlt++-7.pc.bak
├── mlt-framework-7.pc
├── mlt-framework-7.pc.bak
├── movit.pc
├── movit.pc.bak
├── opencv4.pc
├── opencv4.pc.bak
├── vidstab.pc
└── vidstab.pc.bak1 directory, 31 files

     在以上目录下创建fftw.pc文件,并输出以下内容:

prefix=/Users/mingo/Applications/workspace/av/Shotcut
exec_prefix=${prefix}/build
libdir=${prefix}/Contents/Frameworks
includedir=${prefix}/Contents/Frameworks/include
datadir=${prefix}build/shareName: fftw3-3
Description: fftw3.3.10
Version: 3.3.10
Requires: fftw3.3
Libs: -L${libdir} -lfftw3.3
Cflags: -I${includedir}/fftw3

    然后,在以下include目录下创建fftw3目录,并把相关头文件放入其中: 

mingo@localhost:~/Applications/workspace/av/Shotcut/Contents/Frameworks/include$tree -L 1
.
├── fftw3
├── frei0r.h
├── ladspa.h
├── libavcodec
├── libavdevice
├── libavfilter
├── libavformat
├── libavutil
├── libpostproc
├── libswresample
├── libswscale
├── libvmaf
├── mlt-7
├── movit
├── opencv4
└── vid.stab15 directories, 2 files

     fftw3的头文件就放在fftw3目录下。具体头文件来源请参加下一节。

3.1 build配置

    CMake的配置截图如下:

    CMake => Kit configuration => current configuration 文字描述如下:

CMAKE_INSTALL_PREFIX => /Users/mingo/Applications/workspace/avCMAKE_INSTALL_RPATH => @executable_path/../FrameworksCMAKE_INSTALL_RPATH_USE_LINK_PATH => ON

     然后在 CMake => Kit configuration => initial configuration 页面按如下配置:

​ 

    上图option的文字描述如下,方便拷贝: 

-DCMAKE_INSTALL_PREFIX=/Users/mingo/Applications/workspace/av -DCMAKE_INSTALL_RPATH=@executable_path/../Frameworks -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON

    最后在此指定pkg config的路径:

​ 

    老规矩,文字描述如下,方便copy: 

PKG_CONFIG_PATH => /Users/mingo/Applications/workspace/av/Shotcut/Contents/Frameworks/lib/pkgconfig

3.2 run配置

    完整配置参见下图:

​ 

    截图不方便copy,因此贴于此处: 

Executable  =>  /Users/mingo/Applications/workspace/av/Shotcut/Contents/MacOS/ShotcutQTDIR  =>  /Users/mingo/Applications/workspace/tools/qt5.15.2/6.5.3/macosQT_PLUGIN_PATH  =>  /Users/mingo/Applications/workspace/tools/qt5.15.2/6.5.3/macospluginsQML2_IMPORT_PATH  =>  ${QTDIR}/qml

4 安装fftw3

    由于下载后的工程里没有fftw相关头文件和lib文件,需要另外设法搞到。执行以下命令安装fftw,arm64下缺省安装在/opt/homebrew/Cellar/fftw/3.3.10_1/下:

brew install fftw

    这一步骤如果报错,请按报错指引安装即可。安装完毕后相关的文件在以下目录:

mingo@localhost:~/Applications/workspace/av/Shotcut/Contents/MacOS$tree -L 2 /opt/homebrew/Cellar/fftw/3.3.10_1/
/opt/homebrew/Cellar/fftw/3.3.10_1/
├── AUTHORS
├── COPYING
├── COPYRIGHT
├── ChangeLog
├── INSTALL_RECEIPT.json
├── NEWS
├── README
├── TODO
├── bin
│   ├── fftw-wisdom
│   ├── fftw-wisdom-to-conf
│   ├── fftwf-wisdom
│   └── fftwl-wisdom
├── include
│   ├── fftw3-mpi.f03
│   ├── fftw3-mpi.h
│   ├── fftw3.f
│   ├── fftw3.f03
│   ├── fftw3.h
│   ├── fftw3l-mpi.f03
│   ├── fftw3l.f03
│   └── fftw3q.f03
├── lib
│   ├── cmake
│   ├── libfftw3.3.dylib
│   ├── libfftw3.a
│   ├── libfftw3.dylib -> libfftw3.3.dylib
│   ├── libfftw3_mpi.3.dylib
│   ├── libfftw3_mpi.a
│   ├── libfftw3_mpi.dylib -> libfftw3_mpi.3.dylib
│   ├── libfftw3_omp.3.dylib
│   ├── libfftw3_omp.a
│   ├── libfftw3_omp.dylib -> libfftw3_omp.3.dylib
│   ├── libfftw3_threads.3.dylib
│   ├── libfftw3_threads.a
│   ├── libfftw3_threads.dylib -> libfftw3_threads.3.dylib
│   ├── libfftw3f.3.dylib
│   ├── libfftw3f.a
│   ├── libfftw3f.dylib -> libfftw3f.3.dylib
│   ├── libfftw3f_mpi.3.dylib
│   ├── libfftw3f_mpi.a
│   ├── libfftw3f_mpi.dylib -> libfftw3f_mpi.3.dylib
│   ├── libfftw3f_omp.3.dylib
│   ├── libfftw3f_omp.a
│   ├── libfftw3f_omp.dylib -> libfftw3f_omp.3.dylib
│   ├── libfftw3f_threads.3.dylib
│   ├── libfftw3f_threads.a
│   ├── libfftw3f_threads.dylib -> libfftw3f_threads.3.dylib
│   ├── libfftw3l.3.dylib
│   ├── libfftw3l.a
│   ├── libfftw3l.dylib -> libfftw3l.3.dylib
│   ├── libfftw3l_mpi.3.dylib
│   ├── libfftw3l_mpi.a
│   ├── libfftw3l_mpi.dylib -> libfftw3l_mpi.3.dylib
│   ├── libfftw3l_omp.3.dylib
│   ├── libfftw3l_omp.a
│   ├── libfftw3l_omp.dylib -> libfftw3l_omp.3.dylib
│   ├── libfftw3l_threads.3.dylib
│   ├── libfftw3l_threads.a
│   ├── libfftw3l_threads.dylib -> libfftw3l_threads.3.dylib
│   └── pkgconfig
├── sbom.spdx.json
└── share├── info└── man9 directories, 57 files

 然后进入到Shotcut的安装目录下,执行如下命令,将dylib库copy到Frameworks目录下:

cd /Users/mingo/Applications/workspace/av/Shotcut/Contents/Frameworks
cp /opt/homebrew/Cellar/fftw/3.3.10_1/lib/libfftw3.3.dylib ./

    拷贝include文件到以下安装目录:

cp /opt/homebrew/Cellar/fftw/3.3.10_1/include/* ./
mingo@localhost:~/Applications/workspace/av/Shotcut/Contents/Frameworks/include/fftw3$tree -L 1
.
├── fftw3-mpi.f03
├── fftw3-mpi.h
├── fftw3.f
├── fftw3.f03
├── fftw3.h
├── fftw3l-mpi.f03
├── fftw3l.f03
└── fftw3q.f031 directory, 8 files

5 编译运行

    链接时报错fftw3库找不到:

    解决办法:

    确保fftw.pc文件按以下书写正确:

prefix=/Users/mingo/Applications/workspace/av/Shotcut
exec_prefix=${prefix}/build
libdir=${prefix}/Contents/Frameworks
includedir=${prefix}/Contents/Frameworks/include
datadir=${prefix}build/shareName: fftw3-3
Description: fftw3.3.10
Version: 3.3.10
Requires: fftw3.3
Libs: -L${libdir} -lfftw3.3
Cflags: -I${includedir}/fftw3

    然后,确保libfftw3.3.dylib库copy到了如下目录:

/Users/mingo/Applications/workspace/av/Shotcut/Contents/Frameworks

     最后执行Run Cmake重新生成makefile,然后再编译链接即可:

​.   编译成功,成功运行:     

6 参考文献

    Shotcut - How To Use the macOS SDK ,此文是ShotcutmacOS上的官方编译文档。借助此文可少走很多弯路。

相关文章:

macOS上用Qt creator编译并跑shotcut

1 简介 Shotcut是一个开源的跨平台的视频编辑软件,支持WIN/MACOS/LINUX等平台,由于该项目的编译较为麻烦,踩坑几许,因此写此文章记录完整编译构建过程,后续按此法编译,可减少走弯路,提高生产力。…...

基于高光谱数据集的创新点实现-高斯核函数卷积神经网络

一、高光谱数据集简介 1.1 数据集简介 数据集链接在这:高光谱数据集(.mat.csv)-科研学术 数据集包含下面三个文件: 文件中包含.mat与.csv,145x145x220, 其实主要使用avirissub.csv文件,在代码上只是将mat文件转成了csv文件。具体avirissub.csv如下&am…...

【python 进阶】 绘图

1. 将多个柱状绘制在一个图中 import seaborn as sns import matplotlib.pyplot as plt import numpy as np import pandas as pd# 创建示例数据 categories [A, B, C, D, E] values1 np.random.randint(1, 10, sizelen(categories)) values2 np.random.randint(1, 10, siz…...

memblock_free_all释放page到buddy,前后nr_free的情况

https://www.cnblogs.com/tolimit/p/5287801.html 在zone_sizes_init 之后,各个node,zone的page总数已知。但是此时的每个order的空闲链表是空的,也就是无法通过alloc_page这种接口来分配。此时page还在memblock管控,需要memblock…...

Django实现websocket

Django实现websocket WebSocket功能使用介绍安装配置WebSocket接口--消息接收者的实现scope通道层 channel layer部署Web客户端连接Mac客户端 WebSocket功能 WebSocket长连接一般用于实现实时功能,例如web端的消息通知、会话等场景。 使用 WebSocket 向 Django 项…...

先进制造aps专题九 中国aps行业分析

国外aps的问题是不给国内客户定制算法 国外aps的算法都很强大,考虑几百个约束条件,各种复杂的工序关系,还有副资源约束特殊规格约束,排程还优化,光c写的算法代码就几十万行甚至上百万行 国内aps的问题是实现不了复杂的…...

力扣hot100:23. 合并 K 个升序链表

23. 合并 K 个升序链表 这题非常容易想到归并排序的思路,俩升序序列合并,可以使用归并的方法。 不过这里显然是一个多路归并排序;包含多个子数组的归并算法,这可以让我们拓展归并算法的思路。 假设n是序列个数,ni是…...

Lightweight Robust Size Aware Cache Management——论文泛读

TOC 2022 Paper 论文阅读笔记整理 问题 现代键值存储、对象存储、互联网代理缓存和内容交付网络(CDN)通常管理不同大小的对象,例如,Blob、不同长度的视频文件、不同分辨率的图像和小文件。在这种工作负载中,大小感知…...

搜索自动补全-elasticsearch实现

1. elasticsearch准备 1.1 拼音分词器 github地址:https://github.com/infinilabs/analysis-pinyin/releases?page6 必须与elasticsearch的版本相同 第四步,重启es docker restart es1.2 定义索引库 PUT /app_info_article {"settings": …...

连接远程的kafka【linux】

# 连接远程的kafka【linux】 前言版权推荐连接远程的kafka【linux】一、开放防火墙端口二、本地测试是否能访问端口三、远程kafka配置四、开启远程kakfa五、本地测试能否连接远程六、SpringBoot测试连接 遇到的问题最后 前言 2024-5-14 18:45:48 以下内容源自《【linux】》 仅…...

简单的 Cython 示例

1&#xff0c; pyx文件 fibonacci.pyx def fibonacci_old(n):if n < 0:return 0elif n 1:return 1else:return fibonacci_old(n-1) fibonacci_old(n-2) 2&#xff0c;setup.py setup.py from setuptools import setup from Cython.Build import cythonizesetup(ext_mod…...

Laravel时间处理类Carbon

时间和日期处理是非常常见的任务。Carbon 是一个功能强大的 PHP 扩展包&#xff0c;它为我们提供了许多方便的方法来处理日期和时间。在 Laravel 中&#xff0c;你无需单独安装 Carbon&#xff0c;因为 Laravel 默认已经包含了它。如果你正在使用 Laravel&#xff0c;那么你已经…...

2024年5月软考架构题目回忆分享

十年架构两茫茫 &#xff0c;Redis , UML 夜来幽梦忽还乡 &#xff0c; 大数据&#xff0c; Lambda 选择题 1.需求分析和架构设计面临这两个不同对象&#xff0c;一个是问题空间&#xff0c;一个是解空间 这是英文题&#xff0c;总共五个题目&#xff0c;只记得这么多 2. …...

香橙派 AIpro开发板初上手

一、香橙派 AIpro开箱 最近拿到了香橙派 AIpro&#xff08;OrangePi AIpro&#xff09;&#xff0c;下面就是里面的板子和相关的配件。包含主板、散热组件、电源适配器、双C口电源线、32GB SD卡。我手上的这个是8G LPDDR4X运存的版本。 OrangePi AIpro开发板是一款由香橙派与华…...

如何使用DotNet-MetaData识别.NET恶意软件源码文件元数据

关于DotNet-MetaData DotNet-MetaData是一款针对.NET恶意软件的安全分析工具&#xff0c;该工具专为蓝队研究人员设计&#xff0c;可以帮助广大研究人员轻松识别.NET恶意软件二进制源代码文件中的元数据。 工具架构 当前版本的DotNet-MetaData主要由以下两个部分组成&#xf…...

LeetCode---栈与队列

232. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int pee…...

【教程】利用API接口添加本站同款【每日新闻早早报】-每天自动更新,不占用文章数量

本次分享的是给网站添加一个每日早报的文章&#xff0c;可以看到本站置顶上面还有一个日更的日报&#xff0c;这是利用ALAPI的接口完成的&#xff01;利用接口有利也有弊&#xff0c;因为每次用户访问网站的时候就会增加一次API接口请求&#xff0c;导致文章的请求会因为请求量…...

僵尸进程,孤儿进程,守护进程

【一】僵尸进程 1.僵尸进程是指完成自己的任务之后&#xff0c;没有被父进程回收资源,占用系统资源,对计算机有害&#xff0c;应该避免 """ 所有的子进程在运行结束之后都会变成僵尸进程(死了没死透)还保留着pid和一些运行过程的中的记录便于主进程查看(短时间…...

Nuxt3 中使用 ESLint

# 快速安装 使用该命令安装的同时会给依赖、内置模块同时更新 npx nuxi module add eslint安装完毕后&#xff0c;nuxt.config.ts 文件 和 package.json 文件 会新增代码段&#xff1a; # nuxt.config.ts modules: ["nuxt/eslint" ] # package.json "devDep…...

【Jmeter】性能测试之压测脚本生成,也可以录制接口自动化测试场景

准备工作-10分中药录制HTTPS脚本&#xff0c;需配置证书 准备工作-10分中药 以https://www.baidu.com/这个地址为录制脚本的示例。 录制脚本前的准备工作当然是得先把Jmeter下载安装好、JDK环境配置好、打开Jmeter.bat&#xff0c;打开cmd&#xff0c;输入ipconfig&#xff0c;…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...