РУКОВОДСТВО ПО СОЗДАНИЮ · РАЗРАБОТЧИКИ ПРИЛОЖЕНИЙ

Как создать поисковик по тому, что говорят в видео на YouTube

Поиск YouTube ищет по названиям, описаниям и тегам. Он не скажет, в каком из 400 выпусков подкаста упоминается конкретный гость, книга или идея и на какой минуте. Поисковик на основе расшифровок может — и это один из самых быстрых полезных продуктов, которые можно создать на API.

Для кого
Подкаст-сети, платформы онлайн-курсов, фан-сообщества, внутренние видеотеки компаний
Срок разработки
Выходные
Эндпоинты API
/channels/resolve/batch/transcripts/{video_id}

Какую проблему решает

Большие видеотеки фактически невозможно искать. Фанаты часами перематывают записи в поисках полузабытого момента, студенты курсов пересматривают целые уроки ради одного объяснения, а компании теряют знания, похороненные в записях выступлений. Индексация расшифровок с таймкодами превращает любую видеотеку в то, что можно искать как документ, а результаты сразу ведут к нужному моменту.

Что включить в первую версию

  • Поиск по фразам и ключевым словам во всех видео канала или плейлиста
  • Результаты с найденным предложением и ссылкой на точный таймкод
  • Семантический поиск, чтобы запрос «как назначить цену на продукт» находил и «как выставлять расценки»
  • Фильтры по дате, видео и спикеру
  • Автоматическая индексация новых загрузок

Как создать: пошагово

  1. 01

    Соберите список видео

    Вызовите /channels/resolve или /playlists/resolve с хендлом канала или URL плейлиста, чтобы получить ID и названия всех видео.

  2. 02

    Получите расшифровки пакетом

    Отправьте ID в /batch с включёнными format.timestamp и format.paragraphs. Крупные пакеты обрабатываются асинхронно, поэтому опрашивайте /batch/{batch_id} или используйте вебхук.

  3. 03

    Проиндексируйте сегменты

    Сохраните каждый абзац с ID видео и временем начала. Для поиска по ключевым словам достаточно полнотекстового поиска Postgres; для поиска по смыслу добавьте эмбеддинги в pgvector или векторной базе данных.

  4. 04

    Сделайте интерфейс поиска

    Возвращайте лучшие совпадения с окружающим текстом и ссылкой вида youtube.com/watch?v=ID&t=SECONDS, чтобы пользователь попадал точно в нужный момент.

  5. 05

    Поддерживайте актуальность

    Запускайте задачу по расписанию, которая заново получает список видео канала, находит новые ID и расшифровывает только их.

Стартовый код

Эта идея построена на шаблоне «Рецепт 3: массовая загрузка плейлиста в базу знаний». Подставьте свои каналы, промпты и хранилище.

import requests

API = "https://www.youtubetranscript.dev/api/v2"
HEADERS = {"Authorization": "Bearer yt_sk_live_YOUR_KEY"}

playlist = requests.post(f"{API}/playlists/resolve", headers=HEADERS,
                         json={"playlist_url": "https://www.youtube.com/playlist?list=PLAYLIST_ID",
                               "limit": 100}).json()

ids = [v["video_id"] for v in playlist["items"]]
batch = requests.post(f"{API}/batch", headers=HEADERS, json={
    "video_ids": ids,
    "format": {"timestamp": True, "paragraphs": True},
}).json()

# Large batches run async: poll GET /batch/{batch_id} until status is "completed"
for r in batch.get("results", []):
    if r["status"] == "completed":
        for p in r["data"]["transcript"].get("paragraphs") or []:
            store(video_id=r["video_id"], start=p["start"], text=p["text"])  # your vector DB

Почему это стоит создать

Продавайте владельцу видеотеки, а не зрителю: подкаст-сети, платформы курсов и компании с внутренними видеоархивами будут платить ежемесячно за поиск, который удерживает их аудиторию. Для фан-сообществ работает и бесплатный публичный поиск с платным тарифом для уведомлений или доступа к API.

Каких ошибок избегать

  • Индексировать расшифровку целиком как один документ: без таймкодов на уровне абзацев результаты поиска бесполезны.
  • Заново расшифровывать весь канал при каждом обновлении вместо того, чтобы отслеживать уже обработанные ID видео.
  • Полагаться только на точное совпадение ключевых слов: устная речь неаккуратна, поэтому добавьте семантический поиск как можно раньше.

Вопросы об этой идее

Нужна ли векторная база данных для поиска по расшифровкам YouTube?

Нет. Полнотекстовый поиск Postgres хорошо справляется с поиском по ключевым словам для большинства видеотек. Добавьте эмбеддинги, когда нужны результаты, совпадающие по смыслу, а не по точным словам.

Как связать результат поиска с точным моментом в видео?

Каждый сегмент расшифровки содержит время начала в секундах. Добавьте к URL YouTube &t= и это число.

Можно ли индексировать видео без субтитров?

Да. Включите allow_asr и укажите URL вебхука — если субтитров нет, API расшифрует аудио с помощью AI-распознавания речи.

Начните создавать уже сегодня

10 бесплатных кредитов каждый месяц. Банковская карта не нужна.

Как создать поиск по содержимому видео YouTube | YouTubeTranscript.dev