Как определить разрешение исходников на V1 через DaVinci Resolve API
GetMediaPoolItem, GetClipProperty и выбор максимального разрешения клипов основной видеодорожки
Показываем рабочий способ пройти по клипам V1, получить MediaPoolItem, прочитать свойства клипа и определить исходное разрешение для настройки проекта или рендера.
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",
"/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):
try:
fn = getattr(obj, name, None)
if callable(fn):
return fn(*args)
except Exception:
return None
return None
dvr = import_resolve_module()
resolve = dvr.scriptapp("Resolve")
if not resolve:
raise RuntimeError("DaVinci Resolve API недоступен")
project = resolve.GetProjectManager().GetCurrentProject()
if not project:
raise RuntimeError("Нет открытого проекта DaVinci Resolve")
timeline = project.GetCurrentTimeline()
if not timeline:
raise RuntimeError("Нет активного Timeline")
import re
def parse_resolution_value(value):
if value is None:
return None
match = re.search(r"(\\d{3,5})\\s*[xX×]\\s*(\\d{3,5})", str(value))
if not match:
return None
width = int(match.group(1))
height = int(match.group(2))
if width < 320 or height < 240:
return None
return width, height
def clip_resolution_from_media_pool_item(media_pool_item):
if not media_pool_item:
return None
keys = ["Resolution", "Video Resolution", "Frame Resolution", "Image Resolution", "Format"]
for key in keys:
resolution = parse_resolution_value(safe_call(media_pool_item, "GetClipProperty", key))
if resolution:
return resolution
props = safe_call(media_pool_item, "GetClipProperty") or {}
if isinstance(props, dict):
for value in props.values():
resolution = parse_resolution_value(value)
if resolution:
return resolution
return None
def detect_v1_source_resolution(timeline):
items = safe_call(timeline, "GetItemListInTrack", "video", 1) or []
candidates = []
for item in items:
media_pool_item = safe_call(item, "GetMediaPoolItem")
resolution = clip_resolution_from_media_pool_item(media_pool_item)
if resolution:
candidates.append(resolution)
if not candidates:
return None
return max(candidates, key=lambda size: size[0] * size[1])
resolution = detect_v1_source_resolution(timeline)
if resolution:
width, height = resolution
project.SetRenderSettings({"ResolutionWidth": width, "ResolutionHeight": height})
print("V1 source resolution:", width, "x", height)
else:
print("Не удалось определить разрешение клипов V1")Документация
Что читает скрипт
TimelineItem сам по себе не всегда содержит все свойства исходника. Поэтому пример получает связанный MediaPoolItem и читает Clip Property. Resolve может отдавать разрешение в разных полях, поэтому код проверяет несколько распространенных ключей.
Почему выбирается максимум
Если на V1 смешаны 1080p и 4K клипы, финальный рендер часто лучше настраивать по максимальному исходному разрешению. Это защищает от случайной потери качества при автоматической подготовке Deliver page.
Где применять
Определение разрешения полезно перед SetRenderSettings или SetSetting timelineResolutionWidth/timelineResolutionHeight. Это техническая подготовка проекта перед экспортом, которая помогает избежать рендера с неверным размером кадра.
Разбор примера
Подключение к Resolve
Пример начинает работу с подключения к запущенному DaVinci Resolve через официальный Python-модуль.
Проверка проекта
Перед вызовами Media Pool, Timeline или Render Queue код проверяет наличие открытого проекта.
Вызов метода API
Основной блок выполняет задачу статьи: как определить разрешение исходников на v1 через davinci resolve api.
Проверка результата
После вызова API результат проверяется, чтобы скрипт не продолжал работу с пустым объектом или не созданной задачей.
Особенности Resolve API
- Названия ключей GetClipProperty могут отличаться между версиями Resolve.
- Если Resolve не отдал разрешение, скрипт ничего не меняет.
- SetRenderSettings с ResolutionWidth/ResolutionHeight может зависеть от текущего формата рендера.
- Проверка идет по V1, потому что это типовая основная видеодорожка.
Частые ошибки
Resolve API недоступен
Причина: Приложение не запущено или Python не видит DaVinciResolveScript.
Решение: Запустите Resolve и проверьте путь к Developer/Scripting/Modules.
Метод вернул None или False
Причина: В Resolve нет нужного проекта, Timeline, клипов, preset или доступа к папке.
Решение: Проверьте входные данные и добавьте явную проверку результата после каждого важного вызова API.
Скрипт работает только на одной машине
Причина: Пути к файлам или папкам Resolve зашиты под конкретную систему.
Решение: Вынесите пути в переменные и добавьте стандартные пути Windows, Linux и macOS.
Следующий шаг
Следующий шаг зависит от задачи: импорт медиа, создание Timeline или запуск рендера.
Связанные статьи API
Render
Как задать диапазон рендера по клипам V1 через DaVinci Resolve API
Разбираем рабочий способ найти общий диапазон клипов на видеодорожке V1, поставить In/Out Points и переключить Render Range на In/Out Range.
Render
Как настроить MOV H.265 рендер через DaVinci Resolve API
Показываем рабочий блок настройки MOV + H.265/HEVC: папка вывода, имя файла, видео, аудио AAC, bitrate и выбор подходящего названия кодека.
Render
Как запустить рендер в DaVinci Resolve через Python API
Показываем рабочий запуск Render Queue из Python: выбор доступного preset, настройка папки и имени файла, создание render job, запуск свежей задачи и ожидание завершения.

