

# ChronometricaとPinto Studioを比較：YouTube文字起こしの一括取得

公開YouTube動画のリストがあり、文字起こしを一括で取得したい場合は、Chronometricaを選びましょう。1回の実行で最大1,000件の動画入力を受け付けます。標準のデータセットには、取得に成功した重複のない動画ごとに1行が保存されます。リストの処理をスケジュールし、取得できなかった結果も把握する必要がある場合に適しています。[Chronometricaのドキュメント](https://apify.com/chronometrica/youtube-transcript-scraper)

現在のワークフローで1回の実行につき1本の動画を処理すればよく、タイムスタンプ付きの区間が順番に並んだ配列で要件を満たせる場合は、Pinto Studioを選びましょう。[Pinto Studioのドキュメント](https://apify.com/pintostudio/youtube-transcript-scraper)

主な選択基準は処理の単位です。つまり、ワークフローから各ジョブに何本の動画を渡すかです。一括入力を使うと、開始するジョブの数を減らせます。ただし、速度、費用、文字起こしの精度で優れていることを示すものではありません。

この比較は、2026年10月20日に確認した公開ドキュメントに基づきます。直接比較テストの結果ではなく、ドキュメントに記載された入力と出力を比較します。以下の手順は、動画リストがあることを前提にしています。この手順でリストを整え、少数のサンプルを確認し、テキストを使う前にすべての入力の結果を把握できます。

## ワークフローに合う1回あたりの処理件数を選ぶ

Apify Actorは、データ収集ジョブを行うプログラムです。実行とは、そのプログラムを1回動かすことです。データセットとは、結果の行をまとめて保存したものです。

大きなリストでは、実行回数が収集に伴う作業量に影響します。ワークフローでは、ジョブの開始、識別子の保存、状態の確認、結果の取得が必要です。一括入力を使うと、複数の動画を1回の実行で管理できます。

ドキュメントに記載された処理単位は、次のとおりです。

| 選択基準 | Chronometrica | Pinto Studio |
| --- | --- | --- |
| 1回の実行あたりの入力 | 最大1,000件 | 動画1本 |
| データセットの結果 | 取得に成功した重複のない動画ごとに1行 | 順番に並んだ文字起こし区間を含む1項目 |
| リストの処理スケジュール | リストをバッチに分割 | 動画ごとに1回の実行を開始 |

出典：[Chronometricaのドキュメント](https://apify.com/chronometrica/youtube-transcript-scraper)、[Pinto Studioのドキュメント](https://apify.com/pintostudio/youtube-transcript-scraper)。

Pinto Studioは`videoUrl`と`targetLanguage`を使います。各区間には`start`、`dur`、`text`が含まれます。自動字幕を含め、字幕のある公開動画に対応しています。非公開動画、制限付き動画、字幕のない動画は、ドキュメントに記載された対応範囲外です。[Pinto Studioのドキュメント](https://apify.com/pintostudio/youtube-transcript-scraper)

ワークフローですでに動画ごとのジョブを追跡している場合は、その単位を変えても利点が少なく、作業が増えることがあります。既存の動画リストをもとにワークフローを作る場合は、Chronometricaの一括入力を使うと、処理をまとめやすくなります。

スケジューラーを作る前に、この選択を済ませましょう。スケジューラーとは、実行を開始し、追跡するワークフローの部分です。使う入力単位に合わせて設計し、結果と失敗をどう保存するか確認します。

## テキストを取得する前に字幕のルールを決める

公開動画でも、使える公開字幕があるとは限りません。Chronometricaは、利用可能な字幕を読み取ります。公開字幕がない場合に、音声認識で新たな文字起こしを作ることはありません。すべての動画のテキストが必要なプロジェクトでは、この制限が選択を左右します。字幕の抽出だけでは、その要件を満たせません。[Chronometricaのドキュメント](https://apify.com/chronometrica/youtube-transcript-scraper)

言語は別に決める必要があります。`preferredLanguages`を設定すると、Chronometricaは指定した言語の字幕を必須とします。該当する字幕がない場合は、課金対象外の失敗`LANGUAGE_UNAVAILABLE`を`OUTPUT`に記録します。通知せずに別の言語を返すことはありません。`OUTPUT`は、件数と失敗を報告する実行サマリーです。[Chronometricaの入力スキーマ](https://apify.com/chronometrica/youtube-transcript-scraper/input-schema)

データセットの言語を指定どおりにそろえる必要がある場合は、この厳格なルールを使いましょう。意図しない言語のテキストが気づかないうちにデータセットへ入るよりも、取得できなかった結果を把握するほうが容易です。

収集前に、許可する言語と、手動字幕と自動字幕の両方を認めるかどうかを書き留めます。この2点は別々に決めましょう。字幕トラックが言語のルールを満たしていても、語句の誤りを含むことがあります。

Chronometricaのドキュメントに記載された結果には、選択された言語、利用可能な字幕言語、手動字幕か自動字幕かを示すフラグが含まれます。これらの情報は、収集後にルールを適用する際に役立ちます。ただし、語句が正しいことを示すものではありません。[Chronometricaのドキュメント](https://apify.com/chronometrica/youtube-transcript-scraper)

字幕の欠落が研究の実施を妨げる場合は、別の音声認識処理を使ってよいか、事前に決めましょう。生成した文字起こしには明確な印を付け、後で使う人が抽出した字幕と区別できるようにします。

## 全リストの実行を予定する前に少数で確認する

収集に費用をかける前に、ワークフローの大部分を準備できます。目的は、各入力の結果を把握でき、返されたテキストを使えることを確かめることです。

1. 対象とする動画と言語を定めます。どの公開動画を収集対象にするか明示します。言語のルールと字幕のルールを記録します。対象外の動画は、除外理由とともに別の記録に保存します。これにより、後で件数に差が出ても、収集の失敗と誤解することを防げます。
2. リストを分割する前に、重複する動画を特定します。動画の識別には動画IDを使います。異なる2種類のURLが同じ動画を指すことがあります。Chronometricaは、通常の動画リンク、Shortsリンク、短縮リンク、動画IDそのものなど、複数の形式を受け付けます。重複する動画は1回だけ処理します。先にリストを整理すると、予定件数を確認しやすくなります。[Chronometricaのドキュメント](https://apify.com/chronometrica/youtube-transcript-scraper)
3. 最初の確認に使う公開動画を数本選びます。異なるチャンネルや字幕の種類など、プロジェクトにとって重要な例を含めます。全リストに使う予定の言語ルールを適用します。緩い設定で確認しても、最終的な厳しいルールで要件を満たせるかは分かりません。
4. 入力件数が1,000件以下のバッチを作ります。重複する動画IDを取り除いた後に件数を数えます。実行を開始した後は、バッチのリストを変更しません。後で変更する場合は、新しいバッチの記録として保存します。公開されている[YouTube文字起こし一括抽出の例](https://apify.com/chronometrica/youtube-transcript-scraper/examples/batch-youtube-transcript-extraction)に、一括入力の上限が記載されています。
5. 入力と実行の記録を保存します。各入力を追跡する表である管理台帳を使いましょう。動画ID、バッチID、実行ID、結果、再試行フラグ、選択された言語、取得時刻を保存します。これらはワークフローで追跡するための列であり、Actorへの追加入力フィールドではありません。不明な値は空欄のままにするか、不明と記します。
6. 結果が保存される両方の場所を確認します。取得に成功した文字起こしの行をデータセットから集めます。`OUTPUT`で、その実行について報告される入力件数や結果件数と、失敗した入力の詳細を確認します。取得できなかった結果を個々の入力まで追跡する必要がある場合は、`includeFailedInputDetails`を有効にします。データセットのエクスポートだけでは、送信したすべての動画の結果を把握できません。[Chronometricaのドキュメント](https://apify.com/chronometrica/youtube-transcript-scraper)
7. テキストを取り込む前に、重複を除いたすべての入力の結果を把握します。成功した行を動画IDと照合します。残った入力を失敗の記録と照合します。結果が不明な入力があれば調べます。重複した入力項目と、重複のない動画を分けて管理します。これにより、処理を省略した重複項目を、取得できなかった文字起こしとして数えずに済みます。
8. 少数の箇所を選び、動画と照合します。元の音声を聞き、語句とタイムスタンプを比較します。名前、数値、専門用語、引用する予定の箇所を含めます。見つかった問題を記録します。この確認で分かるのは、字幕が自分の作業に適しているかどうかです。一般的な精度のスコアが得られるわけではありません。
9. 未解決の欠落を明確に残します。再試行可能と記された失敗だけを、予算と取得元に関するルールの範囲内で再試行します。字幕がない場合は、何度も試すのではなく、別の判断が必要です。プロジェクトで生成した文字起こしが認められる場合に限り、別の音声認識処理を使い、その結果だと明確に分かる印を付けます。

最初の確認では、2つの問いに答えられる必要があります。返されたテキストを使えるか。そして、取得できなかったすべての結果を説明できるかです。どちらかが不明なら、バッチの件数を増やす前に、ワークフローの該当部分を修正します。

## 確認済みの入力構造から始める

次の例は、確認済みの公開入力スキーマに合っています。入力としての確認は済んでいますが、有料のActorジョブとして実行したものではありません。例のURLを、自分の動画URLに置き換えてください。字幕が利用できるかどうかは変わることがあります。

```json
{
  "startUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "https://www.youtube.com/watch?v=M7lc1UVf-VE",
    "https://www.youtube.com/watch?v=jNQXAC9IVRw"
  ],
  "preferredLanguages": ["en"],
  "outputFormats": ["json", "text"],
  "includeFailedInputDetails": true
}
```

確認済みの入力構造から始める

`startUrls`には3個の文字列が含まれ、上限の1,000件を下回っています。`preferredLanguages`は英語を指定します。`outputFormats`は、対応するJSON形式とテキスト形式を指定します。`includeFailedInputDetails`は、文字起こしが返されなかった入力の詳細を有効にします。[Chronometricaの入力スキーマ](https://apify.com/chronometrica/youtube-transcript-scraper/input-schema)

この言語設定では、指定した言語の字幕がない動画は失敗となり、`OUTPUT`に記録されます。空の文字起こし行になるわけではありません。結果を取り込むときも、この違いを保ちましょう。テキストの欠落はデータの欠落であり、単語数が0の文字起こしではありません。[Chronometricaのドキュメント](https://apify.com/chronometrica/youtube-transcript-scraper)

少数で実行した後は、取り込み処理を作る前に、実際のエクスポート内容を確認します。動画を識別する情報、言語、タイムスタンプ付きの区間、結合されたテキスト、取得時刻を読み取れるか確認します。これらはドキュメントに記載された出力情報です。ただし、プロジェクトで必要な情報を保持できるよう、自分の取り込み処理を作る必要があります。[Chronometricaのドキュメント](https://apify.com/chronometrica/youtube-transcript-scraper)

字幕の収集について詳しくは、[YouTube字幕の抽出](/ja/articles/youtube-%E6%96%87%E5%AD%97%E8%B5%B7%E3%81%93%E3%81%97%E3%81%AE%E5%8F%96%E5%BE%97-%E5%AD%97%E5%B9%95%E3%81%AE%E7%A2%BA%E8%AA%8D/)を参照してください。この比較では、1回あたりの処理件数の選択と結果の扱いに焦点を当てます。

## 架空の例：重複のない1,100本の動画の実行を予定し、結果を確認する

この例はすべて架空です。入力件数と字幕の取得結果は、判断方法を示すために作ったものです。テスト結果や顧客の実績ではありません。

ある研究チームが、1,200件の入力項目から作業を始めます。重複する動画IDを100件特定し、その重複項目を取り除きます。整理したリストには、重複のない動画が1,100本残ります。

Chronometricaでは、チームは2つのバッチを作ります。一方は1,000件、もう一方は100件の入力です。予定する実行回数は次のとおりです。

`ceil(1,100 / 1,000) = 2 runs`

ここで、`ceil`は小数点以下を切り上げて整数にすることを意味します。この計算は、ドキュメントに記載されたバッチの上限に基づきます。[Chronometricaのバッチ例](https://apify.com/chronometrica/youtube-transcript-scraper/examples/batch-youtube-transcript-extraction)

Pinto Studioのドキュメントに記載された動画1本単位の処理では、同じリストに対して1,100回の実行を予定する必要があります。[Pinto Studioのドキュメント](https://apify.com/pintostudio/youtube-transcript-scraper)

この違いは、ワークフローが開始するActorジョブの数に関するものです。ネットワークリクエスト数、計算時間、総費用、成功率を比較するものではありません。どちらのワークフローでも、各動画を処理する必要があります。

次に、900本の動画では指定した言語の字幕を利用でき、200本では利用できないと仮定します。この架空のケースでは、Chronometricaの2回の実行全体で、次の件数が想定されます。

`1,100 unique inputs = 900 successful transcript rows + 200 failed inputs`

チームは、成功した行をデータセットから読み取り、失敗した入力の詳細を2つの`OUTPUT`サマリーから読み取ります。その後、重複のないすべての動画の結果が分かるよう、管理台帳を更新します。この手順では、Chronometricaのドキュメントに記載された結果と失敗の記録を使います。[Chronometricaのドキュメント](https://apify.com/chronometrica/youtube-transcript-scraper)

この架空の例で、字幕を利用できる割合は次のとおりです。

`900 / 1,100 × 100 = 81.82%`

この割合は、架空の収集結果を表しています。実測した製品の成功率や精度のスコアではありません。

チームは、200件の欠落をすべて収集記録に残します。空のテキストで置き換えたり、発話のない動画として扱ったりしません。削除した100件の重複項目も保存します。これにより、元の1,200件の入力から、重複のない1,100本の動画と900行の文字起こしに至る過程を説明できます。

## 処理量を増やす前にデータセットを確認する

大きなデータセットでは、結果の欠落を見落とすことがあります。確認の際は、まず件数を調べ、その後に内容を確認します。

Chronometricaの`OUTPUT`サマリーは、受け付けた入力、処理した重複のない動画、成功した行、処理を省略した重複項目、利用不可または非対応の入力、エラーコードごとの件数を報告します。任意で有効にできる詳細情報は、文字起こしが得られなかった入力の追跡に役立ちます。これらの記録を使って、結果の件数を説明します。[Chronometricaのドキュメント](https://apify.com/chronometrica/youtube-transcript-scraper)

サマリーの各件数が、それぞれ別のグループを表すとは考えないでください。入力の管理台帳を使い、重複のない各動画に現在の結果を1つ割り当てます。エラーコードはその結果の理由として保存し、別の動画として加算しません。

次に、テキストの品質を確認します。長い文字起こしにも、誤った語句が含まれることがあります。タイムスタンプがあっても、音声との位置がずれていることがあります。テキストを引用したり、用語を比較したり、話者の発言について述べたりする前に、元の該当箇所を確認します。値が不明な場合は、不明のまま保持します。

公開されている[DataHoarderの大量のYouTube文字起こしを求める投稿](https://www.reddit.com/r/DataHoarder/comments/1pyxgiu/wherehow_to_get_large_amounts_of_youtube_video/)には、約500,000件の文字起こしが必要だという内容と、バッチの上限、費用、取得元によるアクセス遮断への懸念が記されています。これは、実行スケジュールの管理が重要な理由を示しています。ただし、どちらのActorでも、その規模の収集を確実に完了できると示すものではありません。

小規模な収集の全結果を把握し、その欠落を理解してから規模を広げます。次の段階には支出の上限を設定します。この比較は、価格面の優位性や完了までの時間を示すものではありません。

動画を探す作業も必要な場合は、別のガイドである[検索結果からYouTube文字起こしコーパスを作る方法](/ja/articles/youtube-%E6%A4%9C%E7%B4%A2%E7%B5%90%E6%9E%9C%E3%81%8B%E3%82%89%E4%BD%9C%E3%82%8B%E5%AD%97%E5%B9%95%E3%82%B3%E3%83%BC%E3%83%91%E3%82%B9/)を使ってください。URLリストができたら、この記事のバッチと結果の確認手順に戻ります。

## Chronometricaで少数の動画を一括取得する

既存の動画リストがあり、一括処理のスケジュール管理が役立つ場合は、[Chronometrica YouTube Transcript Scraper](https://apify.com/chronometrica/youtube-transcript-scraper)から始めましょう。例のURLを置き換え、字幕言語のルールを設定し、失敗した入力の詳細を有効にします。実行を開始する前に、入力リストを保存します。

実行後は、データセットを`OUTPUT`と管理台帳に照らして確認します。いくつかの箇所を元の動画と照合します。すべての入力の結果が分かり、テキストが要件を満たしていることを確認したら、1,000件以下のバッチにも同じ手順を適用します。

## 出典と参考資料

- [Chronometrica YouTube Transcript Scraperのドキュメント](https://apify.com/chronometrica/youtube-transcript-scraper)
- [Chronometricaの入力スキーマ](https://apify.com/chronometrica/youtube-transcript-scraper/input-schema)
- [YouTube文字起こし一括抽出の公開例](https://apify.com/chronometrica/youtube-transcript-scraper/examples/batch-youtube-transcript-extraction)
- [Pinto Studio YouTube Transcript Scraperのドキュメント](https://apify.com/pintostudio/youtube-transcript-scraper)
- [大量のYouTube文字起こしを求める公開投稿](https://www.reddit.com/r/DataHoarder/comments/1pyxgiu/wherehow_to_get_large_amounts_of_youtube_video/)