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上的官方编译文档。借助此文可少走很多弯路。

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

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

相关文章

【NumPy】全面解析NumPy的bitwise_xor函数:高效按位异或操作指南

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

民国漫画杂志《时代漫画》第29期.PDF

时代漫画29.PDF: https://url03.ctfile.com/f/1779803-1248635405-bf3c87?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

代码文本编辑器-小白教程(Sublime text, Notepad++ Acode下载安装与使用)

代码文本编辑器-小白教程(Sublime text, Notepad Acode下载安装与使用) 1. Windows平台和Linux平台1.1 Sublime text1.2 Notepad 2. 安卓平台 Acode参考资料 1. Windows平台和Linux平台 1.1 Sublime text 一、安装教程 1、打开Sublime Text官网下载安…

如何使用 Connector API 将数据提取到 Elasticsearch Serverless 中

作者:来自 Elastic Jedr Blaszyk Elasticsearch 支持一系列摄取方法。 其中之一是 Elastic Connectors,它将 SQL 数据库或 SharePoint Online 等外部数据源与 Elasticsearch 索引同步。 连接器对于在现有数据之上构建强大的搜索体验特别有用。 例如&…

现代信号处理11_Spectral Analysis谱分析(CSDN_20240526)

谱分析与傅里叶变换 对于一个信号,一方面可以从时域上对其进行分析,另一方面也可以从频域上对其进行认识,对信号进行频谱分析能够帮助我们了解能量在频域上的分布。 确定性信号的能量通常是有限的,而平稳随机信号的能量通常是无限…

ChatGPT自然科学应用,R语言lavaan结构方程模型、copula函数

R语言lavaan结构方程模型(SEM) 结构方程模型(Sructural Equation Modeling,SEM)是分析系统内变量间的相互关系的利器,可通过图形化方式清晰展示系统中多变量因果关系网,具有强大的数据分析功能和…

洗地机哪个牌子清洁效果好?十大公认最好的洗地机品牌

在快节奏的现代生活中,洗地机以其吸尘、拖地和洗地三合一的功能,极大地简化了家庭清洁工作,已成为家庭清洁的得力助手。它不仅能缩短清洁时间,节省体力,还能提升清洁效果。作为资深的居家测评家,关于洗地机…

[XYCTF新生赛]-Reverse:你是真的大学生吗?解析(汇编异或逆向)

无壳 查看ida 没有办法反汇编,只能直接看汇编了。 这里提示有输入,输入到2F地址后,然后从后往前异或,其中先最后一个字符与第一个字符异或。这里其实也有字符串的长度,推测应该是cx自身异或之后传给了cx 完整exp&am…

海信集团携纷享销客启动LTC数字化落地 推动ToB业务再升级

日前,海信集团携手连接型CRM纷享销客正式启动LTC(Leads to Cash)数字化平台实施落地项目。作为海信集团数字化的重要里程碑,该项目将通过统一规划、统一投资、统一平台、资源共享和数据赋能,构建ToB业务数字化经营管理…

实时合成 1 秒频订单簿快照:DolphinDB INSIGHT 行情插件与订单簿引擎应用

INSIGHT 是华泰证券依托大数据存储、实时分析等领域的技术积累,整合接入国内多家交易所高频行情数据,为投资者提供集行情接入、推送、回测、计算及分析等功能于一体的行情数据服务解决方案。基于 INSIGHT 官方提供的行情数据服务 C SDK(TCP 版…

SOLIDWORKS Toolbox根据需求灵活配置详解

用户在SOLIDWORKS中设计时,往往需要在零件中添加不同的孔特征、在装配体结构中添加不同的标准零件,Toolbox为用户提供了比较丰富的孔特征、标准零件选择,大大加快了研发工程师的设计效率;但是用户在使用Toolbox的时候仍会发现以下一些问题&am…

【软考】设计模式之外观模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点7. 缺点8. java示例 1. 说明 1.为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。2.Facade Pattern。3.是一种结构型设计模式&…

Node.js —— Express中服务器的创建、托管静态资源、nodemon

目录 Express的安装 创建基本的 Web 服务器 监听GET请求 监听POST请求 把内容响应给客户端 ​编辑获取 URL 中携带的查询参数 ​编辑获取 URL 中的动态参数 ​编辑托管静态资源 express.static() 托管多个静态资源目录 挂载路径前缀 nodemon: 为什么要使用 nodemon 安…

ubuntu22.04安装调节显示器亮度工具

1 介绍 软件名叫 DDC/CI control,官网 2 安装方法 sudo apt install intltool i2c-tools libxml2-dev libpci-dev libgtk2.0-dev liblzma-dev3 效果 进入软件,忽略告警信息

【算法】dd爱转转

✨题目链接: dd爱旋转 ✨题目描述 读入一个n∗n的矩阵,对于一个矩阵有以下两种操作 1:顺时针旋180 2:关于行镜像 如 变成 给出q个操作,输出操作完的矩阵 ✨输入描述: 第一行一个数n(1≤n≤1000),表示矩阵大小 接下来n行&#xff…

为什么使用数据库类型器件库

项目地址:https://github.com/boringhex-top/OpenECADLib Altium 数据库类型器件库(DbLib)具有显著的优势,特别是对于复杂设计和高效元件管理来说。这里详细介绍数据库类型器件库的优势以及相关背景知识,以帮助你更好…

汇编:循环结构

16位汇编语言中的循环结构主要通过条件跳转指令(如LOOP、JMP, JE, JNE, JG, JL, 等)来实现,常见的循环类型包括for循环和while循环; Loop指令 LOOP指令的操作非常简单:它将CX寄存器的值减1,如果结果不为零…

【C++】list的使用方法和模拟实现

❤️欢迎来到我的博客❤️ 前言 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后…

AI日报:百度发布文心大模型学习机;Open-Sora 1.1可生成21秒视频;Canva可以自动剪辑视频了;超牛ComfyUI节点AnyNode来了

欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南,每天我们为你呈现AI领域的热点内容,聚焦开发者,助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解:AIbase - 智能匹配最适合您的AI产品和网站 1、百度文心…

网络、HTTP、HTTPS、Session、Cookie、UDP、TCP

OSI 七层模型 应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 TCP/IP 五层模型 应用层:为用户的应用进程提供网络通信服务(协议:域名系统DNS协议,HTTP协议,SMTP协议)传输层:负…