Как получить транскрипт YouTube автоматически
Создайте API-ключ в личном кабинете и отправьте ссылку через POST /v1/transcriptions со своего сервера или из скрипта. Подойдёт Python или любой HTTP-клиент. С wait=60 запрос ждёт до 60 секунд. Параметры и коды ответа описаны в документации.
Сразу сохраните ID созданной транскрибации. Если время ожидания истекло, задача продолжает работать. Проверяйте её через GET /v1/transcriptions/:id, а не создавайте заново.
Обрабатывайте статусы отдельно: queued, fetching и transcribing означают, что работа ещё идёт. При completed можно читать транскрипт, при failed нужно разобрать ошибку. Сбой сети или недоступное видео не должны превращаться в пустой текст с пометкой об успехе.
curl -X POST "https://api.transcript1.com/v1/transcriptions?wait=60" \
-H "Authorization: Bearer $TRANSCRIPT1_API_KEY" \
-H "Content-Type: application/json" \
-d '{"platform":"youtube","url":"https://youtu.be/dQw4w9WgXcQ"}'Сохраните transcript_source вместе с текстом
В transcript_source указан источник текста, а в caption_kind — тип субтитров. Поле billed_minutes содержит длительность видео с округлением вверх до целой минуты. Схема объекта поможет разобрать остальные поля.
У субтитров автора сохраняем опубликованный текст, но времён отдельных слов нет. У автоматических субтитров YouTube есть начало каждого слова. При распознавании речи доступны начало, конец и confidence. Запрашивайте include=words, только если эти данные нужны вашему приложению.
У сегментов есть начало и конец в секундах. По ним можно открывать нужное место в плеере, привязывать заметки к записи или передавать ассистенту конкретный фрагмент. JSON ниже показывает структуру ответа, а не слова из видео в примере.
{
"id": "tr_8fK2Lm0PqRsTuVwXyZaBcD",
"status": "completed",
"transcript_source": "youtube_captions",
"caption_kind": "auto_generated",
"language": "en",
"billed_minutes": 4,
"transcript": {
"text": "Welcome back to the channel. Today we are looking at how transcripts are made.",
"segments": [
{ "start": 0, "end": 4.2, "speaker": null, "language": "en", "text": "Welcome back to the channel." }
]
}
}Когда выбрать субтитры, а когда распознавание речи
По умолчанию source=auto. Режим captions (только субтитры) вернёт no_captions без списания кредитов, если подходящей дорожки нет. При source=stt всегда расшифровываем звук. Подробности — в настройках source.
Выбирайте captions, если нужен именно опубликованный текст. Для новой расшифровки или определения говорящих используйте распознавание речи. При source=auto и diarize=true сразу переходим к аудио. Сочетание source=captions и diarize=true отклоним: незаметно отключать одну из опций не будем.
Язык тоже влияет на выбор субтитров. Ищем дорожку на указанном языке, а при language=auto — на языке оригинала. Автоматически переведённые дорожки не подходят. Подсказка языка для распознавания речи не переводит запись на другой язык.
{
"platform": "youtube",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"source": "stt"
}Проверьте ошибку, прежде чем повторять запрос
Повтор не откроет приватное видео, не снимет возрастное ограничение и не превратит текущую трансляцию в готовую запись. При no_captions решите, подойдёт ли расшифровка звука. Если обработка ещё идёт, проверяйте существующую задачу по ID. Справочник ошибок поможет выбрать следующий шаг.
Для повторной отправки запроса после сбоя используйте Idempotency-Key. Повторное использование недавней транскрибации — отдельная настройка: должны совпасть видео и параметры. Кешированный текст всё ещё может тарифицироваться как новая задача. Чтение уже готовой транскрибации минут не расходует.
Тот же API принимает TikTok, Instagram и другие поддерживаемые ссылки. Например, YouTube, X, TikTok и Bluesky позволяют сначала искать субтитры, а затем переходить к аудио. Перед добавлением платформы сверьте допустимые сочетания опций с таблицей источников.