Как загрузить Render Preset через DaVinci Resolve Python API
LoadRenderPreset, выбор подходящего пресета и безопасная проверка результата перед AddRenderJob
Рабочий пример показывает, как получить список пресетов, выбрать H.265/HEVC или другой подходящий вариант и загрузить его перед настройкой Render Settings.
API
Resolve Scripting API
Язык
Python
Resolve
19–20+
Требуется
Запущенный Resolve
Синтаксис
result = api_method()Параметры
- • Параметры зависят от конкретного метода Resolve Scripting API и показаны в рабочем примере.
Возвращает
Возвращаемое значение нужно проверять перед следующим шагом автоматизации.
import os
import sys
import time
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",
"/opt/BlackmagicDesign/DaVinciResolve/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
def safe_call(obj, name, *args, **kwargs):
try:
fn = getattr(obj, name, None)
if callable(fn):
return fn(*args, **kwargs)
except Exception:
return None
return None
def get_project_and_timeline():
dvr = import_resolve_module()
resolve = dvr.scriptapp("Resolve")
if not resolve:
raise RuntimeError("DaVinci Resolve API недоступен")
project_manager = safe_call(resolve, "GetProjectManager")
project = safe_call(project_manager, "GetCurrentProject") if project_manager else None
if not project:
raise RuntimeError("Нет открытого проекта DaVinci Resolve")
timeline = safe_call(project, "GetCurrentTimeline")
if not timeline:
raise RuntimeError("Нет активного Timeline")
return resolve, project, timeline
def list_presets(project):
return safe_call(project, "GetRenderPresetList") or []
def load_hevc_friendly_preset(project):
presets = list_presets(project)
if not presets:
return None
prefer = ["H.265", "HEVC", "H265", "Web", "YouTube", "MP4", "Custom Export"]
avoid = ("prores", "dnxhr", "intermediate")
for wanted in prefer:
for preset in presets:
low = preset.lower()
if wanted.lower() in low and not any(bad in low for bad in avoid):
if safe_call(project, "LoadRenderPreset", preset):
return preset
for preset in presets:
if not any(bad in preset.lower() for bad in avoid):
if safe_call(project, "LoadRenderPreset", preset):
return preset
for preset in presets:
if safe_call(project, "LoadRenderPreset", preset):
return preset
return None
resolve, project, timeline = get_project_and_timeline()
selected_preset = load_hevc_friendly_preset(project)
print("Loaded preset:", selected_preset or "preset not loaded")
Документация
Что делает пример
Скрипт получает список доступных Render Presets и пытается загрузить пресет, который лучше подходит для финального экспорта в H.265/HEVC. Если такого пресета нет, выбирается первый безопасный вариант без очевидных intermediate-кодеков.
Почему не стоит зашивать одно имя
Набор пресетов зависит от версии Resolve, настроек пользователя и локальной системы. На одной машине может быть YouTube 2160p, на другой — Custom Export, а на третьей пользовательский пресет. Поэтому пример выбирает пресет по группе признаков.
Как использовать дальше
После загрузки пресета можно вызвать SetRenderSettings для точной настройки папки, имени файла, формата, кодека и диапазона рендера. Сам по себе LoadRenderPreset не запускает экспорт.
Разбор примера
Подключение к Resolve
Пример начинает работу с подключения к запущенному DaVinci Resolve через официальный Python-модуль.
Проверка проекта
Перед вызовами Media Pool, Timeline или Render Queue код проверяет наличие открытого проекта.
Вызов метода API
Основной блок выполняет задачу статьи: как загрузить render preset через davinci resolve python api.
Проверка результата
После вызова API результат проверяется, чтобы скрипт не продолжал работу с пустым объектом или не созданной задачей.
Особенности Resolve API
- GetRenderPresetList() может вернуть пустой список, если пресеты недоступны в текущем окружении.
- LoadRenderPreset() возвращает признак успешной загрузки, его нужно проверять.
- После пресета можно переопределить отдельные настройки через SetRenderSettings().
- Не создавайте Render Job до настройки TargetDir и имени файла.
Частые ошибки
Resolve API недоступен
Причина: Приложение не запущено или Python не видит DaVinciResolveScript.
Решение: Запустите Resolve и проверьте путь к Developer/Scripting/Modules.
Метод вернул None или False
Причина: В Resolve нет нужного проекта, Timeline, клипов, preset или доступа к папке.
Решение: Проверьте входные данные и добавьте явную проверку результата после каждого важного вызова API.
Скрипт работает только на одной машине
Причина: Пути к файлам или папкам Resolve зашиты под конкретную систему.
Решение: Вынесите пути в переменные и добавьте стандартные пути Windows, Linux и macOS.
Следующий шаг
Следующий шаг зависит от задачи: импорт медиа, создание Timeline или запуск рендера.
Связанные статьи API
Render
Как получить список Render Presets через DaVinci Resolve Python API
Разбираем безопасный способ получить доступные render presets, выбрать подходящий preset и загрузить его перед созданием Render Job.
Render
Как настроить Render Settings через DaVinci Resolve Python API
Разбираем рабочий шаблон SetRenderSettings для MOV H.265/HEVC с аудио AAC: папка вывода, имя файла, видео, аудио и битрейт.
Render
Как создать Render Job через DaVinci Resolve Python API
Показываем правильный порядок действий: загрузить пресет, задать настройки рендера, выбрать диапазон и только затем добавить задание в Render Queue.

