浅谈达芬奇Davinci Resolve的脚本开发

达芬奇是一款专业的视频调色软件。前阵子朋友问我能不能写一个脚本放到达芬奇里面,我就研究并学习了一下达芬奇自带的这套api,本文做一些踩坑的记录。


达芬奇

基本概况

  • 达芬奇版本Davinci Resolve Studio 20,windows系统,由于每个版本的达芬奇的api不一样,因此要时刻留意每个版本内置的文档说明,chatGPT并不能给你准确的代码
  • 脚本使用python3编写,需要自行下载安装python环境,版本3.6.0以上

检查环境

1、 达芬奇必须是Studio版本,非Studio的免费版是无法运行第三方脚本的
2、 必须自行前往python官网下载安装python3.6.0以上版本。虽然官方说也能用2.7.0,但这个版本太老了就不研究了
3、 检查达芬奇的“偏好设置” - “常规” - “外部脚本使用”是否选择了“本地”,或是“网络”,如果选了“无”那么脚本是无法运行的。

达芬奇内置有开发文档。启动达芬奇后,随意新建一个项目,进入项目,在菜单栏“帮助” - “文档” - “开发人员”,打开目录后,进入到Scripting,里面有个README.txt,以及一些代码参考Examples。由于不同版本的达芬奇他的api并不相同,所以请务必参考你当前版本的文档。在github上有些第三方的格式化好的文档以参考,不过鉴于不同的达芬奇代码是不同的,因此还是要和这个readme结合起来看。

配置环境变量

打开windows的“此电脑” - “属性” - “高级系统设置” - “环境变量”,在系统变量中添加3项内容:

RESOLVE_SCRIPT_API="%PROGRAMDATA%\Blackmagic Design\DaVinci Resolve\Support\Developer\Scripting"
RESOLVE_SCRIPT_LIB="C:\Program Files\Blackmagic Design\DaVinci Resolve\fusionscript.dll"  //这一条请替换为你对应的达芬奇安装目录
PYTHONPATH="%PYTHONPATH%;%RESOLVE_SCRIPT_API%\Modules\"

然后打开ptrhon的命令行窗口验证以上环境变量是否生效

import sys
print(sys.path)

如果环境变量确实生效了,那么你可以在窗口中看到有一项是:
C:\ProgramData\Blackmagic Design\DaVinci Resolve\Support\Developer\Scripting\Modules
如果这里显示的是:
C:\Python312\%RESOLVE_SCRIPT_API%\Modules
那么你可以把RESOLVE_SCRIPT_API直接写死成:
C:\ProgramData\Blackmagic Design\DaVinci Resolve\Support\Developer\Scripting\Modules

这里的目的是可以让python脚本正确引用C:\ProgramData\Blackmagic Design\DaVinci Resolve\Support\Developer\Scripting\Modules\DaVinciResolveScript.py这个模块,是操作达芬奇的基础。

测试代码

达芬奇的脚本控制台在菜单栏“工作区” - “控制台”


1.jpg

打开后可以看到一个窗口:


2.jpg

左上角的cls按钮是清空控制台文本,中间4个是切换代码展示的按钮,最后面的3个是切换lua和python语言的按钮
点击上面的py3按钮切换到python3的语言环境,然后你就可以开始测试你的代码了。
输入以下代码:

import DaVinciResolveScript as dvr_script
pprint.pp(dir(dvr_script))

你会看到一些输出


3.jpg

这个控制台不是传统的cmd窗口。

  • 他已经内置了达芬奇的一些模块,比如resolve、fusion等,不需要手动引入;如果你输入print(dir()),你就可以看到这些已经内置的模块。
  • 这些内置模块中有一个是pprint(pretty print)他可以让你的输出更容易阅读,就像上面我打印dvr_script时候一样。
  • 这里要查看输出的东西,必须手动print出来才行。直接输入dir()的话,控制台是不会显示东西的。
  • 已经内置的模块不需要重复导入。在很多第三方脚本的教程中,会在代码的前几行要求引入resolve,如果你真的在控制台运行了
resolve = dvr_script.scriptapp("Resolve")

此时你print(resolve)的话,会发现resolve变成的None,被置空了。由于resolve是操作达芬奇的最核心的模块,因此后续的脚本代码基本就没法运行了。此时你只能重启达芬奇才行。


4.jpg

编写代码

  • 达芬奇脚本语言是lua、python。
  • 你可以根据文档用代码来简单操作达芬奇,比如创建一个项目、创建时间线、导入素材、把素材根据要求放到时间线上,并通过代码来做一些剪辑操作。非常适合大工作量的重复操作。虽然运行脚本有一定的延迟,但好在不用人工介入。
  • 达芬奇自带有当前版本的文档,但是非常不好阅读。
    因此有人将文档做了格式化:https://github.com/leoweyr/DaVinci_Resolve_API_Docs/blob/main/scripting_API/v18/scripting_API-v18-zh_cn.md
    但是还是要注意,很多api其实并不相同,所以需要尽量以内置文档为准。

运行脚本

在资源管理器打开 %PROGRAMDATA%\Blackmagic Design\DaVinci Resolve\Fusion\Scripts
这个文件夹是每次达芬奇启动将会扫描这个文件夹,并加载其中的脚本。脚本里的代码就是上面控制台中运行的这些代码,根据你的需求编写好的一个完整文件。
如果你把你的脚本放在Utility文件夹,那么在达芬奇任意界面中都会显示这个脚本;你可以放在Edit, Color 或是 Deliver让这个脚本在不同的界面(剪辑、调色、交付)中显示出来。
这里我把two-two.py放到了Utility文件夹,重启达芬奇,在菜单栏“工作区” - “脚本”中就可以查看到你的脚本了。


5.jpg

点击这个脚本就可以运行,如果报错或者有输出,可以到控制台查看。
这里你可以用以下的代码来简单测试一下你的脚本

    import DaVinciResolveScript as dvr_script  
    resolve = dvr_script.scriptapp("Resolve")
    fusion = resolve.Fusion()
    projectManager = resolve.GetProjectManager()
    projectManager.CreateProject("Hello World")

以上代码就是创建了一个新的项目Hello World,如果运行一切顺利,那么你就可以根据文档和示例来编写一系列脚本了。

注意点

1、脚本中需要手动导入达芬奇模块

不同于控制台运行代码,诸如resolve、fusion这些,在脚本中都需要手动导入

resolve = dvr_script.scriptapp("Resolve")

2、脚本运行可能会出现这种情况:

6.jpg

进一步debug会发现,resolve是None。
出现这个问题的原因是,达芬奇的脚本工具是通过在本机启动了一个服务器来和resolve交互的,当这个服务器端口被占用时,就会导致无法获取到resolve。因此同一个脚本在不同的电脑上有不同的表现,有的可以运行有的又不能运行。而我们又无法得知达芬奇使用了哪个端口,这非常坑,有人甚至通过重装系统来绕开而非解决这个问题。这种情况下,只能将你的代码放到控制台手动运行(记得去掉诸如resolve = dvr_script.scriptapp("Resolve")的代码)
关于该问题的相关讨论:https://forum.blackmagicdesign.com/viewtopic.php?f=21&t=139726

参考文档

https://wiki.dvresolve.com/developer-docs/scripting-api
https://github.com/leoweyr/DaVinci_Resolve_API_Docs/blob/main/scripting_API/v18/scripting_API-v18-zh_cn.md
https://weijer.github.io/davinci-resolve-api/#/
https://www.youtube.com/watch?v=5lyzNKqzYlY&t=558s
https://www.youtube.com/watch?v=p6IeeWr3FOc

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容