Назад в блогИнтеграции

How to Get YouTube Transcripts in Python

Two ways to pull YouTube transcripts in Python: the open-source youtube-transcript-api library, and a hosted REST API. Working code for both, and where the self-hosted approach breaks in production.

00:07:00 · SEP 26, 2026

Краткий ответ

Установите youtube-transcript-api для быстрого локального скрипта, или вызывайте размещённый REST API, если не хотите разбираться с блокировкой IP и проблемами PoToken после деплоя. Оба варианта разобраны ниже с рабочим кодом.
01

Установите библиотеку с открытым исходным кодом

youtube-transcript-api - это хорошо поддерживаемый Python-пакет, который напрямую получает собственные данные субтитров YouTube - без API-ключа, без квоты YouTube Data API.

pip install youtube-transcript-api

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

from youtube_transcript_api import YouTubeTranscriptApi

api = YouTubeTranscriptApi()
transcript = api.fetch("dQw4w9WgXcQ", languages=["en"])

for snippet in transcript:
    print(snippet.text, snippet.start, snippet.duration)
02

Где это ломается после деплоя

На ноутбуке это работает надёжно. При деплое на облачный сервер могут возникнуть реальные, хорошо задокументированные сбои - блокировка IP, PoTokenRequired и ошибка 'расшифровка отключена', которая не всегда означает то, что кажется. Точные причины и решения смотрите в полном чек-листе диагностики.

03

Получите API-ключ (если не хотите разворачивать своё решение)

Возьмите бесплатный ключ в панели управления - 100 бесплатных кредитов, без карты.

pip install requests
04

Вызов размещённого API из Python

Без пула прокси, без обслуживания блокировки IP - просто HTTP-запрос:

import requests

response = requests.get(
    "https://getyoutubetranscript.com/api/v1/transcript",
    params={"v": "dQw4w9WgXcQ"},
    headers={"Authorization": "Bearer sk_live_..."},
)
result = response.json()

print(result["data"]["transcript"])
print(result["data"]["word_count"])

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

{ "success": false, "code": "...", "message": "..." }
05

Получение нескольких видео

Перебор списка ID видео работает так же - просто следите за лимитом запросов в минуту вашего тарифа. Логику backoff и повторов смотрите в руководстве по лимитам запросов.

Оба подхода возвращают одну и ту же информацию - разница в том, кто поддерживает инфраструктуру в рабочем состоянии. Смотрите полные цены (100 бесплатных кредитов, без карты) или читайте документацию API по каждому эндпоинту.

FAQ по расшифровкам YouTube на Python

Q01

Какой подход мне использовать?

youtube-transcript-api для быстрого локального скрипта или прототипа. Размещённый API - когда вы деплоите в продакшен и не хотите сами поддерживать обходные пути с прокси/блокировкой IP.

Q02

Нужна ли для размещённого API библиотека youtube-transcript-api?

Нет - это обычный REST API. Вызывайте его любым HTTP-клиентом (requests, httpx, даже curl); специфичная для Python зависимость не нужна.

Q03

Могу ли я получить таймкоды для каждой строки, а не только полный текст?

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

Q04

Что произойдёт, если у видео нет расшифровки?

Оба подхода возвращают конкретную ошибку вместо пустой строки - что означает каждый код ошибки, смотрите в чек-листе диагностики.

Похожие материалы