# YouTube Transcript APIで、字幕のない動画もテキストに

> YouTube Transcript APIにURLを送るだけで、JSON・テキスト・SRT・VTTを取得できます。字幕があれば取得し、なければAIで音声を文字起こし。どちらも1分あたり1クレジットです。

Canonical: https://transcript1.com/ja/features/youtube-transcript-api
Language: ja
Last updated: 2026-10-19

YouTube Transcript APIに動画のURLを送ると、JSON・テキスト・SRT・VTTで文字起こしを取得できます。使える字幕があれば取得し、なければAIが音声から文字起こしします。

- 字幕を優先し、なければAIで文字起こし
- 字幕もAIも1分あたり1クレジット
- watch・youtu.be・Shorts・埋め込みURLに対応

## アプリで必要なテキストの取得方法を選べます

### 普段使っている動画リンクで送れます

watchページ、youtu.be、Shorts、埋め込み、liveのURLを受け付けます。wwwの有無は問いません。進行中のライブ配信は処理できません。

### 投稿者の字幕を優先します

source=autoでは、投稿者がアップロードした字幕、自動生成字幕の順に確認します。自動翻訳された字幕は使いません。

### 字幕がなくても音声から取得できます

使える字幕がなければAI文字起こしに切り替えます。字幕を使わず、音声から作り直したい場合はsource=sttを指定します。

### テキストの取得元も残ります

transcript_sourceでyoutube_captionsとspeech_to_textを区別できます。字幕を取得したのか、音声から文字起こししたのかをアプリ側でも確認できます。

### 字幕とAIで料金は変わりません

動画の長さを分単位で切り上げ、1分あたり1クレジットを使います。文字起こしが失敗した場合やキャンセルした場合は課金しません。

## 動画URLをPOSTし、IDを保存します

APIキーと動画URLをPOST /v1/transcriptionsに送ります。Pythonでも、普段のHTTPクライアントでも使えます。wait=60を付けると最大60秒待ちます。指定できる項目は[APIリファレンス](https://transcript1.com/ja/docs/api-reference#create-a-transcription)で確認できます。

APIキーはダッシュボードで作成し、サーバーやスクリプトから使います。作成リクエストが成功したら、返ってきた文字起こしIDを保存してください。待ち時間を過ぎても処理は続きます。同じ動画を再送せず、GET /v1/transcriptions/:idで続きを確認します。

queued、fetching、transcribingは処理の途中です。completedになったらテキストを取得し、failedならエラーを処理します。応答が遅れた場合や動画を取得できなかった場合に、空のテキストを「成功」として返さない設計にしてください。

### cURL

```
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で取得元を確認します

字幕を使った場合は、その種類もレスポンスで分かります。billed_minutesは動画の長さを分単位で切り上げた値です。各フィールドは[文字起こしオブジェクト](https://transcript1.com/ja/docs/api-reference#the-transcription-object)にまとめています。

取得元を記録するアプリでは、transcript_sourceとcaption_kindも保存します。投稿者がアップロードした字幕には単語ごとのタイムスタンプがありません。自動生成字幕には単語の開始時刻、AI文字起こしには開始・終了時刻と信頼度があります。単語のデータが必要なときだけinclude=wordsを付けます。

セグメントには開始・終了位置が秒で入ります。再生位置に移動するUIや、録音と対応したメモに使えます。以下のJSONは構造を示す例です。リクエスト例の動画を引用したものではありません。

### 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." }
    ]
  }
}
```

## 字幕の取得とAI文字起こしを使い分けます

sourceの初期値はautoです。captions（字幕のみ）では、使える字幕がなければno_captionsになり、課金しません。sttなら常に音声から文字起こしします。言語や話者分離との組み合わせは[取得方法の設定](https://transcript1.com/ja/docs/sources-and-options#source)で確認できます。

公開された字幕そのものが必要ならcaptions（字幕のみ）を選びます。音声から作り直す場合や話者分離が必要な場合はsttを使います。autoでもdiarize=trueなら字幕を使わずAI文字起こしに進みます。captionsと話者分離は併用できず、リクエストはエラーになります。

languageを指定した場合、字幕はその言語と一致する必要があります。autoなら動画の元の言語を使い、自動翻訳字幕は取得しません。AI文字起こしで言語を指定しても、別の言語への翻訳にはなりません。

### 音声から文字起こしするリクエスト

```
{
  "platform": "youtube",
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "source": "stt"
}
```

## 再送する前に、エラーと既存のジョブを確認します

非公開動画、年齢制限付き動画、進行中のライブ配信は、再送しても取得できません。no_captionsなら、字幕の代わりに音声から文字起こししてよいかを判断します。まだ処理中なら同じIDで確認してください。[エラー一覧](https://transcript1.com/ja/docs/errors)を使い、原因ごとに対応を分けます。

作成リクエストを再試行する場合は[Idempotency-Key](https://transcript1.com/ja/docs/api-reference#idempotency)の仕様に従います。最近の文字起こしを再利用する設定は、同じ動画と同じオプションを照合する別の機能です。キャッシュの利用だけでは無料になるとは限りません。完了済みのジョブをIDで読み直す場合は、分数を消費しません。

同じエンドポイントで[TikTok](https://transcript1.com/ja/features/tiktok-mojiokoshi)や[Instagram](https://transcript1.com/ja/features/instagram-riru-mojiokoshi)などにも対応できます。YouTube、X、TikTok、Blueskyは字幕を優先する例ですが、全プラットフォームの一覧ではありません。[ソース別の対応表](https://transcript1.com/ja/docs/sources-and-options)に合わせ、使えない設定をUIで選ばせないようにします。

## よくある質問

### 字幕がない動画にも使えますか？

はい。source=autoでは、使える字幕がない場合にAIが音声から文字起こしします。字幕がない動画をエラーにしたい場合はcaptions（字幕のみ）を指定します。

### どのYouTubeリンクを送れますか？

watchページ、youtu.be、Shorts、埋め込み、liveのURLに対応します。ただし進行中のライブ配信は処理できません。チャンネルページや動画を指定していない再生リストは422 invalid_urlになります。

### 非公開の動画も取得できますか？

いいえ。取得できるのは公開動画と限定公開動画です。非公開、年齢制限付き、ライブ配信中の動画は処理できません。手元にある自分の録画は、ファイルとしてアップロードできます。

### 字幕とAI文字起こしで料金は違いますか？

同じです。動画の長さを分単位で切り上げ、1分あたり1クレジットを使います。新規アカウントはメール認証後に1回限り60分を無料で使えます。カード登録は不要です。

### Pythonパッケージのyoutube-transcript-apiですか？

いいえ。transcript1はホスト型のREST APIです。Pythonから使う場合も、APIキーを付けてHTTPリクエストを送ります。

## あわせて読む

- [タイムスタンプ・字幕](https://transcript1.com/ja/features/srt-fairu-sakusei)
- [音声・動画のAPI](https://transcript1.com/ja/features/onsei-ninshiki-api)
- [Webhook](https://transcript1.com/ja/features/mojiokoshi-webhook)
- [動画から記事へ](https://transcript1.com/ja/use-cases/douga-burogu-kiji-henkan)
