Communityコーディング&開発github.com

jiajunzeng789/cantonese-subtitle-skill

車の粤語音声をローカルのデュアルモデルで認識し、言語モデルで校正。縦横の画面に合わせて改行し、1行・句読点なしの簡体字中国語SRTを生成。数値や固有名詞に必要な記号は保持し、元のメディアタイムラインと同期。

cantonese-subtitle-skill とは?

このスキルは、自動車関連の粤語(広東語)音声・動画から、縦横の画面サイズに最適化された簡体字中国語のSRT字幕を生成します。Whisper large-v3 と Qwen3-ASR-1.7B の2つのローカル音声認識モデルを使用し、認識結果を言語モデルで校正。句読点を除去し、各字幕は1行の意味単位で区切られます。数値(例:1.8メートル)や固有名詞(例:CX-5)に必要な記号は保持。全ての処理はローカルで完結し、音声・動画データは外部APIに送信されません。主にClaude CodeなどのAIエージェント上で動作し、長尺動画の分割処理、誤認識の修正、画面アスペクト比に応じた改行などを自動化。最終的にUTF-8のSRTファイルを出力し、元のメディアタイムラインと正確に同期します。不明点や校正が必要な箇所は.review.srtとしてマークされるため、人手による確認も容易です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jiajunzeng789/cantonese-subtitle-skill/tree/HEAD/skills/auto-cantonese-subtitles

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

車向け粤語書面語単行字幕

実行境界

  • 音声認識とメディア処理はローカルで完結し、音声・動画を認識APIにアップロードしない。準備時に公開モデルと依存関係をダウンロードすることは可。オフライン処理時は自動ダウンロードやクラウド利用を行わない。
  • 校正は現在のアシスタントが行う。アシスタントがオンラインモデルを使用する場合、書き起こしテキストはオンラインモデルに渡されるため、全工程オフラインとは表現しない。ユーザーがテキストもオフラインで処理するよう要求した場合、ローカルテキストモデルを使用する。不足している場合は実際の制約を説明する。
  • 最終成果物は UTF-8 エンコードの .srt ファイル。各字幕は1行のみで、元メディアのタイムラインと同期していること。プレーンテキストの台本で代用しない。
  • デフォルトでは句読点を付けない。ただし数値、単位、固有名詞に必要な記号(例:1.8メートル、30%、-5℃、0—100km/h、CX-5)は保持する。「句読点なし」を「すべての非漢字文字を削除すること」と誤解してはならない。
  • 入力ファイル、元の認識結果、校正記録、最終字幕はそれぞれ別々に保存し、元のファイルを上書きしない。

環境とタスクフィードバック

  • 最初にリストを表示し、その後実行する。 references/task-progress.md の状態定義を使用し、各ステップの検証が通った時点でチェックを入れる。ステップ開始時、完了時、失敗時、またはユーザー待ち時に即座に更新する。長時間タスクでは、実行機会がある場合、約60秒ごとに現在のステップ、経過時間、および最近の進捗を報告する。パーセンテージを捏造したり、ソフトウェアがサポートしていないバックグラウンドプッシュを約束したりしない。
  • 統一的なスクリプト準備と自己チェック。 初回準備時または環境障害時は、まず references/runtime-setup.md に従い scripts/setup_runtime.py を実行する。その場でインストールコマンドを組み立てたり、依存関係のバージョンを勝手に変更したりしない。スクリプトはまず、ローカルの記録、既知の環境、ユーザー指定のインタプリタを読み取り専用でチェックする。条件を満たせば再利用し、そうでなければ専用環境を段階的に作成する。インストールログと進捗はファイルに書き込む。音声デコード、モデルロード、短いサンプルの推論をそれぞれ検証する。依存関係の障害に対するさらなる処理は references/environment-recovery.md を参照。システムのPythonは変更せず、開発者PCのパスをハードコードしない。
  • 国内ネットワークの場合は、まずダウンロード元を確認する。 依存関係のインストールが必要な場合、まず国内の信頼できるHTTPSミラーの到達可能性と必要なバージョンを確認し、その後今回のコマンドに対して一時的に指定する。pipのグローバル設定は変更しない。注意喚起は実際のパッケージ名、入手元、および取得可能なダウンロード進捗を表示する必要がある。「PyTorchは大きいのでお待ちください」のような漠然とした表現や、すべての依存関係のサイズをPyTorchのサイズとして計算することは避ける。詳細は環境復旧の説明を参照。
  • まず証拠を確認し、その後障害を修正する。 完全なエラーと終了コードを保持する。ネットワークエラー、ビルド/バージョンエラー、権限エラー、および確認されたセキュリティブロックを区別する。pipの失敗、一時ディレクトリ、ファイル削除といった単語だけではセキュリティブロックと判断できない。デフォルトで防御を無効にしたり、未知のファイルを許可したり、再起動を要求したりしない。ユーザーの操作が必要な場合は、具体的な根拠、対象操作、影響、および復旧方法を説明する。
  • 失敗しても再開可能。 基本ツール、Whisper、Qwen を段階的に準備し、ログを保存する。同じエラーに対して、根拠に基づいて修正した後、最大1回自動リトライする。それでも失敗した場合は、そのステップを停止し、中断点を報告し、そのステップに依存しない作業を続行する。ユーザーが「続けて」と言った場合、まず記録と実行中のタスクを確認し、有効な中断点から再開する。インストールやダウンロードを新たに開始しない。

ワークフロー

  1. 完成品のアスペクト比を決定する。 動画の場合は scripts/subtitle_profile.py を使用して表示サイズを検出する。回転とピクセルアスペクト比を考慮し、MP3のカバーアートなどの添付画像は無視する。最終的な編集サイズをソース動画よりも優先する。ユーザーが縦画面を指定した場合、横画面のソースファイルに横画面のプリセットを適用してはならない。音声にはアスペクト比がない:ユーザーから既に与えられた完成品の設定を使用する。不明な場合は横画面か縦画面かを質問する。またはユーザーが必要とする場合、両方のセットを出力してもよい。推定を自動認識と呼んではならない。詳細は references/subtitle-layout.md を参照。
  2. ローカル認識とクロスチェック。 モデルの完全性をチェックする。Whisper large-v3 と Qwen3-ASR-1.7B を使用し、元のテキストと時間データを保持する。Qwenのデフォルト出力テキストはクロス校正に使用する。時間位置はWhisperと元の音声を参照する。追加のアライメントが必要で検証が通った場合のみ、オプションのForcedAlignerをロードする。アライメントモデルを基本実行の必須ダウンロードとしない。同じ素材、同じ背景語で比較する。短いサンプルは順次実行する。180秒を超える場合は scripts/transcribe_long.py を使用して、重複ウィンドウ、一意のファイル名、時間オフセット、および完了した結果の再利用を管理する。シェルループをその場で書かない。スクリプトは時間とテキストの両方が一致する重複セグメントのみを控えめに除去する。その他の継ぎ目はレビュー待ちとする。デュアルモデルと元の音声を組み合わせて意味的な重複除去を実行する。ウィンドウの本文を直接つなぎ合わせて最終稿にしてはならない。実行説明は references/local-testing.md を参照。初回比較はプロンプトなしの結果をベースラインとする。欠落セグメント、重複、疑わしい追加コンテンツは、元の音声の短いクリップで再テストする必要がある。1つのモデルのみで正しいと判断してはならない。
  3. 先に校正、その後改行。 現在のアシスタントは、2つのモデルの元のテキスト、隣接するコンテキスト、およびローカルの用語資料を参照し、references/editorial-rules.md に従って固有名詞と同音異義語の候補を修正し、句読点を保持した簡体字書面語の作業原稿を生成する。条件、否定、数字、推測、立場を保持する。言語推論は候補を生成するのみであり、聴音や外部検証に等しいものではない。
  4. アスペクト比に従って意味単位で1行に分割する。 1つの長い文が1つの字幕行を独占することを要求しない。長い文を連続的で自然な意味上の短い文に書き換えることを許可する。各字幕は1つの明確な小さな意味を表現できること。固定文字数で強制的に分割してはならない。ブランド・車種、氏名、固有名詞、数字と単位を分割してはならない。孤立した接続詞や中途半端な主語/動詞目的語構造を生み出してはならない。可能な限りアスペクト比の推奨長さに収めること。短い回答の場合、文字数を稼ぐために内容を補ってはならない。短くするために条件、数字を落としたり、見解を変えたりしてはならない。上限を超える場合は、再度書き換えるか文を分割する。折り返しや切り詰めは行わない。
  5. 複数話者の発言は別々に処理する。 異なる人の質問と回答を1つの文や同じ行にまとめない。2行の会話を同じ画面に表示して短い字幕を回避するために使用しない。短い応答には実際の音声区間を使用する。無音の隙間で表示時間を適宜延長してもよいが、次の話者の発言を超えてはならない。話者分離がない場合、テキストから人物の身分を捏造しない。話順が不明確または音声が重なっている部分はレビュー待ちとする。話者混同が解決されたことを保証しない。
  6. 意味単位ごとに時間をマッチングする。 対応する元の単語/セグメントの開始点と終了点を使用する。ソースマッピングとメディアオフセットを保持する。分割された新しい短い文は、音声を再配置する必要がある。古い長い文の時間を文字数で均等に割り振ってはならない。元の粤語の書き起こしのみを強制アライメントに使用できる。書き換えた普通話のテキストで粤語の発音をアライメントしてはならない。アライメントに失敗した場合は再聴/再アライメントする。正確な時間を偽造しない。
  7. 最後に句読点を除去してエクスポートする。 改行と時間が確定した後、エクスポーターは句読点を除去し、余分なスペースを統合し、簡体字に変換する。必要な記号は保護する。クリーンアップ後、単行、幅、速度、重複、およびオーバーフローを再検証する。字幕JSONには media_duration、subtitle_profile、cues を含める。オプションで protected_terms を含めてもよい。スキーマと呼び出し方法はアスペクト比の説明を参照。scripts/export_srt.py は改行、幅超過、または明らかな粤語残存を検出した場合、エクスポートを拒否する。セマンティクス/時間を修正してから再試行する必要がある。チェックを迂回してはならない。
  8. プレビューと承認。 完成品のフォント、フォントサイズ、セーフエリアを設定する際は、まずフォント幅を測定する。漢字幅のみを使用した推定の場合、その限界を明確に示す。SRTはアスペクト比やスタイルを確実に伝達できない。編集ソフトウェアが自動的に改行する可能性があるため、同じ字幕プリセットに一致させ、最終アスペクト比でプレビューする必要がある。実際に再聴/再生した場合のみ、同期が検証されたと報告する。構造チェックのみでは、正確性や音声と画像の同期が合格したとはみなされない。

成果物

  • <素材名>_横画面.srt / <素材名>_縦画面.srt。未解決の固有名詞、内容、話順、または時間の疑念がある場合は、.review.srt としてレビュー待ち稿をマークする。
  • 疑念リストは、時間位置、元の認識結果、候補、根拠、および未解決の理由を独立して記録する。説明を公開字幕の本文に詰め込まない。
  • 完成品プリセットの出典(実際の検出、ユーザー指定、単なるアスペクト比のオプション)を同期的に記録する。元の動画サイズを最終的な完成品サイズと同一視してはならない。
  • テスト用に、各モデルの元の結果と統合校正記録を保持する。認識、書き換え、改行、およびタイムラインの問題を区別する。統合校正稿を単一モデルの独立した精度とみなしたり、人間による参照稿がない状態で精度を報告したりしてはならない。

関連スキル