Подготовка материала съёмочного дня к монтажу в DaVinci Resolve через мост - синхронизация звука рекордера с камерой, возврат каждому клипу его звука, ступенчатая проверка кадров. Запускай, когда просят синхронизировать звук, собрать дубли по хлопушке и таймкоду, вернуть звук в таймлайн, проверить картинку монтажа, или говорят про takes.json, MXF-рекордер, дейлиз.
Installs into .claude/skills of the current project.
Sponsors
SSkills DirectorySkills Directory
Know which skills are safe — weekly.
SSkills DirectorySkills Directory
Is that skill safe to install?
Are you the author of Dailies Prep?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/koptsev63-dailies-prep)
---
name: dailies-prep
description: Подготовка материала съёмочного дня к монтажу в DaVinci Resolve через мост - синхронизация звука рекордера с камерой, возврат каждому клипу его звука, ступенчатая проверка кадров. Запускай, когда просят синхронизировать звук, собрать дубли по хлопушке и таймкоду, вернуть звук в таймлайн, проверить картинку монтажа, или говорят про takes.json, MXF-рекордер, дейлиз.
---
# Подготовка дня: синхронизация, звук, проверка кадров
Три инструмента одной цепочки. Результат синхронизации (`takes.json`) читают остальные.
Нужно: Python 3.13 с `numpy`, `av` (PyAV), `Pillow`; для работы в Resolve - Resolve Studio с внешними скриптами в режиме Local и раннер `core.adapters.resolve_run`.
## 1. Синхронизация звука `core/dailies_sync.py`
```bash
python -m core.dailies_sync scan /путь/к/звуку /путь/к/камерам --out meta.json
python -m core.dailies_sync sync meta.json --out takes.json [--scenes 1-18,1-19]
```
- Рекордер: MXF OP-Atom, по файлу на канал; сцена, дубль и имена каналов (`TRK1`...) берутся из комментариев заголовка. Камера: клип плюс `<имя>_A01.mxf` рядом (или звук внутри клипа).
- Дубли собираются по таймкоду, камеры подбираются по пересечению (не меньше 2 с). Затем смещение уточняется корреляцией черновой дорожки камеры с бумом (PHAT-взвешенная, окно ±2 с).
- Смещение в кадрах: `offset_frames` больше нуля означает, что картинка камеры опаздывает относительно своего таймкода. Кадр камеры `s` показывает момент `s + f0 - offset_frames` на таймкоде звука.
- `sharp` - резкость пика. Ниже 8: `trusted: false`. Слабая связь (ниже 10) с прыжком больше 2 кадров заменяется медианой того же ролика камеры и получает `fixed_by_roll: true`.
- Камеры, не попавшие ни в один дубль, - съёмка без рекордера: `unmatched_cameras()`.
Как читать результат: сначала сколько связей `trusted`, затем все `fixed_by_roll` и `trusted: false` - их смотреть глазами и ухом, а не верить. Остаток после округления до кадра (миллисекунды) считает `residual_ms()`.
## 2. Возврат звука в таймлайн `core/adapters/resolve_restore_sound.py`
```bash
RESTORE_SRC="Монтаж" RESTORE_TAKES=takes.json RESTORE_CAMERA=keep \
python -m core.adapters.resolve_run exec core/adapters/resolve_restore_sound.py
```
- Копирует таймлайн (исходный не трогает), убирает звук копии и под каждый клип кладёт каналы рекордера его дубля со сдвигом: по моно-дорожке на канал (Boom1, Boom2 выше остальных), клип и звуки связаны.
- Звук камеры: `RESTORE_CAMERA=keep` (по умолчанию, дорожки включены), `mute` (есть, выключены), `omit` (не кладётся). Камера и рекордер расходятся на миллисекунды, поэтому вместе они могут звучать как флэнджер: решай под проект.
- Клипы без дубля остаются только со звуком камеры. Если рекордер кончился раньше клипа, в отчёте строка, звук не дорисовывается.
- `RESTORE_PROJECT=ИМЯ` - защита от запуска не в том проекте.
- Файлы рекордера должны лежать в медиапуле.
## 3. Ступенчатая проверка кадров `core/framecheck.py`
Идти от дешёвого к дорогому. Подробные кадры вокруг склеек - только для бесшовного монтажа: у дробного (монтажная нарезка, прыжки, перебивки) они ничего не скажут.
| ступень | что | сколько |
|---|---|---|
| 0 | числа без просмотра: где картинка меняется (`motion_profile`) | шаг 0,5 с |
| 1 | обзор каждой камеры каждого дубля (`overview_sheets`) | 8 кадров на дубль |
| 2 | края плана (`edge_sheet`) | вход, вход+1 с, выход-0,5 с |
| 3 | вокруг склейки (`cut_sheets`, только бесшовный) | секунда до и секунда после, по 4 кадра, шаг треть секунды |
| 4 | внутри плана - только где ступень 0 нашла движение | кадр раз в полсекунды |
| 5 | журнал непрерывности: в каждом плане кто где в начале и в конце; сравнить склейки и историю | по планам |
| 6 | один кадр в полном размере для спорного места | точечно |
```bash
python -m core.framecheck overview takes.json out/
python -m core.framecheck cuts takes.json edl.json out/ --seamless # без --seamless листов нет
```
- Сначала спроси или прочитай из задания, бесшовный ли монтаж. Переключатель `--seamless` по умолчанию выключен.
- Даже в бесшовном монтаже плотные листы строятся только на склейках, которые должны совпасть: две камеры одного дубля или продолжающееся действие. Вставки из другого дубля пропускаются, там разрыв задуман.
- Строки EDL: `[звук_дубль, от_с, до_с, картинка_дубль, камера, картинка_от_с или null, заметка]`.
- Докладывая о проверке, называй, какие ступени запускались. Реальные промахи бывали не от редких кадров, а оттого, что дубль не смотрели вовсе или не сравнили положение людей между планами.