kdenlive
构建 Kdenlive

构建 Kdenlive

支持的平台

Kdenlive 主要在 GNU/Linux 上开发,但也可以使用 Craft 在 Microsoft Windows 和 macOS 上构建 Kdenlive。在 Windows 上还有其他可行的方式 (opens in a new tab)。

目前支持的 GNU/Linux 发行版有:

  • Ubuntu 26.04 (Resolute Raccoon) 及其衍生版,或更新版本。
  • Arch Linux

但只要满足下述要求的任何平台,理论上都应该可以工作。

最低限度的必需依赖(dependency)为:

在 Linux 上构建

Kdenlive 通常需要最新版本的 MLT,其中包含多项 API 更新、错误修复和优化。 因此,除非你的发行版提供了非常新的 MLT 版本,否则你必须与 kdenlive 一起构建 MLT。

你可以用以下命令检查已安装的 MLT 版本:

melt --version

建议卸载官方的 kdenlive 软件包,以避免潜在的冲突。

# Debian/Ubuntu
sudo apt remove kdenlive kdenlive-data
 
# Arch Linux
sudo pacman -R kdenlive

获取构建依赖

首先,确保已安装所需的工具链(toolchain)工具:

# Debian/Ubuntu
sudo apt install build-essential git cmake extra-cmake-modules libsm-dev clang-format
# For faster builds install Ninja
sudo apt install ninja-build
 
# Arch Linux
sudo pacman -S base-devel git cmake extra-cmake-modules libx11
# Optional for faster builds install Ninja
sudo pacman -S ninja

你可以利用发行版的软件包信息(如果不太过时的话)轻松搭建完整的构建环境:

# Debian/Ubuntu -- Enable deb-src entries /etc/apt/sources beforehand
sudo apt build-dep mlt kdenlive
# Arch Linux -- Install expac beforehand
sudo pacman -S $(expac -S "%D" mlt) $(expac -S "%D" kdenlive)
# Fedora/CentOS -- Install builddep beforehand
dnf builddep mlt kdenlive
# OpenSUSE
zypper source-install --build-deps-only mlt kdenlive

或者显式地安装依赖:

# Qt6 modules
sudo apt install qt6-base-dev qt6-svg-dev qt6-multimedia-dev qt6-networkauth-dev \
qml6-module-qtqml-workerscript qml6-module-qtquick-window qml6-module-org-kde-desktop \
qt6-declarative-private-dev qt6-image-formats-plugins
 
# KDE Frameworks 6, based on Qt6
sudo apt install kf6-breeze-icon-theme libkf6archive-dev libkf6bookmarks-dev \
libkf6codecs-dev libkf6config-dev libkf6configwidgets-dev libkf6coreaddons-dev \
libkf6crash-dev libkf6dbusaddons-dev libkf6doctools-dev libkf6filemetadata-dev \
libkf6guiaddons-dev libkf6iconthemes-dev libkf6kio-dev libkf6newstuff-dev \
libkf6notifications-dev libkf6notifyconfig-dev libkf6purpose-dev \
libkf6solid-dev libkf6textwidgets-dev libkf6widgetsaddons-dev libkf6xmlgui-dev
 
# KDE Style Breeze
sudo apt install kde-style-breeze
 
# Multimedia stack
sudo apt install frei0r-plugins ffmpeg mediainfo
 
sudo apt install  ladspa-sdk libfftw3-dev libsdl1.2-dev libxine2-dev debhelper \
libarchive-dev libgdk-pixbuf-2.0-dev libsdl2-dev libxml2-dev libavdevice-dev \
librtaudio-dev libsox-dev frei0r-plugins-dev libdv4-dev libmovit-dev \
librubberband-dev libswscale-dev libebur128-dev libopencv-dev libsamplerate0-dev \
libvidstab-dev libexif-dev libpango1.0-dev libsdl1.2-compat-dev libvorbis-dev \
libavformat-dev libavcodec-dev libswresample-dev libavutil-dev libopentimelineio-dev
 
# Additional libraries
 
sudo apt install chrpath debhelper dh-python libxml2-dev python3-dev swig
 
 
 
# Dependencies for localization
sudo apt install ruby subversion gnupg2 gettext

设置你的环境变量

  • 定义 Kdenlive 的安装位置。一个稳妥的选择是 /usr/local。
INSTALL_PREFIX=/usr/local 

[!WARNING]
如果你有特殊需求并且清楚自己在做什么,可以自定义构建产物的安装位置。但请注意,即使你指定了用户可写的 INSTALL_PREFIX,某些 Qt 插件(例如 MLT 缩略图生成器)仍会被安装到用户不可写的系统路径中才能正常工作。如果你确实不想授予 root 权限,需要在下面那行命令中把 KDE_INSTALL_USE_QT_SYS_PATHS 设置为 OFF。

  • 你还可以把 JOBS 变量设置为你的 CPU 构建时可提供的线程数。
JOBS=16

KDDockWidgets

如果你的发行版提供了足够新版本的 KDDockWidgets(Ubuntu 25.10 并不满足这一条件),你可以安装以下软件包:

sudo apt install kddockwidgets-qt6

否则,你应当自行构建 KDDockWidgets:

git clone https://github.com/KDAB/KDDockWidgets.git
cd KDDockWidgets
mkdir build && cd build
# To build with Qt6
cmake .. -GNinja -DKDDockWidgets_QT6=ON -DKDDockWidgets_FRONTENDS=qtwidgets
 
# install (use make instead of ninja if ninja is not used)
ninja -j$JOBS
sudo ninja install

构建 MLT

如果你的发行版提供了足够新版本的 MLT,你可以安装以下软件包:

sudo apt install libmlt++-dev libmlt-dev melt

然后就可以开始构建 Kdenlive 本身了。

否则,请确保这些软件包未被安装:

sudo apt remove libmlt++-dev libmlt-dev melt

然后构建 MLT:

# Install MLT dependencies
sudo apt install libxml++2.6-dev libavformat-dev libswscale-dev libavfilter-dev \
libavutil-dev libavdevice-dev libsdl1.2-dev librtaudio-dev libsox-dev \
libsamplerate0-dev librubberband-dev libebur128-dev libarchive-dev frei0r-plugins-dev \
liblilv-dev
 
# Get MLT's source code
# You will need --recurse-submodules to get the Glaxnimate code
#
git clone --recurse-submodules https://github.com/mltframework/mlt.git
cd mlt
mkdir build && cd build
# To build with Qt6, you may also enable other optional modules in this command (-GNinja is optional, to build with the faster Ninja command)
cmake .. -GNinja -DMOD_QT=OFF -DMOD_QT6=ON -DMOD_GLAXNIMATE=OFF -DMOD_GLAXNIMATE_QT6=ON \
-DMOD_RNNOISE=OFF
 
# install (use make instead of ninja if ninja is not used)
ninja -j$JOBS
sudo ninja install

如果你之后想卸载它,可以尝试

sudo xargs -d '\n' rm < install_manifest.txt

构建 Kdenlive 本身

在你的开发目录中,运行:

git clone https://invent.kde.org/multimedia/kdenlive.git
cd kdenlive
mkdir build && cd build
cmake .. -GNinja -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX -DKDE_INSTALL_USE_QT_SYS_PATHS=ON \
-DRELEASE_BUILD=OFF -DCMAKE_FIND_ROOT_PATH=/usr/local/KDAB/KDDockWidgets-2.5.0 -DBUILD_TESTING=ON
ninja -j$JOBS
sudo ninja install

请注意,对 Kdenlive 来说 ninja install 是必需的,否则效果(effects)不会被安装,也就无法使用。

应用程序库使用预编译的 Qt 和标准库头文件来加快构建速度。 若要在不使用预编译头文件的情况下构建,请在 CMake 命令中添加 -DCMAKE_DISABLE_PRECOMPILE_HEADERS=ON。

卸载 Kdenlive 的方法:

sudo ninja uninstall

运行 Kdenlive

如果你没有构建在所有库和数据文件都能被自动找到的系统路径下,你需要设置环境变量指向它们。 这由 kdenlive/build 中自动生成的脚本完成,该脚本必须以 source 方式加载(以便在当前 shell 中保留变量,而不是仅仅执行脚本):

. prefix.sh
kdenlive

<a name="build-craft">使用 KDE Craft 构建(Linux、Windows、macOS)</a>

Craft (opens in a new tab) 是一个便捷的构建与打包(packaging)工具,可在 Linux、Windows 和 macOS 上跨平台构建 Kdenlive 及其第三方依赖,并生成软件包。

它非常适合快速搭建可用的构建环境或创建可分发的软件包。不过,对于活跃的开发工作流、调试和依赖定制,通常更推荐手动构建。

  1. 按照此处 (opens in a new tab)的说明设置 Craft。(在 Windows 上请选择 MinGW 作为编译器!)
  2. 开始构建 kdenlive。你可以直接运行 craft --option kdenlive.version=master kdenlive
  3. 在 craft 环境中运行 Kdenlive 也只需一条命令:kdenlive

Craft 使用技巧

  • 如果你想以调试(debug)模式编译 kdenlive,可以运行 craft --buildtype Debug kdenlive
  • 如果你想编译稳定版本而非带有最新改动的 master 分支,请从 craft 命令中移除 --option kdenlive.version=master:craft kdenlive
  • 如果你想编译 kdenlive 仓库中的某个特定分支,请使用 craft --option kdenlive.version=master --option kdenlive.branch=BRANCHNAME kdenlive,其中 BRANCHNAME 是分支名称。
  • 使用 Craft 你还可以轻松地将 Kdenlive 打包为 .dmg、.exe 或 .appimage(取决于你的平台):craft --target=master --package kdenlive 输出结果位于 CraftRoot/tmp
  • 更多 Craft 的说明和技巧参见 https://community.kde.org/Craft (opens in a new tab)

可选的高级开发工具

调试

拥有调试符号可以帮助从崩溃日志或分析器输出中获取更多有用的信息;这在配置(configure)阶段启用。

  • 在 kdenlive 和/或 mlt 的 cmake 命令行中追加 -DCMAKE_BUILD_TYPE=Debug

运行测试

Kdenlive 的测试覆盖率主要集中在时间线模型代码上(非常欢迎将测试扩展到更多部分)。要运行这些测试,请在构建的 cmake 命令行中追加 -DBUILD_TESTING=ON,然后执行 ctest 运行测试。

Fuzzer(模糊测试器)

Kdenlive 内置了一个模糊测试引擎,可以检测崩溃并自动生成测试。它需要安装 clang(通常位于 /usr/bin/clang++)。可以在 cmake 命令行中通过以下方式启用: -DBUILD_FUZZING=ON -DCMAKE_CXX_COMPILER=/usr/bin/clang++

要了解更多关于模糊测试(尤其是 Kdenlive 场景下)的内容,请阅读这篇博客文章 (opens in a new tab)。

供 QtCreator、KDevelop 等使用的帮助文件

你可以自动构建并安装一个 *.qch 文件,其中包含关于源代码的 doxygen 文档,可在 Qt Assistant、Qt Creator 或 KDevelop 等 IDE 中使用。可以在 cmake 命令行中通过以下方式启用: -DBUILD_QCH=ON

你可以在 build/src 找到 kdenlive.qch,执行 make install 之后它位于 ${CMAKE_INSTALL_PREFIX}/lib/cmake/kdenlive

要把 kdenlive.qch 文件添加到 Qt Creator,请选择 Tools > Options > Help > Documentation > Add。

加快编译速度

与 make 相比,Ninja 构建系统似乎更快,也能更好地检测哪些文件需要重新构建。你可以在 cmake 命令行中追加 -GNinja 来启用它。 CCache 也有帮助:-DCMAKE_CXX_COMPILER_LAUNCHER=ccache

如果你不需要测试,禁用它们同样可以节省构建时间(以及磁盘空间)。在你的 cmake 命令行中追加 -DBUILD_TESTING=OFF

分析器

你可以配置 Kdenlive 以嵌入运行时分析工具,例如在 cmake 命令行中追加: -DCMAKE_CXX_COMPILER=/usr/bin/clang++ -DECM_ENABLE_SANITIZERS='address'

这一配置会在执行期间将所有发现的内存处理错误报告到终端。

构建 OpenCV 跟踪模块

MLT/Kdenlive 的跟踪效果依赖一个 OpenCV 的 "contrib" 模块,而发行版通常不提供该模块。 我们在自己的 AppImage 中构建了它,但你可能也想在自己的系统上构建(注意:OpenCV 难编译是出了名的!)。

wget https://github.com/opencv/opencv/archive/4.5.5.tar.gz -O opencv-4.5.5.tar.gz
wget https://github.com/opencv/opencv_contrib/archive/4.5.5.tar.gz -O opencv_contrib-4.5.5.tar.gz
tar xaf opencv-4.5.5.tar.gz
tar xaf opencv_contrib-4.5.5.tar.gz
cd opencv-4.5.5
mkdir build
cd build
# Important: if want to install to the default location
# (ie. you left INSTALL_PREFIX empty in the previous step where we configured it)
# remove -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX from the next command!
cmake .. -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX \
  -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.5.5/modules \
  -DOPENCV_GENERATE_PKGCONFIG=ON -DBUILD_LIST=tracking -DOPENCV_BUILD_3RDPARTY_LIBS=OFF
make install

之后你将不得不重新构建 MLT,并在 cmake 命令行中追加 -DMOD_OPENCV=ON!

构建 frei0r

你可能有兴趣构建最新版本的 frei0r 效果库。因此先获取依赖、克隆仓库,然后构建并安装:

sudo apt build-dep frei0r
git clone https://github.com/dyne/frei0r.git
cd frei0r
mkdir build
cd build
cmake .. -GNinja -DWITHOUT_OPENCV=true -DCMAKE_INSTALL_PREFIX=$INSTALL_PREFIX

在 Docker 中构建

可以在容器内运行上述命令,例如使用全新的 Ubuntu。 请注意,Kdenlive 是一个 GUI 应用程序,因此无法方便地在 Docker 容器内部运行。

# Spin up a Docker container
# The --rm flag removes the container after it is stopped.
docker run -it --rm ubuntu:22.04
 
# Now install the dependencies etc.
# Note that you are root in the container, and sudo neither exists nor works.
apt install …
 
# When you are done, exit
exit

翻译 Kdenlive

Kdenlive 使用 KDE 的国际化(i18n)系统进行翻译。提交或更新翻译请通过官方 KDE 翻译平台 l10n.kde.org (opens in a new tab)。

下面描述的本地翻译工作流仅用于调试目的。当你调试翻译问题,或在代码库中新增/更新了字符串后想验证翻译在本地构建中是否正常工作,它会很有用。

注意:所有应当可翻译的文本都必须使用 KDE 的 i18n 函数之一,如 i18nc()、i18np() 等。关于这些函数的更多信息,请参阅 KI18n 文档 (opens in a new tab)。

前置条件

确保已安装所需工具(extractrc、gettext):

# Arch Linux
sudo pacman -S gettext kde-dev-scripts
 
# Debian/Ubuntu
sudo apt install gettext kde-dev-utils

翻译工作流

  1. 提取字符串(生成包含源代码中所有可翻译字符串的 .pot 文件):bash extract_i18n_strings.sh
  2. 更新现有翻译(更新 .po 文件):msgmerge --update po/fi/kdenlive.po po/kdenlive.pot
  3. 编辑翻译:修改 .po 文件中的 msgstr 条目
  4. 编译翻译(生成 .mo 文件):msgfmt -o po/fi/kdenlive.mo po/fi/kdenlive.po
  5. 测试:运行 Kdenlive(通过 设置 | Configure Language 切换到目标语言)