База знаний · KB

▶️ YouTube — подготовка, загрузка, таблица

Как упаковать готовый ролик, сделать субтитры, залить его на YouTube, дотянуть обратно 4K-копию и обложку, разложить на Google Drive и заполнить строку в ContentList. Сквозной процесс «как мы это делаем».

🌐 Принципы общие для ВСЕХ каналов. Меняются только: язык (RU/EN — см. §9), токен канала, его categoryId и Shared Drive. Остальное одинаково.

1 Пайплайн (обзор)

От готового мастера до заполненной строки в таблице — один и тот же путь для любого канала.

Упаковка + субтитрыЗагрузка unlisted4K + обложка с YouTubeDrive (06_YouTube + 05_Thumbnail)Строка в ContentListСмарт-чипыPublish вручнуюStatus 10Published

Загружаем unlisted (черновик по ссылке), а публикует человек в Studio в 1 клик — гибрид обходит «private-lock» неаудированного API-проекта. Обе видео-версии (мастер + 4K-копия с YouTube) едут в 06_YouTube на Drive, ссылки + обложка + статус — в таблицу.

2 Упаковка ролика

Заголовок · описание · теги · категория · язык. Пишем под зрителя, а не под «контент-гика».

Заголовок
Под запрос аудиторииСначала — что человек ищет и в каком состоянии. Заголовок должен совпадать с запросом, а не с тем, что интересно упаковщику.
Честный promiseОбещание, которое видео реально держит. Кликбейт убивает CTR вдолгую. Honest promise > hook-трюки.
HookКонкретика, ставки, инсайдерство, разрыв-любопытство. ≤ 100 симв, ключевое — в начале (мобильный режет ~60).
Описание — структура
1-я строка = CTA/ссылкаСамое важное вверху (видно в свёрнутом виде). Для фондов — донат-ссылка: ❤️ Поддержать: https://…/help/ + строка-усилитель.
Интро2 абзаца: проблема (что болит / чем опасно) → что покажем + кто эксперт.
«В видео разбираем:»5–7 буллетов — конкретные пункты ролика.
📌 СодержаниеТаймкоды-главы 0:00 … (≥3, каждая ≥10с, первая 0:00). Берём из транскрипта финального ката.
ХвостБлок «о канале/фонде» + повтор CTA. Дисклеймер для мед-тем.
🏷 Теги
~12, по поисковым формулировкам аудитории (синонимы темы, бренд канала). Максимум 500 символов суммарно — лимит YouTube.
🗂 Категория
26 Howto · 27 Education · 22 People · 28 Sci&Tech. Своя на канал (см. §9).
🌍 Язык
--default-language по каналу: RU-каналы → ru, EN → en (список — §9). Задаёт defaultLanguage + defaultAudioLanguage.

📁 Метаданные кладём в папку проекта 06_YouTube/: <CODE>_upload.json (title/desc/tags/cat/lang) + description.txt + tags.txt (их читает загрузчик через --pack-dir).

3 Субтитры (RU + EN)

К каждому ролику — субтитры на русском и английском. Не сырой автотранскрипт: выверенные и адаптированные под готовое видео.

Качество — не «автосабы»
Проверка контекстаАвтотранскрипт сверить с готовым видео и исходниками (01_Source — расшифровки/съёмка, 02_Edit — что реально вошло в монтаж). Исправить ошибки распознавания, термины, имена, числа.
АдаптацияТайминг — по финальному кату (а не по сырому интервью). Разбивка на читаемые строки, без «простыней».
РолиЕсли в кадре больше одного человека — добавить ярлыки спикеров (кто говорит). Диаризация (pyannote) или вручную.
Два языка — всегда
RU + ENОба языка для любого ролика. На языке канала — выверенный транскрипт; второй язык — перевод.
Источник истиныДелаются из готового видео (финальный кат) + исходных материалов — чтобы текст совпадал с тем, что реально в ролике, а не с черновым интервью.
КудаSRT (RU + EN) → загрузка в YouTube (captions) + копия в проект (01_Source/Transcription).
# 1) транскрипт финального ката (пословный тайминг)
mlx_transcribe_review.py --video "06_YouTube/<CODE>_*.mp4" --language ru
# роли, если >1 спикера (pyannote, пословно)
wordrole_transcribe.py --media "06_YouTube/<CODE>_*.mp4" --speaker-names "Ведущий,Гость"
# 2) выверить по видео + 01_Source/02_Edit → 3) перевести → SRT ru/en → 4) залить
captions_insert.py --video <id> --srt <CODE>_ru.srt --lang ru   # затем --lang en

Инструменты: mlx_transcribe_review.py (транскрипт), wordrole_transcribe.py (пословно + роли pyannote), captions_insert.py (загрузка сабов в YouTube). Финально — глазами по готовому видео.

4 Загрузка на YouTube

Гибрид: API заливает черновиком (unlisted/private), публикуешь сам в Studio. Загрузчик scripts/08_youtube/upload_youtube.py (resumable, retry).

# из папки проекта; токен и канал — свои (см. §9)
~/YTAI/environment/.venv_transcribe/bin/python \
  ~/YTAI/scripts/08_youtube/upload_youtube.py \
  --video "06_YouTube/<CODE>_vN_*.mp4" \
  --title "…" \
  --pack-dir "06_YouTube" # description.txt + tags.txt \
  --privacy unlisted --default-language ru --category <id> \
  --token ~/.config/ytai/token_<channel>_youtube.json \
  --expect-channel <UC…>

5 После загрузки: 4K-копия и обложка

YouTube сам делает перекодированную 4K-версию (легче мастера) и хранит обложку. Дотягиваем оба обратно.

⬇️ Light = 4K с YouTube
YouTube-перекод 4K ~200–500 МБ (vs ~3 ГБ мастер) → в 06_YouTube/. --force-ipv4 обязательно (иначе троттлинг).
yt-dlp --force-ipv4 \
  -f "bv*[height=2160]+ba[ext=m4a]/bv*[height=2160]+ba/best" \
  --merge-output-format mp4 \
  -o "06_YouTube/<CODE>_vN_YT4K.mp4" "https://youtu.be/<id>"
🖼 Обложка (превью)
Дизайн-обложку часто ставит vidIQ после заливки. Берём максимальное разрешение (1280×720) → в 05_Thumbnail/.
⚠️ Файл обложки — строго < 2 МБ (жёсткий лимит YouTube; тяжелее — thumbnails().set отклонит). Если дизайн-экспорт > 2 МБ — сжать ровно настолько, чтобы влезть под 2 МБ, сохранив качество: lossless 1280×720 PNG (ровно тот размер, что YT показывает) или near-lossless / oxipng в нативном разрешении. Лимит — это максимум, а не цель: не крушить оригинал в мелкий JPG.
curl -sL \
  "https://i.ytimg.com/vi/<id>/maxresdefault.jpg" \
  -o "05_Thumbnail/<CODE>_thumbnail.jpg"

6 Google Drive — куда что класть

Обе видео-версии (мастер, залитый на YouTube + 4K-копия с YouTube) — в 06_YouTube; обложка — в 05_Thumbnail папки проекта на Shared Drive канала.

Shared Drive «<Канал>»<Канал> S1<CODE>_…
  📁 06_YouTube/<CODE>_vN_*.mp4 (мастер = Video link) + <CODE>_vN_YT4K.mp4 (Light link) + метаданные (upload.json / description.txt / tags.txt)
  📁 05_Thumbnail/<CODE>_thumbnail.jpg

7 ContentList — строка проекта

У каждого канала свой лист «<Канал> ContentList» (реестр — _data/channels.json), колонки и смысл одинаковые (канон v2, A–O). ⚠️ Адресовать колонки по ЗАГОЛОВКУ, не по букве. Здесь — только что заполняет заливка; полный стандарт листа — на подстранице ниже.

📊 3.2.1 · ContentList — таблица канала → полный стандарт
Раскладка A–O «что и где» · 11 статусов и цвета · спринты и палитра · валидации · смарт-чипы · Duration/Last modified · шаблон и запуск нового канала.
E · YouTubeссылка на ролик
F · ThumbnailDrive-обложка
G · Video linkDrive-мастер
H · Light linkDrive-4K с YT
I · File nameимя мастера
J · Last modifiedдата файла
L · Statusэтап
O · Durationдлительность
Что заполняет заливка
YouTube (E)plain https://youtu.be/<id> — смарт-чипом делает человек в UI (API не умеет).
Thumbnail (F) · Video link (G) · Light link (H)Drive-чипы: обложка (05_Thumbnail), мастер и 4K-копия (06_YouTube) — кодом, §8.
File name (I) · Last modified (J)Имя мастера · дата файла yyyy-mm-dd (только пустые ячейки — ручные даты не перезаписывать).
Duration (O)Длительность мастера [m]:ss из Drive-метаданных (fallback — yt-dlp с YouTube).
Status — этап
09ReadyЗалито unlisted, ждёт ручной публикации.
10PublishedОпубликовано (после клика Publish в Studio).
01…1101Created…11Archived — строгий дропдаун, ячейка красится CF-правилом (см. стандарт §3).

Запись в лист — Sheets API под rscore-токеном (§9). Колонку находим по тексту заголовка в row1, затем пишем в её ячейку.

8 Смарт-чипы (Drive-превью в ячейке)

Кнопку «Chip» (Drive-файл → карточка-превью) ставим через API — вручную кликать не нужно.

python3 ~/YTAI/scripts/999_extra/sheets_chip_links.py \
  --sheet <SHEET_ID> --tab "<Канал> Videos" \
  --chip "Video-link-cell=<fileId|url>" \
  --chip "Light-link-cell=…"  --chip "Thumbnail-cell=…"

9 Доступы и каналы

Что различается между каналами — здесь: язык, токен, categoryId, Drive. Секреты в самих файлах, тут только пути и ID. Запись в Google — под одним rscore-токеном.

🌐 Каналы · язык по умолчанию
RU — описание и основные субтитры на русском (EN — перевод)
YTAgeFreeYTRFYTFPYTUVIYTCIVYTCHYTAZ
EN — описание и основные субтитры на английском (RU — перевод)
YTCRYTCGYTMSENYTUAE

Язык канала определяет --default-language при заливке и какой язык субтитров «родной» (выверенный транскрипт), а какой — перевод. Субтитры всё равно делаем на обоих языках (§3).

▶️ YouTube-токены (гибрид: залив черновик → публикуешь сам)
OAuth-клиент ~/.config/winston-smith/yt-oauth-desktop.json (GCP hubweb-437211) · реестр scripts/08_youtube/channels.json · scopes upload+readonly+force-ssl.
fond — Старость в радость БФ (YTAgeFree)RU ~/.config/ytai/token_fond_youtube.jsonUCDisHNgdMxrsPondMwu8pog · cat 26
pravmir — Открываем мир звуков · Правмир (YTFP)RU ~/.config/ytai/token_pravmir_sluh.jsonUCzd4kOoBsHFOBbDTjA3OA1Q · cat 27
burodd — Бюро Добрых Дел (YTCH)RU ~/.config/ytai/token_burodd_youtube.jsonUCiJTns9nQjPixMbxzx0BmPg · cat 22
technodelo — Рефлюкс Контроль (YTRF)RU ~/.config/ytai/token_technodelo_youtube.jsonUCn5irJMzUZ5aZ5WKnjDlH6A · cat 27/28
roman_personal — Roman Sergeev ~/.config/winston-smith/yt-oauth-token-rs.jsonUC202ZZZJCqfv3EkhAFdazdA · READ-ONLY (аналитика)
☁️ Google Drive / Sheets — запись
rscore-токен ~/.config/rscore/token.json[email protected] · scope drive покрывает и Sheets v4 — consent не нужен. Этим пишем строки, заливаем файлы, ставим чипы.
Чтение — Drive MCP read-only (записи ячеек нет)
Shared DrivesYTAgeFree 0ALdB53qbkaKMUk9PVA · YTRF 0ALPYdcdYxhOOUk9PVA · YTFP 0AGxMtru0d5W_Uk9PVA · YTCH 0AL5m1S49VznzUk9PVA
🧰 Инструменты
Загрузчик scripts/08_youtube/upload_youtube.py
Чипы scripts/999_extra/sheets_chip_links.py
4K / обложка yt-dlp --force-ipv4 · i.ytimg.com/.../maxresdefault.jpg
Субтитры mlx_transcribe_review.py · wordrole_transcribe.py · captions_insert.py

10 Чеклист — порядок действий

1
Упаковать заголовок · описание (ссылка/CTA в 1-й строке + главы) · теги (≤500 симв) · категория → 06_YouTube/
2
Субтитры RU + EN выверить по готовому видео + 01_Source/02_Edit, роли если >1 спикера
3
Залить upload_youtube.py --privacy unlisted своим токеном → получить videoId
4
Дотянуть с YouTube 4K (yt-dlp --force-ipv4) + обложку (maxresdefault.jpg)
5
Залить на Drive обе видео-версии (мастер + Light) → 06_YouTube, обложку → 05_Thumbnail (anyone-with-link)
6
Заполнить строку YouTube · Thumbnail · Video link (мастер) · Light link (4K) · File name · Last modified · Duration · Status 09Readyпо заголовкам (стандарт таблицы →)
7
Прочиповать Drive-ссылки → смарт-чипы (sheets_chip_links.py)
8
Publish + сабы человек публикует в Studio, заливаем субтитры RU/EN → Status 10Published
База знаний yt.rya.ae · инструменты: upload_youtube.py, sheets_chip_links.py, yt-dlp, captions_insert.py. · подстраница: 3.2.1 ContentList → · смежное: Project Ops → · обновлено 2026-07-03.
скопировано ✓