Как запустить рендер в DaVinci Resolve через Python API
Render Preset, SetRenderSettings, AddRenderJob и StartRendering
Показываем рабочий запуск Render Queue из Python: выбор доступного preset, настройка папки и имени файла, создание render job, запуск свежей задачи и ожидание завершения.
API
Resolve Scripting API
Язык
Python
Resolve
19–20+
Требуется
Запущенный Resolve
Синтаксис
result = api_method()Параметры
- • Параметры зависят от конкретного метода Resolve Scripting API и показаны в рабочем примере.
Возвращает
Возвращаемое значение нужно проверять перед следующим шагом автоматизации.
import os
import sys
from pathlib import Path
def import_resolve_module():
try:
import DaVinciResolveScript as dvr
return dvr
except ImportError:
search_paths = [
os.environ.get("RESOLVE_SCRIPT_API", ""),
os.environ.get("RESOLVE_MODULES", ""),
r"C:\\ProgramData\\Blackmagic Design\\DaVinci Resolve\\Support\\Developer\\Scripting\\Modules",
"/opt/resolve/Developer/Scripting/Modules",
"/Library/Application Support/Blackmagic Design/DaVinci Resolve/Developer/Scripting/Modules",
str(Path.home() / "Library/Application Support/Blackmagic Design/DaVinci Resolve/Developer/Scripting/Modules"),
]
for path in search_paths:
if path and os.path.isdir(path) and path not in sys.path:
sys.path.append(path)
import DaVinciResolveScript as dvr
return dvr
dvr = import_resolve_module()
import time
output_dir = r"D:\\Resolve\\renders"
render_name = "api_render_demo"
render_preset = "YouTube 1080p"
if not os.path.isdir(output_dir):
os.makedirs(output_dir, exist_ok=True)
resolve = dvr.scriptapp("Resolve")
if not resolve:
raise RuntimeError("Resolve API недоступен")
project = resolve.GetProjectManager().GetCurrentProject()
if not project:
raise RuntimeError("Нет открытого проекта")
if not project.GetCurrentTimeline():
raise RuntimeError("Нет активного Timeline")
presets = project.GetRenderPresetList() or []
if render_preset in presets:
project.LoadRenderPreset(render_preset)
elif presets:
project.LoadRenderPreset(presets[0])
project.SetRenderRange("Entire Timeline")
settings = {
"TargetDir": output_dir,
"CustomName": render_name,
"RenderMode": "SingleClip",
"ExportVideo": True,
"ExportAudio": True,
}
project.SetRenderSettings(settings)
job_id = project.AddRenderJob()
if not job_id:
raise RuntimeError("Не удалось создать Render Job")
started = project.StartRendering([job_id]) or project.StartRendering(job_id)
if not started:
started = project.StartRendering()
if not started:
raise RuntimeError("Resolve отказался запускать рендер")
while project.IsRenderingInProgress():
time.sleep(1)
print("Render finished:", job_id)Документация
Как устроен запуск рендера
Скрипт работает с текущим проектом и активным Timeline. Он загружает Render Preset, задаёт диапазон Entire Timeline, передаёт базовые настройки вывода, создаёт Render Job и запускает очередь. Такой сценарий соответствует обычной работе Deliver page, только выполняется из Python.
Почему удобен Render Preset
Полные параметры кодека, контейнера, битрейта и разрешения лучше сохранить в Resolve как preset. Тогда в коде остаются только понятные переменные: папка вывода, имя файла, диапазон и режим рендера. Это меньше ломается между версиями Resolve.
Почему StartRendering вызывается несколькими способами
В разных версиях Resolve встречается разное поведение StartRendering: одни принимают список job id, другие один job id, третьи запускают очередь без аргументов. Пример сначала пытается запустить свежий job адресно и только затем использует общий запуск очереди.
Ожидание результата
Цикл IsRenderingInProgress() нужен, если после экспорта скрипт должен выполнить следующий шаг: проверить файл, скопировать результат, открыть папку или передать ролик в другую систему. Без ожидания Python завершится раньше, чем Resolve закончит рендер.
Разбор примера
Подключение к Resolve
Пример начинает работу с подключения к запущенному DaVinci Resolve через официальный Python-модуль.
Проверка проекта
Перед вызовами Media Pool, Timeline или Render Queue код проверяет наличие открытого проекта.
Вызов метода API
Основной блок выполняет задачу статьи: как запустить рендер в davinci resolve через python api.
Проверка результата
После вызова API результат проверяется, чтобы скрипт не продолжал работу с пустым объектом или не созданной задачей.
Особенности Resolve API
- Render Preset с указанным именем должен существовать в Resolve.
- TargetDir должен быть доступен для записи.
- Перед рендером нужен активный Timeline.
- Если StartRendering вернул False, проверьте Deliver page, preset, путь вывода и очередь рендера.
Частые ошибки
Resolve API недоступен
Причина: Приложение не запущено или Python не видит DaVinciResolveScript.
Решение: Запустите Resolve и проверьте путь к Developer/Scripting/Modules.
Метод вернул None или False
Причина: В Resolve нет нужного проекта, Timeline, клипов, preset или доступа к папке.
Решение: Проверьте входные данные и добавьте явную проверку результата после каждого важного вызова API.
Скрипт работает только на одной машине
Причина: Пути к файлам или папкам Resolve зашиты под конкретную систему.
Решение: Вынесите пути в переменные и добавьте стандартные пути Windows, Linux и macOS.
Следующий шаг
Следующий шаг зависит от задачи: импорт медиа, создание Timeline или запуск рендера.
Связанные статьи API
Проекты
Как получить текущий проект DaVinci Resolve через Python
Показываем рабочий способ получить открытый проект Resolve и активный Timeline. Этот код нужен перед импортом медиа, чтением настроек таймлайна, экспортом аудио и запуском рендера.
Timeline
Как создать Timeline в DaVinci Resolve через Python
Показываем два рабочих варианта: создать пустой Timeline или создать Timeline сразу из импортированных клипов Media Pool.
Timeline
Как получить FPS Timeline через DaVinci Resolve Python API
Рабочий пример читает FPS активного Timeline, корректно приводит строковое значение к float и использует настройки проекта как запасной источник.

