Какую проблему решает
Местные журналисты и жители хотят знать, что чиновники сказали об изменении зонирования, статье бюджета или школьной политике. Чтобы найти это, приходится перематывать часы видео по многим заседаниям. Повестки и протоколы редко передают обсуждение полностью, а во многих местных редакциях уже нет журналистов, которые посещали бы каждое заседание.
Что включить в первую версию
- Автоматическая загрузка каждого заседания с канала органа власти
- Метки спикеров, чтобы искать по конкретному чиновнику
- Поиск по темам и ключевым словам за годы заседаний
- Уведомления, когда обсуждается тема или адрес
- Ссылки на точный момент записи, которыми можно поделиться
Как создать: пошагово
- 01
Соберите видео заседаний
Получите список видео канала совета или плейлиста заседаний и продолжайте проверять новые загрузки.
- 02
Расшифруйте со спикерами
Используйте ASR с включённым speakerLabels и speakerId с известными именами, чтобы каждый фрагмент был привязан к спикеру. Заседания длинные, поэтому используйте эндпоинт оценки, чтобы заранее узнать стоимость.
- 03
Индексируйте по заседанию и спикеру
Сохраняйте абзацы с датой заседания, спикером и таймкодом и добавьте полнотекстовый и семантический поиск.
- 04
Добавьте уведомления
Дайте пользователям сохранять поисковые запросы, например название улицы или тему политики, и присылайте им письмо, когда это всплывёт на новом заседании.
Стартовый код
Эта идея построена на шаблоне «Рецепт 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Почему это стоит создать
Местные СМИ, правозащитные группы, а также компании в сфере недвижимости и политического анализа будут платить за уведомления и исследовательские инструменты. Гражданские проекты часто живут на гранты или предлагают бесплатный публичный архив с платными уведомлениями.
Каких ошибок избегать
- Полагаться на автоматические субтитры для длинных заседаний с множеством выступающих: метки спикеров делают архив намного полезнее.
- Недооценивать продолжительность: заседания идут часами, поэтому оцените расход кредитов на ASR перед расшифровкой архива.
- Публиковать без контекста: давайте к каждой цитате ссылку на запись, чтобы читатели могли услышать её сами.
Вопросы об этой идее
Можно ли расшифровать заседания городского совета с YouTube?
Да. Используйте субтитры, если они есть, или AI-распознавание речи с метками спикеров для более читаемых расшифровок длинных заседаний.
Как определить, кто говорит?
Включите метки спикеров, чтобы разделить выступающих, и идентификацию спикеров со списком известных имён или ролей, чтобы определить, кто есть кто.
Сколько стоит расшифровать трёхчасовое заседание?
AI-распознавание речи стоит около 40 кредитов в час без учёта дополнительных опций. Используйте эндпоинт оценки, чтобы узнать точную стоимость до начала.