Как перевести кадры в таймкод DaVinci Resolve через Python
Практическая функция frames_to_tc для SetCurrentTimecode, In/Out Range и точной работы с Timeline
Разбираем безопасное преобразование номера кадра в таймкод HH:MM:SS:FF. Такой код нужен перед перемещением playhead, установкой In/Out Range и любыми операциями, где Resolve API ожидает timecode, а не секунды.
API
Resolve Scripting API
Язык
Python
Resolve
19–20+
Требуется
Запущенный Resolve
Синтаксис
result = api_method()Параметры
- • Параметры зависят от конкретного метода Resolve Scripting API и показаны в рабочем примере.
Возвращает
Возвращаемое значение нужно проверять перед следующим шагом автоматизации.
def frames_to_tc(frame: int, fps: float) -> str:
fps_i = max(1, int(round(fps)))
total = int(round(frame))
ff = total % fps_i
seconds = total // fps_i
hh = seconds // 3600
mm = (seconds % 3600) // 60
ss = seconds % 60
return f"{hh:02d}:{mm:02d}:{ss:02d}:{ff:02d}"
fps = 24.0
frame = 1875
print(frames_to_tc(frame, fps)) # 00:01:18:03Документация
Что делает функция
Resolve часто работает с позициями Timeline в кадрах, но часть методов принимает таймкод. Функция frames_to_tc переводит целое число кадров в строку HH:MM:SS:FF с учетом FPS Timeline. Это небольшой, но важный технический кирпич для автоматизации.
Почему не использовать секунды
Секунды удобны для человека, но при монтаже точность задается кадрами. Если переводить через float-секунды, легко получить смещение на один кадр. Поэтому сначала считается целое количество кадров, а уже затем собирается таймкод.
Где применяется
Этот формат используется перед SetCurrentTimecode, SetInOutPoints и при выводе диагностической информации о позиции клипа. Та же идея используется в реальных bridge-модулях для перехода к нужному кадру и настройки диапазона рендера.
Разбор примера
Подключение к Resolve
Пример начинает работу с подключения к запущенному DaVinci Resolve через официальный Python-модуль.
Проверка проекта
Перед вызовами Media Pool, Timeline или Render Queue код проверяет наличие открытого проекта.
Вызов метода API
Основной блок выполняет задачу статьи: как перевести кадры в таймкод davinci resolve через python.
Проверка результата
После вызова API результат проверяется, чтобы скрипт не продолжал работу с пустым объектом или не созданной задачей.
Особенности Resolve API
- FPS лучше брать из активного Timeline через GetSetting("timelineFrameRate").
- Для дробных FPS Resolve может требовать особую drop-frame логику, но для стандартных 24/25/30/50/60 такой формат работает предсказуемо.
- Номер кадра должен быть уже приведен к системе координат текущего Timeline.
- Функция ничего не меняет в проекте и безопасна для тестирования.
Частые ошибки
Resolve API недоступен
Причина: Приложение не запущено или Python не видит DaVinciResolveScript.
Решение: Запустите Resolve и проверьте путь к Developer/Scripting/Modules.
Метод вернул None или False
Причина: В Resolve нет нужного проекта, Timeline, клипов, preset или доступа к папке.
Решение: Проверьте входные данные и добавьте явную проверку результата после каждого важного вызова API.
Скрипт работает только на одной машине
Причина: Пути к файлам или папкам Resolve зашиты под конкретную систему.
Решение: Вынесите пути в переменные и добавьте стандартные пути Windows, Linux и macOS.
Следующий шаг
Следующий шаг зависит от задачи: импорт медиа, создание Timeline или запуск рендера.
Связанные статьи API
Timeline
Как перевести таймкод в кадры через Python для DaVinci Resolve
Показываем рабочую функцию parse_tc_to_frames: как превратить таймкод Resolve в номер кадра, чтобы сравнивать диапазоны, считать длительность и синхронизировать операции Timeline API.
Timeline
Как переместить playhead в DaVinci Resolve через Python API
Разбираем рабочий способ поставить playhead на конкретный кадр: сначала через SetCurrentTimecode, затем через SetCurrentFrame, если метод доступен в текущей версии Resolve.
Render
Как задать диапазон рендера по клипам V1 через DaVinci Resolve API
Разбираем рабочий способ найти общий диапазон клипов на видеодорожке V1, поставить In/Out Points и переключить Render Range на In/Out Range.

