# 対応リンクと文字起こしの設定

> 使える動画リンクとURL形式を確認し、字幕・AI文字起こし・話者分離・言語を設定します。

Canonical: https://transcript1.com/ja/docs/sources-and-options
Language: ja
Last updated: 2026-10-20

動画のリンクを指定するか、音声・動画ファイルをアップロードして文字起こしできます。YouTube、X、TikTok、Instagram、Facebook、Blueskyのほか、下の表にあるプラットフォームの公開動画にも対応しています。対象は録画済みの動画です。

取得方法は`source`、話者分離は`diarize`、言語は`language`で設定します。いずれも`POST /v1/transcriptions`のリクエストボディに指定する任意のフィールドです。

## 使える動画リンク

動画のリンクを`url`に指定してください。プラットフォームはAPIが自動で判定するため、`platform`は省略できます。指定する場合は、リンクと同じプラットフォームにしてください。

| プラットフォーム | 対応するURL・投稿 |
|---|---|
| YouTube（`youtube`） | 動画のURLを指定します。使える形式は次のセクションにまとめています。 |
| X（`x`） | `x.com`または`twitter.com`の動画投稿です。例：`https://x.com/user/status/1234567890`。 |
| TikTok（`tiktok`） | `tiktok.com`の動画投稿を指定します。`vm.tiktok.com`、`vt.tiktok.com`、`www.tiktok.com/t/`の短縮リンクも使えます。 |
| Instagram（`instagram`） | `instagram.com`のReelsや動画投稿に対応します。パスは`/reel/`、`/reels/`、`/p/`、`/tv/`です。ユーザー名を含むReels・投稿のURLも使えます。 |
| Facebook（`facebook`） | `facebook.com`の動画・Reelsのリンクを指定します。watch形式のURLと、`fb.watch`、`/share/v/`、`/share/r/`の短縮リンクも使えます。 |
| Bluesky（`bluesky`） | `bsky.app`の動画投稿です。例：`https://bsky.app/profile/user.example/post/3l3w4b5c6d7e2`。 |
| [Twitch](https://transcript1.com/ja/features/twitch-vod-mojiokoshi)（`twitch`） | 配信終了後のVODは`twitch.tv/videos/<id>`または`/<channel>/v/<id>`で指定します（`video`も使えます）。クリップは`clips.twitch.tv/<slug>`、`twitch.tv/<channel>/clip/<slug>`、`/clip/<slug>`です。対応ホストは`twitch.tv`、`www`、`m`、`go`、`clips.twitch.tv`です。 |
| [Dailymotion](https://transcript1.com/ja/features/dailymotion-douga-mojiokoshi)（`dailymotion`） | `dailymotion.com/video/<id>`、`/embed/video/<id>`、`dai.ly/<id>`を使えます。`_title`は省略できます。ホストは`www.dailymotion.com`と`touch.dailymotion.com`にも対応します。 |
| [Pinterest](https://transcript1.com/ja/features/pinterest-douga-mojiokoshi)（`pinterest`） | `pinterest.com`または`www.pinterest.com`に直接投稿された動画ピンを指定します。パスは`/pin/<id>/`または`/pin/<slug>--<id>/`です。最初のネイティブ動画ブロックだけを使います。外部埋め込み動画、画像、ボード、`pin.it`、地域別ドメインは対象外です。 |
| [LinkedIn](https://transcript1.com/ja/features/linkedin-douga-mojiokoshi)（`linkedin`） | `linkedin.com`または`www.linkedin.com`の公開動画投稿を指定します。パスは`/posts/<slug>-<activity-id>-<four-character-suffix>`または`/feed/update/urn:li:activity:<id>/`です。プロフィール、LinkedIn Learning、イベント、`lnkd.in`は対象外です。 |
| [Snapchat Spotlight](https://transcript1.com/ja/features/snapchat-spotlight-kakiokoshi)（`snapchat`） | `snapchat.com`または`www.snapchat.com`のSpotlight動画を`/spotlight/<id>`で指定します。ストーリーやプロフィールは使えません。 |

Twitch、Dailymotion、Pinterest、LinkedIn、Snapchat Spotlightの5つではHTTPSが必須です。URLに認証情報や独自のポート番号は指定できません。使えるのは公開されている録画の個別リンクだけです。非公開・ログイン必須の投稿、ライブ配信、処理中の配信、プロフィール、フィード、コレクションは対象外です。

取得時にアカウントのCookieは渡しません。URLで開始時刻などを指定しても、動画をその位置で切り取ることはありません。TwitchのクリップとSnapchat Spotlightでは、`media_id`の文字列から内部のIDや構造を読み取れるとは限りません。URLからIDを組み立てず、返された文字列をそのまま保持してください。

X、TikTok、Instagram、Facebook、Blueskyは公開投稿に対応します。複数の動画を含む投稿では、最初の動画だけを使います。プロフィール、ストーリー、ライブ配信ページ、TikTokの写真投稿は使えません。ログインが必要なら`login_required`、音声トラックがなければ`no_audio`で失敗します。どちらの場合も課金しません。

字幕を使えるのは、YouTube、X、TikTok、Bluesky、Dailymotion、LinkedInです。動画の元の言語のトラックが必要で、使える字幕があるかは動画によって異なります。Instagram、Facebook、Twitch、Pinterest、Snapchatでは、`auto`または`stt`を指定してAI文字起こしを使います。`captions`（字幕のみ）は指定できません。プラットフォームやファイルによる単価の違いはなく、実際の長さを測って分数に応じて課金します。

短縮リンクは、表にある形式だけ使えます。送信時に投稿IDがわからないSNSの共有リンクは、過去の文字起こしとの照合対象になりません。以前の文字起こしを再利用する場合は、投稿のフルURLを指定してください。

| 字幕を取得するプラットフォーム | 取得できる字幕とタイムスタンプ |
|---|---|
| YouTubeとX | 既存の字幕トラックを取得します。単語ごとのタイムスタンプも取得できるのは、YouTubeの自動生成字幕だけです。 |
| TikTok | 動画に付属するVTT・SRT字幕を取得します。タイムスタンプはセグメント単位です。 |
| Bluesky | 対応対象の信頼済みPDS上にあるネイティブ動画の字幕だけを取得します。それ以外のサーバー、引用動画、外部動画は対象外です。タイムスタンプはセグメント単位です。 |
| Dailymotion | SRT字幕を直接取得します。字幕プレイリストは使いません。タイムスタンプはセグメント単位です。en-auto/fr-autoと判定したトラックではauto_generatedを返します。 |
| LinkedIn | LinkedInに直接投稿された公開動画のVTT字幕を取得します。LinkedIn Learningは対象外です。タイムスタンプはセグメント単位です。 |

## YouTubeで使えるURL形式

YouTubeの動画は、次のURL形式で指定できます。`www.`の有無は問いません。`url`にURLを入れ、`platform`は省略するか`youtube`にしてください。

| URLの形式 | 指定例 |
|---|---|
| 通常の視聴ページ | `https://www.youtube.com/watch?v=dQw4w9WgXcQ` |
| 共有用の短縮URL | `https://youtu.be/dQw4w9WgXcQ` |
| Shorts | `https://www.youtube.com/shorts/dQw4w9WgXcQ` |
| 埋め込み用URL | `https://www.youtube.com/embed/dQw4w9WgXcQ` |
| Live形式 | `https://www.youtube.com/live/dQw4w9WgXcQ` |
| モバイル版・音楽向けドメイン | `https://m.youtube.com/watch?v=dQw4w9WgXcQ`、`https://music.youtube.com/watch?v=dQw4w9WgXcQ` |

`t`、`list`、`si`などの追加クエリは無視します。URLの形式が違っても、同じ動画なら同じものとして扱います。指定するのは必ず完全なURLにしてください。11文字の動画IDだけでは受け付けません。

チャンネルのページ、プレイリストだけを指すURL、非対応のリンクには`422 invalid_url`を返します。`platform`に未知の値を指定した場合は、`422 unsupported_platform`と、対応する値の一覧`supported_platforms`を返します。

取得できるのは公開・限定公開の動画です。非公開動画は`media_private`、年齢制限付き動画は`age_restricted`、ライブ配信は`live_stream`で失敗します。手元に自分のファイルがある場合は、[アップロード](https://transcript1.com/ja/docs/uploads)を使ってください。

## 字幕とAI文字起こしを切り替える

字幕からテキストを取得するか、音声を文字起こしするかは`source`で選びます。

| 指定する値 | テキストの取得方法 |
|---|---|
| `auto`（デフォルト） | YouTube、X、TikTok、Bluesky、Dailymotion、LinkedInでは、動画の元の言語の字幕を優先します。使える字幕がなければ、AIが音声を文字起こしします。 |
| `captions`（字幕のみ） | 字幕に対応するプラットフォームから字幕だけを取得します。音声のダウンロードもAI文字起こしも行いません。使える字幕がなければ`no_captions`で失敗し、課金しません。字幕の内容を取得できなかった場合は`fetch_failed`です。字幕に対応しないプラットフォームで指定すると、`422 invalid_request`を返します。 |
| `stt` | 字幕は使わず、必ずAIが音声を文字起こしします。 |

アップロードしたファイルでは、常に音声認識を使います。`source`に指定できるのは`auto`と`stt`です。`captions`（字幕のみ）を指定すると`422 invalid_request`を返します。

字幕トラックは指定した言語と一致する必要があります。`language`が`auto`なら、動画の元の言語を選びます。YouTubeでは、その言語で投稿者がアップロードした字幕や、YouTubeが生成した字幕を使います。自動翻訳のトラックは使いません。

YouTubeの字幕は、投稿者がアップロードしたもの、作成元が不明なもの、自動生成字幕の順で優先します。作成元が不明なトラックを、投稿者が作成した字幕として扱わないでください。Xでは利用できるVTTトラックを使います。自動生成字幕でも、タイムスタンプはセグメント単位だけで、単語ごとのタイムスタンプはありません。

`auto`では、字幕の内容を取得・解析できない場合にSTTへ切り替えることがあります。ただし、ルーティング、ストレージ、プログラム側の障害では切り替えません。`stt`なら、字幕の有無にかかわらず音声を使います。

## 話者分離を使う

誰が話しているかを区別するには、`diarize`を有効にします。デフォルトは`false`です。

- 話者分離には音声認識が必要です。`source`が`auto`でも、`diarize: true`を指定すると字幕を使わず、直接AI文字起こしを始めます。
- `source: "captions"`と`diarize: true`は併用できません。指定すると`422 invalid_request`を返します。
- 話者には`Speaker 1`、`Speaker 2`のようなラベルが付きます。JSONでは`transcript.speakers`と各セグメントの`speaker`を確認します。`text`・`srt`形式では発言の前に`Speaker 1: `が付き、`vtt`形式では`<v Speaker 1>`というvoiceタグを使います。

```json
{ "platform": "youtube", "url": "https://youtu.be/dQw4w9WgXcQ", "source": "stt", "diarize": true }
```

## 言語を指定する

言語の指定を省略すると、`language`は`auto`になります。明示する場合は、`auto`か、`en`、`de`、`es`などの2文字のISO 639-1コードを指定してください。

- 字幕を使う場合：取得するトラックの言語を選びます。`auto`では動画の元の言語を使います。
- 音声認識を使う場合：音声認識プロバイダーへ言語のヒントとして渡します。`auto`では自動で言語を判定し、各セグメントの`language`にその部分の言語を返します。

文字起こし全体で主に使われている言語は、文字起こしオブジェクトの`language`で確認できます。

## テキストの取得元とデータの違い

テキストをどの方法で取得したかは`transcript_source`に入ります。値は`youtube_captions`、`x_captions`、`tiktok_captions`、`bluesky_captions`、`dailymotion_captions`、`linkedin_captions`、`speech_to_text`のいずれかです。

字幕の種類は`caption_kind`で確認します。`manual`、`auto_generated`、作成元が不明なら`null`です。`null`を投稿者がアップロードした字幕と見なさないでください。

| | `youtube_captions`で`caption_kind`が`manual` | `youtube_captions`で`caption_kind`が`auto_generated` | `speech_to_text` |
|---|---|---|---|
| セグメントの区切り | 字幕キューごとに1つです。 | 字幕キューごとに1つです。 | 話者・言語の切り替わり、文末の句読点、または15秒の上限で区切ります。 |
| `include=words`で取得する単語ごとのタイムスタンプ | ありません（`words`は`null`です）。 | 開始時刻を返します。各単語の終了時刻は、次の単語の開始時刻になります。 | 開始・終了時刻と`confidence`を返します。 |
| 話者分離の有無 | 使えません。 | 使えません。 | `diarize`が`true`なら使えます。 |
| 言語の単位 | 字幕トラック単位です。 | 字幕トラック単位です。 | セグメント単位です。 |

YouTubeの字幕は、`[Music]`などのタグも削らず、公開されたとおりのテキストを保持します。音声認識で処理できる長さは5時間までです。それを超えると`media_too_long`で失敗します。

Xの字幕（`x_captions`）と、TikTok、Bluesky、Dailymotion、LinkedInの字幕で取得できるタイムスタンプはセグメント単位だけです。自動生成字幕も同じで、`include=words`を付けても、各セグメントの値は`words: null`です。話者分離も使えません。

AIによる単語ごとのタイムスタンプが必要なら`source: "stt"`を指定します。話者分離が必要なら、`auto`または`stt`と`diarize: true`を使ってください。

## 字幕とAI文字起こしの料金

どちらを選んでも、メディアの長さ1分につき1クレジットです。分未満の端数は切り上げます。字幕から取得するか、AIで音声を文字起こしするかで料金は変わりません。詳しくは[料金と制限](https://transcript1.com/ja/docs/billing-and-limits)を確認してください。
