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.
内部での動作仕組み
- SRTメタデータの除去 – インデックスとタイムスタンプはモデルに送信する前に削除(またはタイムスタンプモードでは圧縮)。
- バッチ作成 –
--batch-sizesまたは--contextのトークン予算に基づく自動サイズに従って、行をグループ化。 - プロンプト構築 –
Translate to English(約3トークン)のような最小限のシステム指示に加え、バッチ行を含むJSONペイロード。 - モデル呼び出し – 構造化出力(
json_schema)を使用することで、応答が翻訳行の配列/オブジェクトであることが保証される。 - 再構成 – 返された翻訳を元のSRT形式に再挿入し、タイムスタンプを保持(タイムスタンプモードではエントリをマージ)。
- 再試行ロジック – モデルが異なる行数を返した場合、バッチサイズを小さくしてリトライし、無駄なトークンを回避。
特に注目すべきオプション(選択)
-r, --structured <mode>–array(デフォルト)、object、timestamp、agent、noneのいずれかを選択。-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ベースの翻訳品質を、行構造データ上で実験したい人。
リンク
- Web UI – https://cerlancism.github.io/chatgpt-subtitle-translator
- 移行ガイド –
docs/CHANGELOG.md#300-2026-03-01 - OpenAI APIドキュメント – README全体に価格、レート制限、構造化出力に関する参照があります。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト