Вкладка = съёмочная папка. Сверху её паспорт, дальше клипы подряд.
| Элемент | Зачем |
|---|---|
| Объём и ссылки папки | Вес оригиналов и вес прокси отдельно, ссылки на обе папки Drive. Сразу понятно, что качать и сколько это стоит. |
| Голоса папки | Кто говорит и сколько. Второстепенные сворачиваются в счётчик, иначе в занятиях с детьми список на два экрана. |
| По клипу: ссылки | Оригинал и лёгкая копия — открыть в один клик, не разыскивая файл. |
| Контактный лист | Шесть кадров с таймкодами. Понятно, что за сцена, не открывая видео. |
| «В кадре» | Строка описания локальной VLM. Помечена как машинная — это подсказка, не проверенные данные. |
| Таблица расшифровки | Таймкод · Голос · Реплика. Реплики одного голоса подряд склеены в абзац, иначе таблица рассыпается на строчки по три слова. |
Вкладки — режим Pageless, каждой назначается отдельно. Сводная вкладка держит таблицу папок и таблицу голосов; номер папки в ней ведёт прямо на её вкладку.
Главное, ради чего этап вообще нужен в таком виде. Поклиповая диаризация знает только «в этом клипе говорили трое»: её SPEAKER_00 в пятой папке и SPEAKER_00 в шестой — разные люди. Читать такое нельзя.
На YTFP это дало 5 из 5 склеенных героев, ноль ложных совпадений, без имени осталось 0,2 % текста. Побочная польза: видно, что мама героя говорит на занятии у логопеда, а голос логопеда звучит в домашнем архиве, — материал связывается между папками сам.
Шесть кадров, снятых равномерно по клипу, в сетке 3×2 на тёмной подложке, с таймкодом на каждом. У коротких клипов кадров меньше — сетка перестраивается, чтобы не было дыр. Источник — локальный оригинал, а для папок, которых нет на дисках, скачанный прокси: ещё одна причина делать этот этап после прокси, а не до.
⚠️ Таймкод выжжен в кадр, и VLM иногда описывает его, а не сцену («время отображено»). Такие хвосты вычищаются фильтром.
| Шаг | Что делает |
|---|---|
s1 индекс | Сводит каталог, Drive-ID, прокси, WAV и локальное видео в один индекс. |
s2 расшифровки | Берёт готовые из архива, недостающее дописывает mlx-whisper large-v3. |
s3a/b/c голоса | Диаризация, глобальная кластеризация, роли второстепенных голосов. |
s4/s5/s5b кадры | Контактные листы, выгрузка на Drive, описания VLM. |
s6 документ | Вкладки, ссылки, картинки, таблицы. |
s8 HTML | Одна страница, живой поиск по всем репликам, фильтр по голосу. |
verify | Приёмка по документу, а не по журналам. |
Каждый шаг идемпотентный и резюмируемый: повторный запуск подхватывает работу с места обрыва. Присмотр раз в 10 минут поднимает упавший прогон и шлёт статус в Telegram.
index 1 и оказывается над предыдущим. Ячейки таблицы заполняются от последней к первой.index I даёт таблицу с T = I + 1; пустая ячейка (r, c) лежит по адресу T + 3 + r·(1 + 2C) + 2c.namedStyleType сбрасывает оформление текста — назначать его надо ДО кегля и цвета. А новый абзац наследует стиль соседа, поэтому обычному тексту NORMAL_TEXT ставится явно.insertTable заводит перед таблицей пустой абзац, и тот тоже наследует стиль заголовка. Пустых заголовков набирается по одному на таблицу — навигация превращается в кашу.includeTabsContent=true. Снимок тяжёлый — берётся редко.Гейт читает сам документ и сверяет с индексом материала: у каждой вкладки столько же заголовков клипов, сколько клипов; таблиц столько, сколько клипов с речью; картинок не меньше; у каждой вкладки Pageless; имя каждого клипа встречается в тексте. Именно так поймались пустые заголовки перед таблицами и стёртая вкладка — по журналам оба раза всё выглядело «готово».
| Что | Где |
|---|---|
| Тулинг и README | ~/YTAI/scripts/999_extra/ytfp_transcript_doc/ |
| Состояние конвейера | work/ — не чистить, там резюмируемость |
| HTML-версия | html/YTFP_transcripts.html + html/sheets/ |
| Соседние этапы | 2.5 Каталог материала · 3.5 Прокси · 4.2 Передача монтажёру |