后期悲

剧情高考议论文,念念不忘三段式。
拍摄调光均「一流」,竖屏放大再裁切。

本文环境:Arch Linux (x86_64)、NVIDIA 显卡、AUR helper (paru)。

起因

学院办班级微电影大赛,负责后期。实觉 Kdenlive 之不足,转投 DaVinci Resolve Studio(下称 DRS)。

愿 Kdenlive 越做越好;也希望哪天有money买Studio授权 (2000 CNY+)。

一、安装

1.1 AUR 包选择

包名 说明
davinci-resolve-studio 上游原始归档
davinci-resolve-studio-aacfix 构建期注入 AAC 解码支持,推荐
davinci-resolve 免费版

BD(Blackmagic Design,DRS 背后的公司)给 Linux 版捆绑的 FFmpeg 库在编译时砍掉了 AAC 解码器,导入 AAC 音轨的素材会没声音。-aacfix 变体在构建期做两件事:

  • 用 e9patch 编译跳板(trampoline)并拼接进 bin/resolve;
  • 把捆绑的 4 个 FFmpeg 6.0.1 动态库替换成重编译的、启用 AAC 的 LGPL 构建。

代价是它的 makedepends 里带着 git、nasm、python-capstone、python-pyelftools,构建会明显偏慢(要现编 FFmpeg,还要给 700 MB 的二进制打补丁),别以为卡死了。

1
2
paru -S davinci-resolve-studio-aacfix
# 或 yay -S davinci-resolve-studio-aacfix

1.2 正常の失败

1
2
3
4
5
6
7
8
9
fetching devel info...
==> Making package: davinci-resolve-studio-aacfix 21.1.1-1 (Thu 08 Oct 2026 10:22:52 PM CST)
==> Retrieving sources...
-> Downloading DaVinci_Resolve_Studio_21.1.1_Linux.zip...
curl: (3) URL rejected: Bad file:// URL
==> ERROR: Failure while downloading file://DaVinci_Resolve_Studio_21.1.1_Linux.zip
Aborting...
error: failed to download sources for 'davinci-resolve-studio-aacfix-21.1.1-1'
error: packages failed to build: davinci-resolve-studio-aacfix-21.1.1-1

看 PKGBUILD 的 source 就明白了:

1
source=("file://DaVinci_Resolve_Studio_${pkgver}_Linux.zip" ...)

file:// 意为”从本地取”, BD 的下载链接要求填表、带会话校验,curl 抓不到,所以这一步只能人来补。

1.3 手动下载安装包

  1. 打开 DRS 下载页,点下载按钮。
  2. 选 DaVinci Resolve Studio 21 底下的 Linux。
  3. 弹出个人信息表单 —— 此处 BD 不做任何校验,随意填。
  4. 拿到 DaVinci_Resolve_Studio_21.1.1_Linux.zip(约 10 GB;装好后 /opt/resolve 会占约 19 GB)。

1.4 构建安装

paru 已经失败过了,PKGBUILD 就在缓存里,把 zip 丢进去接着构建:

1
2
3
4
5
cd ~/.cache/paru/clone/davinci-resolve-studio-aacfix
# yay 用户对应 ~/.cache/yay/ 下的同名目录

mv ~/Downloads/DaVinci_Resolve_Studio_21.1.1_Linux.zip ./
makepkg -si

不留缓存,手动 clone 更干净:

1
2
3
4
git clone https://aur.archlinux.org/davinci-resolve-studio-aacfix.git
cd davinci-resolve-studio-aacfix
mv ~/Downloads/DaVinci_Resolve_Studio_21.1.1_Linux.zip ./
makepkg -si

若报 sha256sums 校验失败,多半是 BD 换了包体。重新算一遍校验和再构建:

1
updpkgsums && makepkg -si

1.5 OpenCL:混合显卡机型注意

-aacfix 的依赖里有个虚拟包 opencl-driver,它自己不提供实现,得看你用哪块卡:

显卡 提供 opencl-driver 的包
NVIDIA opencl-nvidia
AMD rocm-opencl-runtime
Intel intel-compute-runtime

不装对应的那一个,DRS 启动时会直接不认 GPU。

二、破解

2.1 好习惯,先备份

1
sudo cp -a /opt/resolve/bin/resolve /opt/resolve/bin/resolve.bak

perl -pi 是就地重写:它按原 inode 打开并截断重写。712 MB 的文件在中途断电或 Ctrl-C,你手上就是一个废文件。备份不是可选项。

2.2 三条二进制补丁

1
2
3
4
5
6
7
8
# 补丁 1:把条件跳转改成无条件跳转,短路掉校验失败分支
sudo perl -pi -e 's/\x03\x00\x89\x45\xFC\x83\x7D\xFC\x00\x74\x11\x48\x8B\x45\xC8\x8B/\x03\x00\x89\x45\xFC\x83\x7D\xFC\x00\xEB\x11\x48\x8B\x45\xC8\x8B/g' /opt/resolve/bin/resolve

# 补丁 2:同一处的更长上下文匹配(补丁 1 生效后它不会再命中,留着当保险)
sudo perl -pi -e 's/\x74\x11\x48\x8B\x45\xC8\x8B\x55\xFC\x89\x50\x58\xB8\x00\x00\x00/\xEB\x11\x48\x8B\x45\xC8\x8B\x55\xFC\x89\x50\x58\xB8\x00\x00\x00/g' /opt/resolve/bin/resolve

# 补丁 3:反转一个告警分支的条件
sudo perl -0777 -pi -e 's/(\x40\x84\xED)\x74(.\xBF\x16\x00\x00\x00\xBE.\x01\x00\x00\xE8)/$1\x75$2/g' /opt/resolve/bin/resolve

对应的反汇编(21.1.1,实际取自本机二进制):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
; 补丁 1 / 2 —— 0x74 是 je,0xEB 是 jmp
83 7d fc 00 cmp dword [rbp-0x4], 0
74 11 je +0x11 ; 原:条件成立 → 跳过下面这段
eb 11 jmp +0x11 ; 改后:无条件跳过
48 8b 45 c8 mov rax, [rbp-0x38]
8b 55 fc mov edx, [rbp-0x4]
89 50 58 mov [rax+0x58], edx
b8 00 00 00 00 mov eax, 0

; 补丁 3 —— 0x74 是 je,0x75 是 jne,条件方向反转
40 84 ed test bpl, bpl
74 19 je +0x19 ; 原
75 19 jne +0x19 ; 改后
bf 16 00 00 00 mov edi, 0x16
be 3f 01 00 00 mov esi, 0x13f
e8 37 dc ff ff call ...
b8 ff ff ff ff mov eax, -1 ; 报错并返回 -1
e9 2c 01 00 00 jmp ...

三条补丁都是幂等的:改完的字节不再匹配原模式,重复执行什么也不会发生。所以”我不确定打没打过”的时候,直接再跑一遍即可。

补丁 3 用了 -0777,Perl 会把整个 712 MB 二进制 slurp 进内存再回写。机器内存吃紧的话先关掉别的程序。

2.3 放 license 文件

1
2
3
4
5
6
7
sudo mkdir -p /opt/resolve/.license

printf '%s\n' \
'LICENSE blackmagic davinciresolvestudio 999999 permanent uncounted' \
' hostid=ANY issuer=CGP customer=CGP issued=28-dec-2023' \
' akey=0000-0000-0000-0000 _ck=00 sig="00"' \
| sudo tee /opt/resolve/.license/blackmagic.lic > /dev/null

这是 FlexNet(FLEXlm)风格的授权文本,permanent uncounted 即永久、不限次数。

第 2、3 行行首那个空格是格式的一部分,顺手删掉就废了。整个文件应当是 164 字节:

1
2
wc -c /opt/resolve/.license/blackmagic.lic   # 164
stat -c '%a %U:%G' /opt/resolve/.license/blackmagic.lic # 644 root:root

2.4 激活

命令行没报错、没输出异常,就算打完了。启动 DRS,若仍弹出激活对话框,连续按 0 回车即可通过 —— 此时输入什么都会被接受,校验分支已经被短路了。

三、Wayland 与缩放修复

DRS 走 Qt5,在 Wayland 会话下常见启动失败或界面缩放诡异。强制它跑 X11 后端:

1
2
3
4
cp /usr/share/applications/DaVinciResolve.desktop ~/.local/share/applications/
sed -i 's|^Exec=.*|Exec=env QT_QPA_PLATFORM=xcb GDK_BACKEND=x11 /opt/resolve/bin/resolve %u|' \
~/.local/share/applications/DaVinciResolve.desktop
update-desktop-database ~/.local/share/applications 2>/dev/null || true

~/.local/share/applications/ 里的同名 desktop 文件优先级高于 /usr/share/applications/,所以不用动系统文件,升级也不会被覆盖。

混合显卡机型想让 DRS 固定跑独显(下面以 NVIDIA PRIME 为例),把 Exec 再补两个环境变量:

1
Exec=env __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia QT_QPA_PLATFORM=xcb GDK_BACKEND=x11 /opt/resolve/bin/resolve %u

前提是你确认它默认确实跑在了核显上,否则别乱加。

四、Q&A

Q1:交付页面无法 N 卡加速导出

装 davinci-ffmpeg-encoder-plugin:

1
paru -S davinci-ffmpeg-encoder-plugin

它是 DRS 的 IOPlugin,安装到 /opt/resolve/IOPlugins/ffmpeg_encoder_plugin.dvcp.bundle/Contents/Linux-x86-64/。重启 Resolve 后在交付页把编解码器设为 H.264 / H.265 / AV1,类型里就会出现带 ffmpeg 的 NVENC 选项。

Q2:升级或重装后失效

pacman 升级会覆盖 /opt/resolve/bin/resolve,三条补丁需重打一遍。/opt/resolve/.license/blackmagic.lic 一般会被保留(包里的 .license 是个空目录)。

Q3:想彻底还原

1
2
3
4
5
# 只还二进制
sudo cp -a /opt/resolve/bin/resolve.bak /opt/resolve/bin/resolve

# 或者整包回炉(会重新构建,耗时)
paru -S davinci-resolve-studio-aacfix

五、题外话

Davinci Resolve Studio 是一次买断的专业视频软件,比 Adobe 的订阅制划算得多。经济条件允许的话,还是建议支持正版。

链接汇总