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/share

moduledir=${prefix}/lib/mlt
mltdatadir=${datadir}/mlt

Name: 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/share

Name: 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.bak

1 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/share

Name: 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.stab

15 directories, 2 files

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

3.1 build配置

    CMake的配置截图如下:

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

CMAKE_INSTALL_PREFIX => /Users/mingo/Applications/workspace/av

CMAKE_INSTALL_RPATH => @executable_path/../Frameworks

CMAKE_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/Shotcut

QTDIR  =>  /Users/mingo/Applications/workspace/tools/qt5.15.2/6.5.3/macos

QT_PLUGIN_PATH  =>  /Users/mingo/Applications/workspace/tools/qt5.15.2/6.5.3/macosplugins

QML2_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
    └── man

9 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.f03

1 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/share

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot项目打包:将依赖的jar包输出到指定目录

场景 公司要对springboot项目依赖的jar包进行升级,但是遇到一个问题,项目打包之后,没办法看到他里面依赖的jar包,版本到底是不是升上去了,没办法看到。 下面是项目打的jar包 我们通过反编译工具jdgui,来…

Compose Button移除水波纹效果

一、背景 在使用Compose实现Button按钮时,设计要求移除按钮的水波纹效果,只保留按压效果,经查Compose1.4.3版本中,并没有直接移除水波纹的能力 二、遇到问题 经过多次尝试,使用Compose的Button组件始终无法实现目标效…

SpringBoot基础篇

1:parent 目的:减少依赖配置 开发SpringBoot程序要继承spring-boot-starter-parentspring-boot-starter-parent中定义了若干个依赖管理继承parent模块可以避免多个依赖使用相同技术出现依赖版本冲突继承parent的形式也可以采用引入依赖的i形式实现效果…

《java数据结构》--栈的详解

一.栈的认识 栈是一种不同于链表和顺序表的储存数据结构,它对存储数据和取出数据有着特殊的要求🤔。 首先栈只能从一端存储数据,也就是从一端进,还从这一端出这也是栈最大的特点,这也导致在栈中存取数据都必须遵循先…

FreeRtos进阶——队列的特殊用途

信号量与互斥量都一样,都是特殊的队列。但是只有互斥量实现了优先级继承机制。 信号量与互斥量与队列一样,在操作增加或者减少时,必须先关中断在进行操作! 信号量创建揭秘 图中信号量的创建过程,在代码中的体现本质就是…

vue+antd实践:在输入框光标处插入内容

今天来看一个很简单的需求。 需求描述:在输入框光标处,插入指定的内容。 效果如下: 实现思路:刚开始还在想怎么获取光标的位置,但是发现所做的项目是基于vue3antd组件,那么不简单了嘛,只要调…

SwiftUI初探

SwiftUI 虽然出现了好几年(1.0好像2019年出的,还有SPM也是同一年),现在已经到从1.0到5.0,但受限于对系统的要求(最低iOS13.0,有的要求17.0及以上),每个版本里面差异也很大,语法和Flutter 的Dart 比较像。空闲之余可以先…

Design and implementation of robot impedance controller

机器人阻抗控制器的设计与实现是一个复杂但关键的过程,它涉及到多个方面以确保机器人能够在外界环境的影响下保持稳定的性能。以下是对机器人阻抗控制器设计与实现的详细解答: 一、阻抗控制原理 阻抗控制的基本原理是建立一个期望的机器人位置和接触力…

HTML用法介绍

文章目录 一、HTML概念和模版二、常用标签及用法1.p标签2.span标签3.h标签4.hr标签5.img标签6.a标签7.input标签8.table标签 一、HTML概念和模版 HTML的全称为超文本标记语言&#xff0c;它包括一系列标签组成&#xff0c;模版及各部分注释如下&#xff1a; <!--声明文档类…

iptables练习题

目录 练习题1. 显示当前的iptables规则2. 允许所有来自192.168.1.0/24的TCP流量到本机的22端口&#xff08;SSH&#xff09;3. 禁止所有来自10.0.0.0/8的ICMP流量4. 允许所有出站流量5. 拒绝所有来自外部的HTTP流量&#xff08;80端口&#xff0c;tcp协议&#xff09;6. 删除IN…

设计模式19——观察者模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 观察者模式&#xff08;Observ…

利用cherry pick巧妙地将某次提交单独合并到其他分支

0. 引言 最近在进行系统的多版本并行开发&#xff0c;涉及一些共有基础功能提交时就遇到了麻烦&#xff0c;一份代码需要向多个版本分支进行同步&#xff0c;以保证多版本都能有更新该基础功能。 多次对比提交的方式显然会带来巨大的工作量。但实际上我们可以通过git的cherry…

同时安装python2 和python3

最近的项目因为工具的原因 需要同时安装python2 和python3 我又想学着使用python 写东西 导致遇到了很多问题 记录下来 1 同时安装 python2 和python 1.1 安装完把/确认 Path 环境变量里 同时有python2,python2\Scripts和python3 ,python3\Scripts四个环境变量 修改python3…

IT人的拖延——渴望成功与害怕成功的矛盾

很多人都以为&#xff0c;害怕失败是拖延的主要诱因&#xff0c;但其实“害怕成功”也是拖延的主要诱因之一。要说这个原因&#xff0c;我们不得不提起Bible中的一个人“约拿”&#xff0c;让我们先来看看他的故事带给我们什么启示。 约拿情结简介 约拿是Bible中的一名先知&a…

hexo静态博客 部署到xxx.github.io github 静态页

hexo安装 npm install hexo-cli -g hexo init blog cd blog npm install hexo server key配置 ssh-keygen -t ed25519 -C “emaile.com” 添加key到github err gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository. 配置GitHub仓…

go select

select 是与 switch 相似的控制结构&#xff0c;与 switch 不同的是&#xff0c;select 中虽然也有多个 case&#xff0c;但是这些 case 中的表达式必须都是 channel 的收发操作。 select 能够让 goroutine 同时等待多个 channel 可读或者可写&#xff0c;在多个 channel 状态改…

【Python】 用Python的Pandas库美化打印Series和DataFrame

基本原理 在Python的数据分析领域&#xff0c;Pandas是一个非常重要的库。它提供了丰富的数据结构和数据分析工具&#xff0c;使得处理大型数据集变得简单高效。当你使用Pandas处理数据时&#xff0c;经常需要查看数据的预览&#xff0c;这时候美化打印&#xff08;Pretty-pri…

5、xss-labs之level6

一、level6-----大小写绕过 1、测试分析 测试了之前用过的payload&#xff0c;发现都不行&#xff0c;并且level4使用的Java伪协议也不行&#xff0c;可以得出<>、script、onclick都被过滤 2、构造payload 因为href被过滤&#xff0c;可以试一下大写HREF 初试payload…

Android应用开发之AndroidManifest.xml

一.AndroidManifest.xml介绍 1.定义 AndroidManifest官方解释是应用清单&#xff08;manifest意思是货单&#xff09;&#xff0c;每个应用的根目录中都必须包含一个&#xff0c;并且文件名必须一模一样。 它是Android程序的全局配置文件&#xff0c;是每个 android程序中必须…

linux 定时执行shell、python脚本

在linux里设置定时执行一般是用crontab&#xff0c;如果没有的话&#xff0c;可以先安装&#xff1a; 安装 查看是否安装 cron -v # 对于基于Debian的系统&#xff08;如Ubuntu&#xff09; sudo apt-get install cron# 对于基于RedHat的系统&#xff08;如CentOS&#xff…