- 音视频
- 视频处理
- 图形学
- 桌面应用
【免费下载链接】Natron
Open-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.
本篇技术指南面向需要在 GNU/Linux(Arch、Debian/Ubuntu、Fedora/RHEL 等)上从源码构建 Natron 的开发者与打包者,完整覆盖 Docker 一键构建、Natron SDK 依赖构建、手动依赖安装、config.pri配置、qmake/CMake 两种构建流程以及 Python 绑定的生成方法。读完本文,你将掌握从克隆仓库到产出可运行二进制、再到运行单元测试的全链路实操方案,并能依据仓库内脚本与配置理解每一步的底层原理。
构建方式总览
Natron 是一个基于节点图的开源视频合成软件,其 Linux 版源码编译有三种主流路径,官方文档(INSTALL_LINUX.md)给出的取舍建议如下:
- Docker 一键构建:最省事、最"hands-off"的方式,适合只想快速拿到可运行二进制、不想折腾依赖的用户;
- 完整 Natron SDK:官方二进制所用的构建环境,脚本会从零编译全部第三方依赖并安装到
/opt/Natron-sdk,适合打包维护者; - 发行版包管理器 + 手动构建:利用 Arch / Debian / Fedora 等发行版提供的 Qt、Boost、Expat、Cairo、PySide2 等软件包,配合
config.pri指向这些库,适合大多数开发者日常编译调试。
无论走哪条路,仓库本身都提供了大量现成脚本作为支撑,下文将逐一给出对应文件路径,便于你对照源码理解每一步的实际行为。
Docker 一键构建
如果你已经安装了 Docker,Natron 的官方 SDK 镜像natrongithub/natron-sdk可以直接用于构建完整的 Natron 二进制包。步骤非常简单:先创建一个用于承载构建产物的目录(例如builds),然后执行:
docker run -it --rm --mount src="$(pwd)/builds",target=/home/builds_archive,type=bind natrongithub/natron-sdk:latestDocker 会自动完成其余所有工作,构建结束后你会在./builds目录下得到一个完整的 Natron 二进制归档(tgz 格式)。--rm表示容器退出后自动清理,--mount src=...,target=/home/builds_archive,type=bind把宿主机的builds目录绑定挂载到容器内的/home/builds_archive,从而把产物"带"出容器。
镜像的构建与运行细节记录在 tools/docker/README.md 中,你可以据此做更精细的控制:
- 限制并行编译任务数,例如
--env MKJOBS=2; - 指定源码分支或提交,例如
--env GIT_BRANCH=RB-2.4、--env GIT_URL=...、--env GIT_COMMIT=...; - 发布构建需在 Natron 与各插件仓库打上对应 tag,并设置
RELEASE_TAG(如2.4.4)与NATRON_BUILD_NUMBER=1等环境变量; - 如果构建中途失败,可以改用
docker run -it --rm ... natrongithub/natron-sdk:latest bash进入交互式 shell,手动执行launchBuildMain.sh排查问题。
SDK 镜像本身正是由 tools/jenkins/include/scripts/build-Linux-sdk.sh 生成的:该脚本支持GEN_DOCKERFILE=1直接输出 Dockerfile(而不是真去编译),并基于 CentOS / Rocky Linux / Ubuntu 生成对应的中间构建镜像,这正是官方二进制能在较老发行版上兼容运行的原因。
依赖的两种来源
构建 Natron 所需的依赖要么专门为 Natron 编译(Natron SDK),要么直接使用发行版软件包。从仓库结构看,Natron 还自带一批随源码编译的第三方库(libs/目录下的 gflags、glog、ceres、libmv、openMVG、qhttpserver、hoedown、libtess 等),它们由根级 Project.pro 以 subdirs 模板统一编排,依赖关系为:glog.depends = gflags、ceres.depends = glog gflags、libmv.depends = gflags ceres、openMVG.depends = ceres、Engine.depends = libmv openMVG HostSupport libtess ceres、Renderer.depends = Engine、Gui.depends = Engine qhttpserver、Tests.depends = Gui Engine、App.depends = Gui Engine。
构建完整的 Natron SDK
官方二进制使用 Natron SDK 构建。构建脚本位于仓库的tools/jenkins目录下,执行:
cd tools/jenkins include/scripts/build-Linux-sdk.sh脚本将 SDK 安装到默认位置/opt/Natron-sdk(该目录必须对当前用户可写),并把构建日志与每个软件包安装的文件清单存放在/opt/Natron-sdk/var/log/Natron-Linux-x86_64-SDK或/opt/Natron-sdk/var/log/Natron-Linux-i686-SDK。部分软件包(尤其是 Qt 4.8.7)带有 Natron 专属补丁,具体打了哪些补丁、用了什么配置选项都可以在 SDK 脚本中查到。
从源码看,该脚本还提供若干实用的环境变量开关:
| 环境变量 | 作用 |
|---|---|
GEN_DOCKERFILE=1 | 不实际构建,只输出 Dockerfile(用于生成 SDK 镜像) |
LIST_STEPS=1 | 输出构建步骤的有序清单 |
LAST_STEP=step_name | 只构建到指定步骤为止 |
FORCE_BUILD=1 | 强制重建(即使已是最新) |
DOWNLOAD=1 | 只下载源码包不编译 |
TAR_SDK=1 | 构建完成后把 SDK 打成 tar 归档 |
UPLOAD_SDK=1 | 与TAR_SDK=1配合,把归档上传到远端仓库 |
MKJOBS | 并行编译线程数,默认 4 |
脚本内部会依次build大量软件包,链路清晰可见:先自举 GCC,然后是 bzip2、xz、expat、pkg-config、zlib 等基础工具,再到 python2/python3、Boost、OpenColorIO、OpenImageIO、SeExpr、ffmpeg 全家桶,最后是qt4、qt4webkit、shiboken、pyside、qt5、pyside2。其中每个软件包对应一个独立的构建脚本,全部位于 tools/jenkins/include/scripts/pkg/(如boost.sh、cairo.sh、qt5.sh、pyside2.sh等),你需要调整某个依赖的版本或补丁时,改的就是这些文件。
SDK 的更新方式很简单:拉取脚本的最新修改后重新执行一遍即可,脚本默认只重建需要更新的软件包,并自动处理依赖(例如软件包 B 依赖 A,A 重建后 B 也会被重建)。
使用 SDK 的环境设置
SDK 构建完成后,在你打算编译或运行 Natron 的每个 shell 中,都必须先执行 SDK 的环境设置脚本,确保 Natron 优先使用 SDK 内的库而不是系统库:
. path_to_Natron_sources/tools/utils/natron-sdk-setup-linux.sh该脚本位于 tools/utils/natron-sdk-setup-linux.sh,它会设置PATH、LD_LIBRARY_PATH、LD_RUN_PATH、CPATH、PKG_CONFIG_PATH、PYTHONPATH、QTDIR等环境变量,并额外导出NATRON_PLUGIN_PATH、OFX_PLUGIN_PATH、OCIO,方便后续编译 OpenFX 插件、运行 Natron 与单元测试。注意:这个 source 操作必须在每一个打算编译/运行 Natron 的终端里重复执行。
参照 Travis 脚本安装 Ubuntu 依赖
仓库中的tools/travis/install_dependencies.sh与tools/travis/build.sh分别负责在 Ubuntu 18.04 (Bionic Beaver) 上安装依赖、构建 Natron 及标准插件集,用于官方 Travis CI 构建。你可以把它们当作一份可参考的 Ubuntu 依赖清单与config.pri生成示例,但文档明确提示:其产出的二进制不能保证完全可用,仅作参照。
手动安装依赖
如果不使用 SDK,则需要手工准备以下依赖,多数可通过发行版包管理器获取。
Qt 5.15
Qt5 构建只需 qtbase 库,一般直接用发行版包管理器安装(具体包名因发行版而异)。也可以从 Qt 官方归档的 5.15.4 子模块 tarball 或 KDE fork 自行从源码构建。
Qt 4.8
如果更倾向 Qt4,由于许多发行版已废弃 Qt 4,通常必须从源码构建。Qt 官方下载站的 4.8.7 源码归档是可用来源。注意:Natron 对 Qt 4.8.7 打了 Natron 专属补丁,SDK 脚本里有补丁细节可查。
Boost
Natron 编译需要boost serialization。可以用包管理器安装(注意还需boost_thread、boost_system等运行时库),也可以从 Boost 官网下载源码安装。从根级 CMakeLists.txt 可以看到 CMake 构建路径要求find_package(Boost COMPONENTS headers serialization CONFIG),即至少需要 Boost 的 headers 与 serialization 组件。
Expat
XML 解析库,直接用包管理器安装即可,包名因发行版而异。
Cairo
Natron 的旋转描边(rotoscoping)等功能依赖 Cairo,同样用包管理器安装。Travis 脚本注释中提到 cairo 1.12 是 rotoscoping 的硬性要求,可用 xorg-edgers PPA 获取更新版本。
PySide2 / Shiboken2
- PySide2:Natron 在 Python 3 + Qt5 组合下使用 PySide2。
- Shiboken2:Python 3 + Qt5 组合下的绑定生成器,生成器二进制(
shiboken2)和头文件都必须安装,因为构建期要用它从 typesystem 描述文件生成 Python 绑定代码。
PySide / Shiboken(Qt4 组合)
- PySide:Natron 在 Python 2 + Qt4 组合下使用 PySide,注意许多发行版已将其废弃。
- Shiboken:Python 2 + Qt4 组合下的绑定生成器,同样已废弃。
QtPy
QtPy 是 PyQt5/PyQt4/PySide2/PySide 的抽象层,尽量用发行版包管理器安装,或用 pip:
pip install qtpy配置阶段
构建前的配置是整个过程中最容易困惑的部分,主要包括三件事:OpenFX 子模块、OpenColorIO-Configs 配置包、以及config.pri依赖定位文件。
OpenFX 子模块
Natron 基于 OpenFX API 构建,构建前请确保其子模块是最新的:
git submodule update -i --recursive仓库中的 OpenFX 相关代码位于 libs/OpenFX,此外还有 OpenFX 扩展定义在 libs/OpenFX_extensions。
下载 OpenColorIO-Configs
过去 OCIO 配置以子模块方式引入,但由于仓库体积过大,现在改为 tarball 发布。下载后请把它放到 Natron 仓库根目录:
wget https://github.com/NatronGitHub/OpenColorIO-Configs/archive/Natron-v2.4.tar.gz tar -xvzf Natron-v2.4.tar.gz mv OpenColorIO-Configs-Natron-v2.4 OpenColorIO-Configs注意:如果解压出的目录名形如OpenColorIO-Configs-Natron-v2.4,必须重命名为OpenColorIO-Configs。
为了节省磁盘空间,可以只保留以下子目录:blender*、natron、nuke-default,其余全部删除:
cd OpenColorIO-Configs && rm -v !("blender"|"blender-cycles"|"natron"|"nuke-default") -R为什么必须有它?从 OpenColorIO-Configs.pri 可以看到,qmake 构建会把OpenColorIO-Configs/blender、natron、nuke-default等目录作为OCIO.files安装到$PREFIX/share/OpenColorIO-Configs(macOS 下则打入 app bundle 的Contents/Resources/OpenColorIO-Configs),并且 tools/jenkins/build-natron.sh 在构建时也会自动下载对应版本的 OCIO 配置并软链接为OpenColorIO-Configs。Debian 系的 CMake 构建示例则使用Natron-v2.5版本包,说明该 tarball 的版本号会随主线演进,实际操作时以构建脚本中OCIO_CONFIGS_VERSION的推导逻辑为准。
config.pri:定位依赖的核心文件
config.pri用来告诉 .pro 工程文件各依赖库的位置,是整个构建流程中最容易让人困惑的部分。创建方法:在Project.pro同级的仓库根目录下创建config.pri文件,内容指向你系统上真实的库路径。
三个变量的含义:
INCLUDEPATH—— 头文件(include)路径;LIBS—— 库文件路径/链接参数;PKGCONFIG—— pkg-config 模块名。
一个典型的 Qt4 构建示例(可直接复制到终端执行):
----- copy and paste the following in a terminal ----- cat > config.pri << EOF boost-serialization-lib: LIBS += -lboost_serialization boost: LIBS += -lboost_thread -lboost_system expat: LIBS += -lexpat expat: PKGCONFIG -= expat pyside: PYSIDE_PKG_CONFIG_PATH = $$system($$PYTHON_CONFIG --prefix)/lib/pkgconfig:$$(PKG_CONFIG_PATH) pyside: PKGCONFIG += pyside pyside: INCLUDEPATH += $$system(env PKG_CONFIG_PATH=$$PYSIDE_PKG_CONFIG_PATH pkg-config --variable=includedir pyside)/QtCore pyside: INCLUDEPATH += $$system(env PKG_CONFIG_PATH=$$PYSIDE_PKG_CONFIG_PATH pkg-config --variable=includedir pyside)/QtGui EOF ----- end -----这里的CONFIG 特性名: 指令语法是 qmake 的条件作用域:仅当该特性被启用(例如pyside特性开启)时才追加对应链接/包含参数。$$system(...)则在 qmake 解析期动态执行 shell 命令来探测 pkg-config 给出的真实路径。各发行版的具体示例在下面"发行版专项"一节给出,仓库中也提供了 Arch Linux 的现成模板(见 build-configs/arch-linux/config.pri)。
另外,构建脚本 tools/travis/install_dependencies.sh 里也演示了如何根据 Ubuntu 版本动态生成config.pri(例如对没有 expat.pc 的 Ubuntu 12.04 用expat: PKGCONFIG -= expat关闭 pkg-config 探测、改用-lexpat直连),可作为理解config.pri写法的第二份实例。
Nodes:默认节点插件仓库
Natron 的节点存放在独立仓库中,要使用默认节点集,必须额外构建以下仓库:
- openfx-misc(默认的通用节点集合)
- openfx-io(I/O 相关节点集合)
两者的安装说明见各自仓库的 README,且它们自身也带有子模块(openfx-io、openfx-misc都有 submodules),构建前需同步。插件安装位置有两种选择:
- 系统级:Linux 下安装到
/usr/OFX/Plugins; - 应用目录级:安装在可执行文件所在目录的父目录下名为
Plugins的目录中,例如:
bin/ Natron Plugins/ IO.ofx.bundle运行时插件搜索路径由OFX_PLUGIN_PATH等环境变量控制(见 tools/utils/natron-sdk-setup-linux.sh),构建产物中的 OFX 插件以.ofx.bundle目录形式出现。
构建
使用 qmake 构建
进入 Natron 目录后执行:
qmake -r make如果依赖安装与配置都正确,应当能无错误地构建完成。如果系统里装了多个版本的 Qt,qmake 可能报错,此时 Qt5 构建可以改用:
QT_SELECT=5 qmake -r make需要 DEBUG 构建时,把 qmake 调用改成:
qmake -r CONFIG+=debug需要 Clang 编译时:
qmake -r -spec linux-clang从 Project.pro 可以看出,qmake -r会递归处理HostSupport、gflags、glog、ceres、libmv、openMVG、qhttpserver、hoedown、libtess、Engine、Renderer、Gui、Tests、PythonBin、App这些子工程;如果启用CONFIG(enable-breakpad)还会额外包含breakpadpro.pri。
调试选项(来自 global.pri)
面向 Natron 开发者,global.pri 中定义了一组可用CONFIG+=<option>开启的调试选项:
| CONFIG 选项 | 作用(以源码注释/实现为准) |
|---|---|
snapshot/alpha/beta/RC/stable | 设置构建版本形态,分别定义NATRON_CONFIG_SNAPSHOT等宏(构建农场专用) |
custombuild | 自定义构建,需配合BUILD_USER_NAME,在 Natron 中显示自定义用户名(见 Project.pro 中isEmpty(CONFIG_SET)的提示) |
openmp | 为 GCC 添加-fopenmp编译/链接参数,openMVG、ceres 等库会相应定义OPENMVG_USE_OPENMP、CERES_USE_OPENMP(见 libs.pri) |
enable-breakpad | 启用 Breakpad 崩溃报告支持(Project.pro 据此包含 breakpadpro.pri) |
addresssanitizer | 启用 AddressSanitizer(-fsanitize=address),自动附带 debug 配置 |
threadsanitizer | 启用 ThreadSanitizer(-fsanitize=thread,面向 clang) |
coverage | 启用代码覆盖率(-fprofile-arcs -ftest-coverage -O0) |
enforce-gcc8 | 即使检测到 GCC 8.1/8.2 也强制继续构建(该版本在 release 构建下有已知 bug) |
nopch | 禁用预编译头(debug 构建默认启用nopch) |
例如:
qmake -r CONFIG+=debug CONFIG+=openmp CONFIG+=custombuild BUILD_USER_NAME="MyName"此外 tools/jenkins/build-natron.sh 展示了官方构建农场使用的完整 qmake 参数形态:qmake -r CONFIG+=release ... QMAKE_CC=... QMAKE_CXX=...,并自动附加CONFIG+=enable-osmesa、CONFIG+=enable-cairo、CONFIG+=noassertions CONFIG+=fast(release 下)等选项,可作为自定义构建参数的风向标。
使用 CMake 构建
除了 qmake 外,仓库也支持 CMake 构建(Debian 系文档示例即采用该方式)。根级 CMakeLists.txt 声明的关键选项包括:
NATRON_QT6(默认 OFF):设为 ON 时使用 Qt6 6.3 + Shiboken6 + PySide6 构建;NATRON_SYSTEM_LIBS(默认 OFF):设为 ON 时改用系统版本的 glog、Ceres 等依赖而非仓库内置库;NATRON_BUILD_TESTS(默认 ON):构建 Natron 测试套件。
CMake 构建路径要求 Qt5 5.15(find_package(Qt5 5.15 CONFIG REQUIRED ...))、Shiboken2 5.15 与 PySide2 5.15,并要求find_package(Boost ... serialization)、find_package(Python3 ...),Linux 上还需 X11 与 Wayland(find_package(X11 REQUIRED)、find_package(Wayland COMPONENTS Client Egl))。典型流程:
mkdir ../build-Natron && cd ../build-Natron cmake ../Natron make -j8 make testmake test会运行 Tests 下的测试套件(CMake 顶层开启了enable_testing()),仓库中已有Curve_Test、Hash64_Test、Image_Test、Lut_Test、Tracker_Test、OSGLContext_Test、FileSystemModel_Test、KnobFile_Test等测试源文件可对照。
发行版专项
Arch Linux
Arch 系(含 Manjaro)有两种经过验证的编译方式:AUR 或手动编译。
方式一:AUR
yay -S natron-compositor方式二:手动编译
先安装构建依赖。GCC、Expat、Boost 可直接从官方仓库安装:
sudo pacman -S expat boost-libs gcc还需要额外的 Boost 库、cairo 与 Qt5(由 PySide2 提供):
sudo pacman -S boost cairo pyside2 python-pyqt然后克隆仓库并同步子模块:
git clone https://github.com/NatronGitHub/Natron && cd Natron git submodule init git submodule update -i --recursive创建构建目录:
mkdir build && cd build创建空的config.pri(放在仓库根目录,即../config.pri),用编辑器按需修改。例如可以传入这类选项:
CONFIG += custombuild CONFIG += openmp DEFINES += QT_NO_DEBUG_OUTPUTQt4 场景下,把以下内容粘贴进空白的config.pri(仓库中已有模板,见 build-configs/arch-linux/config.pri,其头部注释注明适用于 Arch、Manjaro、ArcoLinux、Hyperbola 等发行版):
# These are the lines you should paste into your empty `config.pri` boost: LIBS += -lboost_serialization expat: LIBS += -lexpat expat: PKGCONFIG -= expat cairo { PKGCONFIG += cairo LIBS -= $$system(pkg-config --variable=libdir cairo)/libcairo.a } pyside { PKGCONFIG -= pyside INCLUDEPATH += $$system(pkg-config --variable=includedir pyside-py2) INCLUDEPATH += $$system(pkg-config --variable=includedir pyside-py2)/QtCore INCLUDEPATH += $$system(pkg-config --variable=includedir pyside-py2)/QtGui INCLUDEPATH += $$system(pkg-config --variable=includedir QtGui) LIBS += -lpyside-python2.7 } shiboken { PKGCONFIG -= shiboken INCLUDEPATH += $$system(pkg-config --variable=includedir shiboken-py2) LIBS += -lshiboken-python2.7 }然后生成 Makefile 并编译。PREFIX=/usr指定安装前缀,BUILD_USER_NAME用于自定义构建,${CFLAGS}等透传发行版的编译优化参数:
qmake -r ../Project.pro PREFIX=/usr BUILD_USER_NAME="Arch Linux" CONFIG+=custombuild CONFIG+=openmp DEFINES+=QT_NO_DEBUG_OUTPUT QMAKE_CFLAGS_RELEASE="${CFLAGS}" QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}" QMAKE_LFLAGS_RELEASE="${LDFLAGS}"或改用 Clang:
qmake -r ../Project.pro -spec linux-clang PREFIX=/usr BUILD_USER_NAME="Arch Linux" CONFIG+=custombuild CONFIG+=openmp DEFINES+=QT_NO_DEBUG_OUTPUT QMAKE_CFLAGS_RELEASE="${CFLAGS}" QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}" QMAKE_LFLAGS_RELEASE="${LDFLAGS}"最后编译:
make二进制位于build/App目录下,启动方式:
./App/NatronDebian 系(Ubuntu / Linux Mint / KDE Neon / ElementaryOS 等)
用apt-get或apt安装依赖,在多数 Debian 系发行版上都能工作。
Ubuntu 22.04(Python 3.10 + Qt 5.15):
sudo apt install build-essential libboost-serialization-dev libboost-system-dev libexpat1-dev libcairo2-dev qt5-qmake qtbase5-dev python3-dev libshiboken2-dev libpyside2-dev python3-pyside2.qtwidgets python3-qtpyDebian 12:
sudo apt install qtbase5-dev libboost-serialization-dev libboost-system-dev libexpat1-dev libcairo2-dev python3-dev python3-pyside2.qtcore libpyside2-dev libshiboken2-dev大多数 Debian/Ubuntu 系通用:
sudo apt install qt5base-dev libboost-serialization-dev libboost-system-dev libexpat1-dev libcairo2-dev python3-dev python3-pyside2 libpyside2-dev libshiboken2-devQt4 场景下使用的config.pri:
boost-serialization-lib: LIBS += -lboost_serialization boost: LIBS += -lboost_thread -lboost_system expat: LIBS += -lexpat expat: PKGCONFIG -= expat cairo: PKGCONFIG -= cairo pyside: PYSIDE_PKG_CONFIG_PATH = $$system($$PYTHON_CONFIG --prefix)/lib/pkgconfig:$$(PKG_CONFIG_PATH) pyside: PKGCONFIG += pyside pyside: INCLUDEPATH += $$system(env PKG_CONFIG_PATH=$$PYSIDE_PKG_CONFIG_PATH pkg-config --variable=includedir pyside)/QtCore pyside: INCLUDEPATH += $$system(env PKG_CONFIG_PATH=$$PYSIDE_PKG_CONFIG_PATH pkg-config --variable=includedir pyside)/QtGui对于 Linux Mint,还需要额外添加:
pyside { PYSIDE_PKG_CONFIG_PATH = $$system($$PYTHON_CONFIG --prefix)/lib/pkgconfig:$$(PKG_CONFIG_PATH) PKGCONFIG += pyside INCLUDEPATH += $$system(env PKG_CONFIG_PATH=$$PYSIDE_PKG_CONFIG_PATH pkg-config --variable=includedir pyside)/QtCore INCLUDEPATH += $$system(env PKG_CONFIG_PATH=$$PYSIDE_PKG_CONFIG_PATH pkg-config --variable=includedir pyside)/QtGui }获取源码与配置包(注意此处示例使用Natron-v2.5的 OCIO 配置包):
git clone https://github.com/NatronGitHub/Natron && cd Natron git submodule update -i --recursive wget https://github.com/NatronGitHub/OpenColorIO-Configs/archive/Natron-v2.5.tar.gz tar xzf Natron-v2.5.tar.gz mv OpenColorIO-Configs-Natron-v2.5 OpenColorIO-Configs使用 CMake 构建:
mkdir ../build-Natron && cd ../build-Natron cmake ../Natron make -j8 make testFedora / RHEL 系
适用于 Fedora、Red Hat Enterprise Linux 及其衍生版,可用dnf或yum。RHEL 及衍生版需要先启用 EPEL 仓库:
yum install epel-release或
dnf install epel-release安装所需软件包:
yum install fontconfig-devel gcc-c++ expat-devel python-pyside2-devel shiboken2-devel qt5-qtbase-devel boost-devel pixman-devel cairo-devel或
dnf install fontconfig-devel gcc-c++ expat-devel python-pyside2-devel shiboken2-devel qt5-qtbase-devel boost-devel pixman-devel cairo-develQt4 场景下的config.pri:
boost-serialization-lib: LIBS += -lboost_serialization boost: LIBS += -lboost_thread -lboost_system PKGCONFIG += expat PKGCONFIG += fontconfig cairo { PKGCONFIG += cairo LIBS -= $$system(pkg-config --variable=libdir cairo)/libcairo.a } pyside { PYSIDE_PKG_CONFIG_PATH = $$system($$PYTHON_CONFIG --prefix)/lib/pkgconfig:$$(PKG_CONFIG_PATH) PKGCONFIG += pyside INCLUDEPATH += $$system(env PKG_CONFIG_PATH=$$PYSIDE_PKG_CONFIG_PATH pkg-config --variable=includedir pyside)/QtCore INCLUDEPATH += $$system(env PKG_CONFIG_PATH=$$PYSIDE_PKG_CONFIG_PATH pkg-config --variable=includedir pyside)/QtGui } shiboken { PKGCONFIG -= shiboken INCLUDEPATH += $$system(pkg-config --variable=includedir shiboken) LIBS += -lshiboken-python2.7 }注意fontconfig与pixman也在依赖之列(对应fontconfig-devel、pixman-devel软件包),这正是 Fedora/RHEL 系与 Debian 系依赖清单的主要差异点。
生成 Python 绑定
一般情况下不需要手动生成 Python 绑定:Qt5 构建时绑定文件会在编译过程中自动生成,Qt4 构建所需的生成文件也已随仓库提交。只有在 Qt4 下需要扩展或修改Python 绑定时(修改typesystem.xml文件),才需要手动运行 shiboken。
如果使用 Qt4 的 PySide,命令行如下:
SDK_PREFIX=/usr # /opt/Natron-sdk if using the Natron SDK PYSIDE_PREFIX=/usr # /opt/Natron-sdk/qt4 if using the Natron SDK QT=4 rm Engine/NatronEngine/* Gui/NatronGui/* shiboken --avoid-protected-hack --enable-pyside-extensions --include-paths=../Engine:../Global:$SDK_PREFIX/include:$PYSIDE_PREFIX/include/PySide --typesystem-paths=$PYSIDE_PREFIX/share/PySide/typesystems --output-directory=Engine/Qt${QT} Engine/Pyside_Engine_Python.h Engine/typesystem_engine.xml shiboken --avoid-protected-hack --enable-pyside-extensions --include-paths=../Engine:../Gui:../Global:$SDK_PREFIX/include:$PYSIDE_PREFIX/include/PySide --typesystem-paths=$PYSIDE_PREFIX/share/PySide/typesystems:Engine:Shiboken --output-directory=Gui/Qt${QT} Gui/Pyside_Gui_Python.h Gui/typesystem_natronGui.xml tools/utils/runPostShiboken.sh Engine/Qt${QT}/NatronEngine natronengine tools/utils/runPostShiboken.sh Gui/Qt${QT}/NatronGui natrongui注意:shiboken 有一些小瑕疵,需要若干 sed 命令修复,Qt4 下调用完 shiboken 后运行tools/utils/runPostShiboken.sh即可。
两个 typesystem 描述文件分别是 Engine/typesystem_engine.xml(引擎层绑定)与 Gui/typesystem_natronGui.xml(GUI 层绑定),对应的绑定入口头文件是 Engine/Pyside_Engine_Python.h 与 Gui/Pyside_Gui_Python.h。Qt5/PySide2 场景下,tools/jenkins/build-natron.sh 中演示了等价的shiboken2 -std=c++17 --avoid-protected-hack --enable-pyside-extensions ...调用链,并随后用python3 tools/utils/sourceCleanup.py ...清理生成代码,可作为对照参考。
收尾与运行验证
构建完成后,参照 SDK 环境脚本(tools/utils/natron-sdk-setup-linux.sh)给出的运行姿势,在启动前设置好运行时环境:
env FONTCONFIG_FILE="$NATRON/Gui/Resources/etc/fonts/fonts.conf" \ OCIO="$NATRON/OpenColorIO-Configs/blender/config.ocio" \ OFX_PLUGIN_PATH="$HOME/OFX/Plugins" \ NATRON_PLUGIN_PATH="$NATRON/Gui/Resources/PyPlugs" \ App/Natron其中OCIO指向 OpenColorIO-Configs 中的 blender 色彩管理配置(即第 2 步下载并重命名到仓库根目录的目录),OFX_PLUGIN_PATH指向编译好的 OFX 插件位置,NATRON_PLUGIN_PATH指向仓库内置的 PyPlugs 目录(Gui/Resources/PyPlugs)。如需运行单元测试,仓库已在 Tests 中提供了多个针对曲线、哈希、图像、LUT、跟踪器等模块的测试用例,make test/make -C Tests即可直接验证构建产物的正确性。
- 音视频
- 视频处理
- 图形学
- 桌面应用
【免费下载链接】Natron
Open-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.
相关推荐
SuperCollider 在 Linux 上的完整构建与运行指南:从 Flatpak 安装到 CMake 源码编译
SuperCollider 在 Linux 上的完整构建与运行指南:从 Flatpak 安装到 CMake 源码编译 导读 本文围绕 SuperCollider
音频处理编程语言Luanti(Minetest)在 GNU/Linux 下从源码编译完整指南:依赖、CMake 配置与构建运行
Luanti(Minetest)在 GNU/Linux 下从源码编译完整指南:依赖、CMake 配置与构建运行 本指南基于仓库 doc/compiling/li
游戏开发图形学mlpack 在 Windows 上的源码构建指南:CMake 与 Visual Studio 双路径详解
mlpack 在 Windows 上的源码构建指南:CMake 与 Visual Studio 双路径详解 本文面向希望在 Windows 上从源码构建 mlp
人工智能机器学习深度学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考