scenario-caption-studio について
scenario-caption-studioは、Scenarioで動画に字幕を付けるスキルです。完成した動画を各用途向けに仕上げる制作者に向けて、音声の文字起こしやSRT入力、翻訳、字幕の焼き込み・トラック・サイドカー出力を提供します。
主な機能
- 01音声の文字起こしまたは既存SRTの利用
- 02字幕の18言語への翻訳
- 033種類の字幕スタイル設定方式
- 04字幕の分割と位置の指定
- 05字幕焼き込み動画、トラック、SRTの出力
活用シーン
- 01完成したソーシャル動画への字幕付与
- 02翻訳版動画の作成
- 03長尺動画向けクローズドキャプションSRTの作成
- 04編集済みSRTによる字幕の修正や再スタイル
MCP 対応
Scenarioスキルを通じて、ツールモデルmodel_scenario-caption-studio、model_schema_get、model_run、および関連するアセット・ジョブツールを使用します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ scenario-labs/ skills --skill scenario-caption-studioインストール後、Claude Code で/scenario-caption-studioを入力して読み込まれたか確認します。
詳細
シナリオ字幕スタジオ
概要
Caption Studio は、1 つのツールモデル model_scenario-caption-studio です。動画を入力すると、音声を文字起こし(Whisper)するか、既存の SRT を適用し、スタイル付きの字幕を出力します。字幕は映像に焼き込むことも、ソフト字幕トラックと .srt のサイドカーファイルとして出力することもできます。18 言語に翻訳でき、字幕には 3 種類のスタイルを適用できます。このスキルの目的は、このメンバーを実行することだけなので、ID は明示されており、model_schema_get から直接フローを開始します。利用可否はチームごとに異なるため、チームで利用できないメンバーは代替する合図ではなく、確認すべき不足として扱ってください。接続と基本的な流れについては、scenario スキルを参照してください。
字幕付けは、完成した映像の最終工程です。まず組み立て(scenario-video-assembly)を行い、その後、マスターに一度だけ字幕を付けます。字幕に含まれるのは文字起こしのみです。発話されないものの、文字を一字一句正確に表示する必要があるテキスト(CTA、価格、法務上の注記)は、scenario-text-overlay の対象です。ここに記載されている兄弟スキルが利用可能なスキルにない場合は、ユーザーにインストールを依頼してください(npx skills add scenario-labs/skills --skill <name>)。無人で実行する場合は、ツールスキーマに基づいて進め、不足があることを明示してください。
まず確認し、その後キャプションを付ける
配信先によってほぼすべてのパラメーターが決まるため、スキーマに触れる前に一度で必要な回答を集めます。動画の配信先(音声なしのモバイルフィード、有料掲載、着席して視聴する長尺コンテンツ)、話されている言語をそのまま使うか翻訳するか(targetLanguage。そのまま使う場合は auto)、ブランドカラーの有無、プラットフォームが求める納品形式を確認します。納品形式は3つのスイッチで指定します。映像に焼き付ける場合は outputSubtitles: "video_image"(デフォルト)、切り替え可能なトラックは "video_data"、サイドカーファイルは outputSrt: true です。SRTのみの処理では、これに outputVideo: false を加えます。文言を一字一句正確にする必要がある場合は、まずこの処理を行います。制作時の料金は焼き付けの場合と同じなので、節約ではなく確実性を得るためのものです。映像に費用をかける前に、文言を確認できます。次に、回答を以下に当てはめます。
| 配信先 | スタイル | セグメント分割 | 位置 | 出力 |
|---|---|---|---|---|
| ソーシャルメディア向けモバイル短尺(9:16 Shorts、Reels) | tiktok-bouncy または word-pop。音楽主体の場合は karaoke-fill | maxSegmentWords は3~5。カラオケプリセットでは1 | middle:プラットフォームのUIとネイティブの自動キャプションが下部を占める | 焼き付け |
| 広告短尺、パフォーマンス用カット | modern-chip または minimal-underline。アクセントカラーはブランドカラーに設定 | キューあたり3~7語 | bottom。エンドカードやオーバーレイが下部にある場合は top | 音声なしフィード向けには焼き付け。プラットフォームへのキャプションアップロード用に outputSrt を追加 |
| YouTube の長尺動画、チュートリアル、インタビュー | デフォルトのスタイル、または cinematic-fade。控えめな表現がプロらしさを伝えます | maxLines は2、maxSegmentChars は84(1行42文字の2行。放送業界の慣例) | bottom | プラットフォームのクローズドキャプションには outputSrt。再埋め込みの場合のみ焼き付け |
| シネマティック作品、予告編、映画祭向けカット | cinematic-fade | 文単位のキュー、maxSegmentDuration は約6 | bottom | 焼き付け |
各行は、ユーザーに確認するための制作時の出発点であり、プラットフォームの規約ではありません。人の手を介さずに処理する場合は、タスク自体の指示から必要な情報を補い、明示されていない項目には該当する行のデフォルトを適用します。位置ごとの配置安全領域は scenario-formats にあります。middle はフレームの中央に表示されるため、中央に配置された人物の顔を映す映像では口元に重なります。自撮り映像にキャプションを付ける場合、顔が画面の上3分の1に収まるようになってからにします(組み立て時にリフレームしてください)。スキーマには下部3分の1の位置指定がないためです。長尺動画では、アップロード可能なトラックのほうが焼き付けより適しています。視聴者が表示を切り替えたりスタイルを変更したりでき、支援技術で読み上げられ、プラットフォームの検索対象にもなるためです。スタイルが重要な場合や、ファイルと一緒にトラックを配信できない場合は、焼き付けが適しています。
スタイルの段階
3つの段階があります。stylePreset は既製のスタイル(7種類のプリセット。デフォルトでは空)を選び、stylePrompt
はスタイルを平易な言葉で説明して、それに合ったスタイルを作成します(cost_impact に影響します)。themeTsx はプリセットを置き換える完全なカスタムテーマを指定し、さらに stylePrompt でそのテーマを調整します。
フォントのパラメーターはありません。文字のスタイルは各段階に含まれ、スタイルが伝える最も強い要素です。そのため、文字そのものにムードやブランドを担わせる必要がある場合は、意図を stylePrompt
に平易な言葉で記述します(ウェイト、書体の分類、雰囲気:「重厚で幅の狭いサンセリフ、エネルギッシュ」「細身の幾何学的なサンセリフ、落ち着きと高級感」など)。ブランド指定の正確な書体は themeTsx で指定し、scenario-text-overlay はキャプションの周囲に配置するテキストカードに意味に合わせた書体を選びます。プリセットは単語自体のスタイルも変更します。作成時の実行では tiktok-bouncy がすべてのキャプションを大文字にしましたが、ほかのプリセットの大文字・小文字の扱いは未検証です。正確な表記(製品名や「LoRA」など)が重要な場合は、stylePrompt または themeTsx で指定し、納品前にフレームを確認してください。
fontColor は本文テキストの色を設定します(見た目よりコントラストを優先してください。プリセットがどのような背景を配置しても、白い本文テキストなら読みやすさを保てます)。accentColorStart/accentColorEnd はハイライトアニメーション(カラオケ風の塗りつぶしやポップ表示など)を制御します。アクセントは1つの要素、通常はブランドカラーに使い、単色にする場合は同じ値、グラデーションにする場合は異なる値を指定します。自動サイズ設定(fontSizePx が空)の場合、作成時には 1080x1920 のフレームで高さ約30ピクセルの文字がレンダリングされ、スマートフォンのフィードでは読めません。縦型ソーシャル動画では fontSizePx を明示的に設定し(高さ1920のフレームでは、作成時の開始値として60~90が目安です)、スマートフォンの表示サイズでフレームを確認してください。outputTsx: true を指定すると、実行で使用したテーマが返されるため、うまく仕上がったスタイルを次の動画でも正確に再現できます。
正しい単語を使う
- ナレーションの台本を作成した場合は、その台本を表記の参照元として保持します。焼き込みの前に、文字起こしを台本と照合し、抜けた単語、繰り返された単語、変更された単語がないか確認します。スペルのヒントは、この照合作業の代わりにはなりません。キューの時間は、単語数や予定していたショットの長さではなく、実際の録音から算出します。SRTは以下でサポートされている入力を使って修正し、スクリプトとのアラインメント用パラメーターを勝手に作らないでください。
transcriptionPromptはスペルのヒントであり、スタイルを指定するフィールドではありません。音声に含まれる名前、ブランド、専門用語を列挙します。このヒントは正しく認識される確率を高めますが、保証するものではありません(作成時の実行では、ヒントに記載した名前が2回も誤記されました)。焼き込みを信頼する前に、必要な名前がすべて文字起こしに含まれているか確認し、誤りがあればlarge-v3またはより具体的なヒントを使って再試行します。modelSizeは精度と速度およびコスト(cost_impact)のトレードオフです。デフォルトのmediumは、音声がクリアなナレーションに適しています。ノイズのある音声、アクセント、または専門用語が多い場合はlarge-v3に切り替えます。.enバリアントは英語専用です。- モデルはマスターに含まれる音声をそのまま文字起こしするため、字幕を作成する前に、音楽の音量と会話のバランスを調整します(
scenario-video-assembly)。後から調整してはいけません。 - 修正やスタイルの変更には
subtitles入力を使います。この入力の仕様はインラインコンテンツであり、参照ではありません(作成時)。SRTテキスト自体をbase64エンコードし、値として渡します。asset_...IDはここでは参照されません。ID文字列はコンテンツとしてbase64デコードされ、実行は成功と報告され、課金されますが、字幕は0件描画されません(ジョブレコードのsegment_count: 0がその目印です)。したがって、再利用の手順は、outputSrt: trueで文字起こしをアセットとして返し、asset_downloadでダウンロードし、必要に応じて手元でスペルを修正してから、編集したテキストをbase64エンコードして再度入力することです。これにより、upload_assetにテキスト形式がないという問題も回避できます(作成時点での事実)。SRTは実行時のセグメンテーションを引き継ぐため、カラオケ形式の実行では1語ごとにキューが返されます。広告にアップロードする前や、落ち着いたスタイルに変更する前に、手元で再分割します。ジョブのステータスだけを根拠にsubtitlesの実行結果を納品してはいけません。動作例で確認しているように出力全体を確認し、字幕が欠けている場合は、ジョブが使用した字幕アセットをasset_getで取得して、何が受け取られたのかを確認します。スキーマには、セグメンテーションの上限が入力SRTの再分割にも適用されるかどうかが記載されていません。そのため、文字起こし時にセグメンテーションを設定し、subtitlesと併用する場合は上限を省略します。
実践例:縦型ソーシャルショートとスペイン語版
- 組み立て済みのマスターを
asset_getし、尺と完成版であることを確認します。料金は映像素材に応じて変わります(videoにはcost_impactがあります。まずトリミングしてください(scenario-video-editing))。 model_scenario-caption-studioに対してmodel_schema_getを実行します。- 料金を見積もります。
dry_run: trueを指定してmodel_runを実行し、parameters={"video": "<asset_id>", "stylePreset": "tiktok-bouncy", "maxSegmentWords": 4, "textPosition": "middle", "transcriptionPrompt": "Scenario, LoRA, Flux", "outputSrt": true}とします。targetLanguage、modelSize、stylePrompt、またはoutputSubtitlesを変更した場合は再見積もりしてください。 これらはいずれもcost_impactがあります。 wait: falseを指定して実行し、その後job_idを指定してjobs_waitを呼び出します。タイムアウトした場合は、返されたpending_job_idsを指定して再度呼び出してください。job_getをループで呼び出してはいけません。- 成功したジョブは、実際にレンダリングされた内容を保証しないため、派生版を作る前に確認します。
asset_downloadを使って SRT サイドカーをダウンロードします(formatは指定しません。これは画像のみ変換します。動画と SRT の両方を返す実行では、2 つのアセット ID の順序は固定されません。asset_getでmimeTypeを確認すれば見分けられます)。テキストを作成済みのスクリプトおよび必須の名称と照合します。次に動画をダウンロードし、コンタクトシートにまとめます(ffmpeg -vf "fps=2")。焼き込み字幕のスペル、大文字・小文字の使い分け、配置を確認します。背景パネルも含めて、想定される表示サイズで確認してください。顔、手、実演している動作、不可欠な UI が見やすく、字幕の配置が各キュー内で安定していることを確認します。キューの開始と終了に合わせて音声を確認してください。文字起こしが正しくても、同期が取れているとは限りません。キュー境界の直前と直後、およびキュー内のフレームをサンプリングしてください。表示やフェードが指定された SRT の時刻を超えることがあり、100 ms 未満のフラッシュもfps=2の確認で見つかります。厳密な境界が必要な場合は、実際のテーマを検証するか、制約を報告してください。サイドカーが正しいだけでは合格になりません。最後に話された単語が残っているか確認し、音声ストリームと動画ストリームを別々に比較してください。ナレーション全体が収録された短い音声ストリームでは、末尾の無音部分だけが省略されている場合があります。 - スペイン語版では、同じパラメーターに
targetLanguage: "es"を追加し、transcriptionPromptも含めて、料金が変わるため実行前に再度dry_runを行います。翻訳は実行中に行われるため、1 つのマスターから市場ごとのバリアントを作成できます。ラテン文字向けの分割上限は中国語、日本語、韓国語には適用できません(ストリーミングのスタイルガイドでは、1 行あたりの文字数をその 3 分の 1 にします)。そのため、対象言語ごとにmaxSegmentCharsを見直してください。 - マスター、バリアント、SRT アセットをコレクションに登録します(
scenarioスキル)。これにより、納品物一式を見つけやすくなります。
よくある間違い
- 各クリップを編集前に字幕化する:完成したマスターを一度だけ字幕化します。そうしないと、カットをまたいで字幕の位置がずれ、編集のたびに字幕が孤立します。
- ソフトトラックにプリセットの見た目を期待する:
video_dataは、視聴者が切り替えるプレーンテキストとしてレンダリングされます。スタイルが維持されるのは、映像に焼き込んだ場合のみです。 - 法的な文言やCTAを字幕としてスタイリングする:免責事項には固定の文言、サイズ、表示時間があり、字幕ロジックでは再分割や表示タイミングの変更が行われます。また、切り替え可能なトラックは「視聴者の操作なしに表示されること」というルールに明確に違反します。音声で読み上げない正確なテキストは、編集時に合成する
scenario-text-overlayカードにします。 - カラオケまたはポップのプリセットを使わずに
maxSegmentWords: 1を設定する:スタイルでアニメーションしない限り、1語ずつの字幕はスライドショーのように点滅します。ポッププリセット(キュー内の単語を表示するもの:tiktok-bouncy、word-pop、および作成時のカラオケ用2プリセット)を使う場合は、キューの末尾を1文字の単語にしないでください。ポップインのタイミングは文字数に応じて決まるため、末尾の「I」や「a」は作成時に約70ミリ秒しか表示されませんでした。提供されたSRTを再分割する場合は、タイミングも管理する必要があります。提供されたSRTに含まれるのはキューの時間情報のみのため、ポッププリセットでは各キュー内の単語が均等に配置され、キューが音声より長い箇所ではハイライトが音声からずれていきます。各キューの終了を発話の範囲内に収め、最後のキューのみクリップの終わりまで延長してください。 jobs_waitのタイムアウトを失敗として扱う:pending_job_idsを指定して再呼び出ししてください。動画ツールのジョブは通常、待機時間を超えて続きます。