SCRIPTING / AUTOMATION
DaVinci Resolve API
Один скрипт.
Меньше рутины.
Превратите повторяющиеся монтажные задачи в Python-скрипты. Подключение к Resolve, работа с медиа и таймлайнами, управление рендером — по одному понятному шагу.
Понять объект. Проверить результат. Автоматизировать задачу.
manager = resolve.GetProjectManager()
project = manager.GetCurrentProject()
if project:
print(project.GetName())
Начать с текущего проекта.
Получите Project Manager, затем открытый проект. Проверьте результат, прежде чем обращаться к медиа, таймлайну или настройкам рендера.
Модель меняет объяснение, а не ваш проект. Без подключения к Resolve и выполнения Python.
Написать скрипт.
Или подключить ассистента.
Разные способы поставить задачу — с одной необходимостью понимать и проверять результат.
Повторяемый скрипт
Объекты, методы и примеры для точной автоматизации.
Перейти в библиотекуАссистент с инструментами
Разобраться в MCP, подключить клиент и проверить первый запрос без правок.
MCP в DaVinci ResolveБИБЛИОТЕКА ПРАКТИЧЕСКИХ ЗАДАЧ
От метода
к рабочему скрипту.
Ищите по задаче, объекту или названию метода. Подключение, проекты, Media Pool, структура таймлайна, аудио и рендер — с кодом и объяснениями в статьях.
Показано материалов50 / 50
Как подключиться к DaVinci Resolve через Python API
Настройка внешнего Python для Resolve Studio: официальный модуль, пути Windows/macOS/Linux, проверка продукта и версии. Без открытия проекта, скрытых повторов и установки случайного пакета из pip.
scriptapp("Resolve")GetProductName()GetVersionString()Как проверить доступность Resolve Scripting API
Диагностика Python, официального модуля, объекта Resolve и текущего проекта. Разделяем ошибку загрузки и подключения; формируем локальный JSON-отчёт без имён проектов по умолчанию.
sys.executable / pointer_bitsscriptapp("Resolve")GetProjectManager()Как получить текущий проект DaVinci Resolve через Python
Получаем Project Manager, проверяем текущий проект по имени и ID, читаем число таймлайнов и активный Timeline. Пустой таймлайн допускается; автоматическая загрузка и создание проекта исключены.
GetProjectManager()GetCurrentProject()GetName() / GetUniqueId()Как создать проект DaVinci Resolve через Python API
Контролируемый CreateProject в локальной Project Library: проверка имени, библиотеки и папки, отдельный --apply, остановка при открытом проекте и проверка сохранения. Без скрытого LoadProject и автоматического удаления.
GetCurrentDatabase()GetCurrentFolder() / GetProjectListInCurrentFolder()CreateProject(name)Импорт файлов в Media Pool через Python API
ImportMedia без скрытых пропусков: абсолютные пути, выбранная папка, план, проверка результата и частичного импорта. Полный Python-пример для Resolve Studio.
GetMediaPool()GetCurrentFolder()ImportMedia([paths])Импорт папки и добавление клипов на Timeline через API
Управляемая сборка папки в Resolve: фильтр расширений, естественный порядок имён, отдельные import/append и сверка пустого тестового таймлайна. Python-код и проверки.
ImportMedia([paths])GetClipList()AppendToTimeline([items])Как создать таймлайн через Python API
CreateEmptyTimeline и CreateTimelineFromClips: когда нужен каждый метод, как подготовить план и проверить созданный объект. Исполняемый пример создаёт только пустой тестовый таймлайн после явного подтверждения.
CreateEmptyTimeline(name)CreateTimelineFromClips(name, [clips])GetTimelineByIndex(index)Как прочитать FPS таймлайна через API
Читаем timelineFrameRate у Timeline и Project раздельно, сохраняем исходную строку, разбираем дробные значения и пометку DF. Не подставляем частоту при ошибке и не угадываем временную базу.
GetSetting("timelineFrameRate")GetSetting("timelineFrameRate")parse_rate(raw)Как перебрать клипы таймлайна через Python
Последовательный обход video, audio и subtitle без пропуска пустых состояний и ошибок. Индексы дорожек, ID вхождений, дробные границы и проверка согласованности двух чтений.
GetTrackCount(trackType)GetItemListInTrack(trackType, index)GetUniqueId()Как управлять очередью рендера через Python
Разбираем запуск рендера по точному JobId: чтение очереди, создание, запуск, ожидание и проверка файла. Без запасного запуска всех заданий и скрытой очистки.
GetRenderJobList()StartRendering([job_id], False)GetRenderJobStatus(job_id)Как перевести кадры в таймкод
Кадры → HH:MM:SS:FF или HH:MM:SS;FF: точная частота, NDF/DF, начало таймлайна и обратная проверка. Полный Python-пример и интерактивный калькулятор без подключения к Resolve.
Clock(rate, mode)frames_to_timecode(frames, clock)offset_to_timecode(offset, start, clock)Как перевести таймкод в кадры
Строгий разбор NDF/DF: допустимые поля, пропущенные номера, целые кадры и смещение относительно начала таймлайна. Без float, подстановки 0 и угадывания перехода через полночь.
re.fullmatch(pattern, timecode)timecode_to_frames(tc, clock)timecode_to_offset(tc, start, clock)Как переместить playhead через Python API
SetCurrentTimecode без запасных методов: план перемещения, offset от начала, проверка проекта и таймлайна, явный --apply и сверка результата. Поддержка NDF/DF в пределах выбранного timebase.
GetCurrentPage()GetCurrentTimecode()SetCurrentTimecode(timecode)Как разблокировать дорожку Timeline через Python
Точная разблокировка одной дорожки Resolve: тип, индекс, план и проверка результата. Без массового включения аудио и видео и без скрытых повторов.
GetTrackCount(trackType)GetIsTrackLocked(trackType, index)GetIsTrackEnabled(trackType, index)Как получить список Render Presets
Читаем точные имена пресетов вывода через GetRenderPresetList: пустой список, ошибка и неоднозначность — разные результаты. Без изменения Deliver и без зависимости от открытого таймлайна.
GetRenderPresetList()GetUniqueId()list_presets(resolve, project_id)Как очистить Render Queue без удаления чужих заданий
Выборочная очистка завершённых, ошибочных и отменённых Render Jobs по явным ID. Предварительный план, проверка соседних записей и остановка при частичном исходе.
GetRenderJobList()GetRenderJobStatus(job_id)DeleteRenderJob(job_id)Диапазон рендера по клипам V1
Получаем границы включённых клипов V1, отдельно считаем промежутки и переводим диапазон в настройки Deliver. Без очистки очереди, смены таймкода и выдуманных методов.
GetItemListInTrackGetStartGetStartFrameКак прочитать разрешение исходников на V1
Обход V1 с точными ID, сырым свойством Resolution и явными неизвестными значениями. Смешанные размеры, отключённые клипы и генераторы не превращаются в случайно выбранное разрешение рендера.
GetItemListInTrack("video", 1)GetMediaPoolItem()GetClipProperty("Resolution")Экспорт аудио таймлайна в WAV
Подготовим audio-only экспорт через фактический каталог WAV-кодеков. Разберём частоту, битность, каналы и проверку файла, не удаляя чужие задания из очереди.
GetAudioRenderFormatsGetAudioRenderCodecsSetRenderSettingsКак удалить точный клип с Timeline через API
Удаление клипа в Resolve по ID вхождения: проверка связей, запрет скрытой разблокировки и явный non-ripple. План, один вызов и сравнение структуры.
GetUniqueId()GetLinkedItems()GetType()AppendToTimeline: добавление клипов через Python API
Как добавить существующие клипы в Timeline: объекты и ID, порядок, режим плана, проверка результата. Разбор clipInfo, mediaType и границ кадров без догадок.
AppendToTimeline([MediaPoolItem, ...])AppendToTimeline([{clipInfo}, ...])GetItemListInTrack(type, index)Как получить стартовый кадр таймлайна
GetStartFrame: чтение начала таймлайна, перевод абсолютной координаты в offset и независимая проверка стартовой метки. Без GetStart на другом объекте, усечения float и fallback 0.
GetStartFrame()GetEndFrame()GetStartTimecode()Как прочитать стартовый таймкод таймлайна
GetStartTimecode без угадывания timelineStartTimecode: исходная метка, FPS и start_frame раздельно. Необязательный строгий разбор NDF/DF с явной частотой и без изменения начала проекта.
GetStartTimecode()GetSetting("timelineFrameRate")GetStartFrame()Разрез клипа через Python: границы Resolve API
Что доступно для split в Resolve API 21.1: точный выбор клипа, план двух интервалов и проверка документации. Без скрытых горячих клавиш и выдуманного SplitClip.
GetStart(True), GetEnd(True)GetDuration(True)GetLeftOffset(True), GetRightOffset(True)Как собрать карту клипов таймлайна
Собираем проект, таймлайн, дорожки и вхождения в версионированную карту. Сохраняем пустые дорожки, сырые границы и состояния enabled; проверяем повторное чтение и явно показываем неполные поля.
GetTrackCount(trackType)GetItemListInTrack(trackType, index)GetStart(True) / GetEnd(True) / GetDuration(True)Обрезка TimelineItem: точный план и границы API
План укорочения клипа в Resolve: целые кадры, исключительная правая граница, handles и отличие от source In/Out. Без неподтверждённых SetStart и SetEnd.
GetStart(True), GetEnd(True)GetDuration(True)GetLeftOffset(True), GetRightOffset(True)Рендер всего таймлайна через API
Выбираем всю длину через SelectAllFrames, сохраняем монтажные метки и отделяем подготовку от запуска. Проверяем поздние клипы, звук, режим Single clip и готовый результат.
GetCurrentRenderModeSetRenderSettingsAddRenderJobMOV и H.265: выбрать реальные параметры API
Узнаём доступные форматы и кодеки Resolve, выбираем точный H.265 ID для MOV и сверяем текущую пару. Без перебора псевдонимов, скрытой смены режима и автоматического создания Render Job.
GetRenderFormats()GetRenderCodecs("mov")SetCurrentRenderFormatAndCodec(format, codec)Разрешение по V1: проект или рендер
Выбираем конкретный размер из прочитанной V1 и применяем его отдельно к выводу или настройкам проекта. Без автоматического максимума, частичного «успеха» и одновременной смены двух областей.
SetRenderSettings({"FormatWidth": w, "FormatHeight": h})SetSettings({"timelineResolutionWidth": str(w), "timelineResolutionHeight": str(h)})GetSettings()GetClipProperty: свойства исходника через Python API
Получение свойств Media Pool без обязательного Timeline: полный словарь, ID, FPS без округления, ошибки отдельных элементов и явно ограниченный JSON-отчёт.
GetClipList()GetClipProperty()GetClipProperty(propertyName)Как загрузить один точный Render Preset
Явная загрузка одного пресета через LoadRenderPreset: точное имя, актуальный каталог, план и отдельная проверка Deliver. Без выбора по подстроке, перебора альтернатив и заявления о полной проверке по одному True.
GetRenderPresetList()LoadRenderPreset(presetName)GetCurrentRenderFormatAndCodec() / GetCurrentRenderMode()Render Settings: точные ключи и проверяемый запрос
Подготовка SetRenderSettings через ограниченный JSON: правильные ключи, строгие типы, существующая папка и просмотр плана. Без неизвестных полей, создания каталогов, скрытой смены кодека и запуска рендера.
SetRenderSettings(settings)FormatWidth / FormatHeightTargetDir / CustomNameКак создать Render Job через Python API
Один AddRenderJob из вручную проверенных настроек Deliver: предварительный план, точный таймлайн, сохранение JobId и проверка изменения очереди без автоматического запуска.
GetCurrentTimeline()AddRenderJob()GetRenderJobList()Как запустить один Render Job через Python
Запускаем одно существующее локальное задание Ready через StartRendering([job_id], False). Проверяем цель и очередь; принятый запуск отделяем от готового файла.
GetRenderJobStatus(job_id)IsRenderingInProgress()StartRendering([job_id], False)Как прочитать статус Render Job через Python
GetRenderJobStatus для существующего JobId: различаем Ready, Rendering, Complete, ошибку, отмену и неизвестность. Процент и общий флаг активности не подменяют результат задания.
GetRenderJobStatus(job_id)IsRenderingInProgress()Как дождаться завершения рендера через Python
Наблюдаем один JobId с монотонным временем, интервалом и лимитом опросов. Тайм-аут, отмена, ошибка, пропавшее задание и Complete получают разные результаты.
GetRenderJobStatus(job_id)Как остановить рендер через Python API
Один StopRendering с явно подтверждённой общей областью. Проверяем проект и активные задания, не принимаем None за неуспех и не обещаем откат файлов.
StopRendering()IsRenderingInProgress()GetRenderJobStatus(job_id)Как удалить один Render Job из очереди
Один DeleteRenderJob по точному ID: свободная очередь, план, проверка исчезновения цели и сохранения соседей. Без предварительной остановки и перебора типов аргумента.
DeleteRenderJob(job_id)GetRenderJobList()IsRenderingInProgress()In/Out Range для рендера через API
Задаём явный диапазон [начало, конец), учитываем ненулевую базу и включающий MarkOut. Никакого fallback FPS, преобразования ошибки в ноль или скрытого изменения монтажных меток.
GetStartFrameGetMarkInOutSetRenderSettingsПолный пайплайн рендера через Python
Собираем предыдущие методы в управляемый процесс с отдельными контрольными точками. Каждая команда делает один этап; неизвестный исход не запускает весь пайплайн повторно.
SetRenderSettingsAddRenderJobStartRenderingКоличество аудиодорожек через Resolve API
GetTrackCount для аудио: пустые и отключённые дорожки, индексы, форматы и повторная сверка. Без подмены ошибки нулём и смешения дорожек с каналами.
GetTrackCount("audio")GetTrackName("audio", index)GetTrackSubType("audio", index)Как добавить недостающую аудиодорожку
AddTrack для аудио: существующий индекс без изменений, явный mono/stereo/многоканальный формат и только одна следующая дорожка. План, подтверждение и сверка.
GetTrackCount("audio")AddTrack("audio", "stereo")GetItemListInTrack("audio", n + 1)Добавить аудиофайл на таймлайн через API
Разделяем импорт и монтажную правку, задаём точный MediaPoolItem, дорожку и recordFrame. Без автосоздания дорожек, подмены каналов и предположения, что таймлайн начинается с нуля.
ImportMediaAppendToTimelineGetTrackSubTypeImportMedia: сопоставление клипов по пути
Надёжная карта файлов и MediaPoolItem: без lower(), zip по ответу и подстановки по имени. Явные коллизии, частичный импорт и отдельный read-existing режим.
ImportMedia([paths])GetClipProperty()Как перевести секунды в кадры таймлайна
Секунды → offset → координата API: Fraction, 24000/1001 и 30000/1001, exact/floor/ceil/nearest, ошибка округления и необязательная привязка к открытому Timeline. Отрицательные значения не обнуляются.
Fraction(seconds_text)seconds_to_frames(seconds, clock, rounding)seconds_at_timeline(resolve, ...)Как узнать дорожку конкретного клипа
Используем GetTrackTypeAndIndex(), проверяем диапазон индекса через обход таймлайна и сверяем ответ с местом получения объекта. Без выдуманных GetTrackIndex или подмены MediaPoolItem.
GetTrackTypeAndIndex()GetTrackCount(trackType)GetItemListInTrack(trackType, index)Путь исходного файла у TimelineItem через Python API
Как прочитать File Path у клипов выбранной дорожки: TimelineItem, MediaPoolItem, пустые и отсутствующие пути, offline media и необязательная проверка файла.
GetTrackCount(trackType)GetItemListInTrack(type, index)GetMediaPoolItem()Как добавить недостающую видеодорожку
AddTrack для видео: как проверить V-индекс и добавить одну следующую дорожку без импорта, разблокировки, перестановки и бесконечного цикла ensure.
GetTrackCount("video")AddTrack("video")GetItemListInTrack("video", n + 1)Как экспортировать карту таймлайна в JSON
Версионированная схема, UTF-8, проверка полноты, запрет перезаписи и чтение записанных байтов. Разделяем отчёт о структуре и настоящий резервный формат монтажа.
collect_map(resolve)json.dumps(..., allow_nan=False)Path.open("xb")Как рассчитать участки V1 вне перекрытий V2
Вычитаем объединение диапазонов V2 из каждого клипа V1, учитываем отключение и дробные границы. Отдельно разбираем прозрачность, переходы и другие случаи, где такой расчёт не определяет видимость.
GetIsTrackEnabled("video", index)GetClipEnabled()GetStart(True) / GetEnd(True) / GetDuration(True)ЗА ПРЕДЕЛАМИ ОДНОГО СКРИПТА