Как сделать субтитры, расшифровку и главы для подкаста или видео на YouTube
Достаточно один раз расшифровать выпуск с таймкодами для каждого слова, и из этого ответа вы соберёте всё остальное: SRT-субтитры, текст для описания, переведённые субтитры и разметку по главам. API ждёт на вход сам файл или прямую ссылку на него. Обычная ссылка на YouTube ведёт на веб-страницу и не подойдёт, поэтому берите свой исходный аудио- или видеофайл.
Один раз запустите расшифровку
Выгрузите дорожку выпуска (в MP3 или M4A) или сам видеофайл, отправьте его на сервер через вспомогательную функцию из руководства по видеомонтажу и запросите ответ в формате JSON:
{
"audio_url": "https://example.com/interview.mp3",
"model": "oracle",
"language": "auto",
"word_timestamps": true,
"output_format": "json"
}
Если у вас интервью или беседа нескольких людей, передайте include_diarization: true, чтобы в тексте были подписаны спикеры.
Субтитры в формате SRT
Соберите слова в строки и загрузите .srt в YouTube Studio или на хостинг подкастов. Готовый код и разбор поведения «строка на слово» у штатного SRT-вывода API есть в руководстве по SRT.
Переведённые субтитры
Отправьте тот же файл во второй раз с параметрами translate_to (работает на моделях Oracle) и output_format: "srt", либо просто переведите текст из первого ответа через свою LLM. Если запускать отдельную задачу под каждый язык, субтитры останутся точно синхронизированы со звуком.
Текст для описания выпуска
Запросите output_format: "txt", если нужен просто сплошной текст, или склейте поля text из JSON-фрагментов, добавив имена спикеров. Перед публикацией обязательно вычитайте текст: при автоматической расшифровке чаще всего перевираются имена, названия продуктов и цифры.
Таймкоды глав
Отдайте в LLM пронумерованный список реплик и попросите указать начала глав по номерам этих реплик, а не по времени. Сами таймкоды потом легко вытащить кодом из нужных фрагментов. Вот универсальный промпт под любую модель:
Below is a podcast transcript, one line per segment: S<number> [start-end] text.
Pick 5 to 9 chapter starts. For each give the segment number and a title of at most six words.
Return JSON: [{"segment": 0, "title": "Intro"}]. The first chapter must be segment 0.
chapters.py
# chapters.py — YouTube chapter lines from (seconds, title) pairs
def stamp(seconds):
m, s = divmod(int(seconds), 60)
h, m = divmod(m, 60)
return f"{h}:{m:02}:{s:02}" if h else f"{m}:{s:02}"
def chapter_lines(chapters):
return "\n".join(f"{stamp(start)} {title}" for start, title in chapters)
print(chapter_lines([(0, "Intro"), (95, "Why captions matter"), (412, "Editing from a transcript")]))
Чтобы YouTube сам разбил видео на главы по таймкодам из описания, список должен начинаться с 0:00 и идти по возрастанию. В нём должно быть минимум три пункта, а длина каждой главы не меньше десяти секунд.
Сколько это стоит
| Задача | Модель | Стоимость |
|---|---|---|
| Часовой выпуск, чистый звук | base | 0,48 $ |
| Часовой выпуск, продакшен-качество и разделение по спикерам | oracle | 1,44 $ |
| Переведённые субтитры на час записи | oracle_mini | 0,96 $ |
Тарификация посекундная, минимального порога нет. Все цены: /llms/pricing.md.
Вопросы и ответы
Как получить расшифровку выпуска подкаста?
Передайте аудиофайл или его URL в POST /transcribe. Для простого текста укажите output_format: "txt", а если нужны таймкоды и разметка по спикерам, выберите json.
Можно ли передать просто ссылку на YouTube?
Нет. Для работы API нужно загрузить сам файл или передать ссылку на медиафайл, а ссылка на ролик в YouTube ведёт на обычную веб-страницу. Используйте собственные аудио- и видеозаписи или те, на которые у вас есть права.
Как добавить субтитры к видео на YouTube?
Соберите файл SRT по инструкции из руководства по SRT и загрузите его в разделе субтитров внутри YouTube Studio.
Как сделать разметку по главам?
Отдайте пронумерованную расшифровку в LLM и попросите указать номера реплик, с которых начинаются новые темы. Затем в коде замените эти номера на таймкоды и вставьте готовый список в описание ролика.
Можно ли сделать субтитры сразу на нескольких языках?
Да. Запустите на модели Oracle по одной задаче с параметром translate_to для каждого нужного языка.