Cerlancism/chatgpt-subtitle-translator

Efficient translation tool based on ChatGPT or any OpenAI compatible LLM chat completion API

ChatGPT API SRT字幕翻訳ツール

何であるか – OpenAI ChatGPT(または互換性のある)APIを呼び出すNode.jsユーティリティ。SRT字幕ファイルまたはプレーンテキストを1行ずつ翻訳します。1行対1行の対応を保ちつつ、トークンの無駄を最小限に抑えるように設計されています。

なぜ重要か – 字幕はしばしばタイムスタンプ付きの短い行の大量集まりです。各行を個別にリクエストすると、トークン使用量が爆発し、レート制限に達します。このツールはSRTのオーバーヘッドを除去し、行を知的にバッチ化し、OpenAIの構造化出力およびプロンプトキャッシュ機能を活用して、コンパクトで決定論的な翻訳を実現します。


コア機能(READMEに記載)

  • Web UI + CLI – ブラウザベースのインターフェースとコマンドラインプログラム(cli/translator.mjs)。
  • 構造化出力 – JSON配列、オブジェクト、またはタイムスタンプ対応フォーマットで、モデルが正確に翻訳行を返すように強制します。
  • プロンプトキャッシュ対応 – 最近の翻訳履歴(--context)をオプションで含め、キャッシュされたプロンプト断片を再利用可能。
  • バッチ単位の行処理 – 複数の字幕行を1つのリクエストにグループ化し、1行あたりのトークンオーバーヘッドを削減。
  • OpenAIモデレーションチェック – モデルが拒否する可能性のある入力を事前にフィルタリング(--use-moderator)。
  • ストリーミング進捗 – モデルが応答をストリーミングする間、リアルタイムでターミナルにフィードバック。
  • レート制限対応 – OpenAIのRPM制限を尊重し、中断されたジョブの再開も可能。
  • エージェントモード – 複数回のプロセスで、まずファイルの概要を作成し、洗練された翻訳指示を計画してから翻訳する。長時間または複雑な字幕に適しています。
  • 任意のOpenAI互換エンドポイントに対応 – 例:ローカルのOllamaサーバー。

クイックスタート(READMEから)

# クローンとインストール
git clone https://github.com/Cerlancism/chatgpt-subtitle-translator
cd chatgpt-subtitle-translator
npm install
chmod +x cli/translator.mjs

# APIキーの設定
cp .env.example .env   # その後、.envを編集してOpenAIキーを貼り付け

ファイルの翻訳

cli/translator.mjs --input mymovie.srt --from Japanese --to English

ツールは翻訳されたテキストを含む新しい*.srtファイルを出力します。

ワンオフのプレーンテキスト翻訳

cli/translator.mjs --plain-text "你好"

出力:Hello.


内部での動作仕組み

  1. SRTメタデータの除去 – インデックスとタイムスタンプはモデルに送信する前に削除(またはタイムスタンプモードでは圧縮)。
  2. バッチ作成--batch-sizesまたは--contextのトークン予算に基づく自動サイズに従って、行をグループ化。
  3. プロンプト構築Translate to English(約3トークン)のような最小限のシステム指示に加え、バッチ行を含むJSONペイロード。
  4. モデル呼び出し – 構造化出力(json_schema)を使用することで、応答が翻訳行の配列/オブジェクトであることが保証される。
  5. 再構成 – 返された翻訳を元のSRT形式に再挿入し、タイムスタンプを保持(タイムスタンプモードではエントリをマージ)。
  6. 再試行ロジック – モデルが異なる行数を返した場合、バッチサイズを小さくしてリトライし、無駄なトークンを回避。

特に注目すべきオプション(選択)

  • -r, --structured <mode>array(デフォルト)、objecttimestampagentnoneのいずれかを選択。
  • -c, --context <tokens> – プロンプトキャッシュ用に過去の翻訳履歴から何トークンを含めるか。
  • -b, --batch-sizes <sizes> – 明示的なバッチサイズのリスト(例:100,50,20)。
  • --use-moderator – バッチ送信前にOpenAIモデレーションエンドポイントを実行。
  • -m, --model <model> – デフォルトはgpt-4o-mini。エンドポイントがサポートする任意のモデルが使用可能。
  • -t, --temperature <value> – 決定論的翻訳のために0に設定。
  • --no-prefix-number / --no-line-matching – 严格的1行対1行の強制を緩和。

制限事項と考慮点(READMEより)

  • ツールはOpenAI API(または互換サービス)に依存しています。有効なAPIキーが必要で、トークンコストが発生します。
  • 決定論的出力はtemperature=0推奨されますが、特に曖昧なテキストではモデルが変動する可能性があります。
  • 構造化出力モードは、モデルが提供されたJSONスキーマを理解できる必要があります。古いまたは非ChatGPTモデルは対応していない可能性があります。
  • timestampモードでは出力行数が入力と異なる場合があります(エントリがマージされるため)、進捗の再開は無効になります。
  • 大きな字幕ファイルは、バッチサイズがモデルのコンテキストウィンドウに不適切な場合、複数回のリトライを引き起こす可能性があります。

どの人にとって有用か

  • コンテンツクリエイター – 専用の翻訳サービスに支払いをせずに、映画や動画の字幕を迅速かつ高品質に翻訳したい人。
  • 開発者 – 字幕をインプットするパイプラインを構築し、プログラム可能なAPI駆動型の翻訳ステップを必要とする人。
  • 研究者 – LLMベースの翻訳品質を、行構造データ上で実験したい人。

リンク

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト