video-subtitles について
動画の文字起こし、字幕の追加、文字起こしテキストの翻訳に使うVideoDBスキルです。コネクタツールまたはPython SDKの利用方法に加え、非同期処理や字幕スタイルの設定方法も案内します。
主な機能
- 01通常またはタイムスタンプ付きの文字起こし
- 02動画への字幕焼き込み
- 03字幕の外観設定
- 04タイムスタンプ付きセグメントの翻訳
- 05字幕付き動画のMP4ダウンロード
活用シーン
- 01文単位の時刻付き文字起こしを作成
- 02動画にスタイル付き字幕を付ける
- 03文字起こしを別の言語に翻訳
MCP 対応
VideoDBコネクタツールがある場合、文字起こし、字幕追加、翻訳、動画のダウンロードを行う手順を案内します。利用できない場合のPython SDK経由の方法も記載されています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ video-db/ skills --skill video-subtitlesインストール後、Claude Code で/video-subtitlesを入力して読み込まれたか確認します。
詳細
字幕とトランスクリプト
どの方法を使うか
- VideoDB コネクタツールが使える場合(
generate_transcript、add_subtitles、translate_transcript、upload_mediaなどの名前):それらを使います。Claude のウェブ、デスクトップ、モバイルのチャット、および Cowork ではこの方法を使います。何もインストールせず、API キーも求めないでください。 - VideoDB ツールはないものの、シェルを使える場合(Claude Code、Cowork、Python を実行できるエージェントなど):VideoDB API キーを一言で気軽に尋ねます(https://console.videodb.io で無料、20 ドル分のクレジット付き、カード不要)。ユーザーがチャットまたは別の方法でキーを渡したら、自分でプロジェクトの
.envにVIDEO_DB_API_KEYとして保存し、決して表示せず、このファイルの末尾にある Python SDK の方法を続けます。Claude Code では、/mcpから videodb を認証する方法も使えます。 - VideoDB ツールもシェルもない場合:Claude のチャットを使っています。依頼内容に合わせて、次の文だけを返信します。「VideoDB はまだ接続されていません。設定 → コネクタを開き、VideoDB を見つけて[接続]をクリックし、ログインしてください(無料、カード不要)。その後、もう一度この依頼を送っていただければ、こちらで対応します。」ここでは API キー、
.env、シェル、Claude Code、/mcpに触れないでください。チャットではこれらは使えず、コードを実行できないため、チャットに貼られたキーも使用できません。
ユーザーとのやり取りでは、返信に「インデックス」「インデックス済み」「インデックス作成」という語を決して使わないでください。「検索可能になりました」(「話された内容と映像に映っている内容で検索できます」)と言い、「ジョブ」と呼ぶのではなく「文字起こしする」と表現してください。一度に伝えるステータスは1行にしてから、結果を伝えます。
時間のかかる処理では status: processing が返されます。返信には output_url と、ポーリングに使うツール名(poll_with。古いサーバーでは retry_with)が含まれます。done になるまで、そのツールに output_url を渡して呼び出してください。processing が何度か続けて返るのは通常です(10分の YouTube アップロードなら、約5回です)。結果が空の done が返された場合は、もう一度ポーリングしてください。書き込み操作を再実行しないでください。別のジョブが開始されます。
コネクターツールを使う場合
動画を取得します。 まず search_videos_by_title(query) を実行します。動画がすでにアカウントにある場合は、m- ID を再利用します。そうでない場合、YouTube のリンクまたは公開 URL なら upload_media(url) を実行し、done になるまでポーリングして、m- ID を控えます。ローカルファイルはコネクター経由で送信できません。ユーザーに https://console.videodb.io からアップロードしてもらい、m- ID を共有してもらいます。
文字起こし。 generate_transcript(media_id) を実行します(音声が英語以外の場合は language_code を追加します)。done になるまでポーリングし、文ごとのタイムスタンプを取得するには get_transcript(media_id, timestamped=true, segmenter="sentence") を、プレーンテキストを取得するには timestamped=false を指定します。デフォルトのセグメンターは単語ごとに1セグメントを作成し、タイムスタンプ付きの出力は2000セグメントまでに制限されます。そのため、長い動画では segmenter="sentence" を指定するか、start と end を指定してください。文字起こしジョブの結果にはテキストと単語リストも含まれますが、リストは途中で切り捨てられるため、文字起こしは get_transcript で取得してください。
動画に焼き込まれた字幕。
generate_transcript(media_id)を実行し、doneになるまでポーリングします(動画にすでに文字起こしがある場合は即時完了します)。add_subtitlesは動画の文字起こしを読み取ります。understand_videoで実行したspoken_wordsアナライザーも対象になります。index_spoken_wordsは旧式の v1 呼び出しで、使用する必要はありません。add_subtitles(video_id, ...)を実行します。stream_urlとplayer_urlがすぐに返され、ジョブではありません。- MP4 ファイルを取得するには、
download_stream(stream_url, name="...")を実行してポーリングし、ダウンロードリンクを共有します。
add_subtitles のスタイルオプション:font_name、font_size(8~72、デフォルトは18)、bold、italic、alignment(デフォルトは bottom_center、ほかに top_center、middle_center など)、border_style(outline、opaque_box または no_border)、outline、outline_colour、shadow、margin_l、margin_r、margin_v。色には ASS 形式 &HAABBGGRR を使用します。不透明な白は &H00FFFFFF、黒は &H00000000、黄色は &H0000FFFF です。「黒いボックスに白い文字」を指定するには、primary_colour="&H00FFFFFF", back_colour="&H00000000", border_style="opaque_box" とします。
アニメーション字幕やカラオケ字幕、または合成動画への字幕。 video-edit スキルの render_timeline を caption アセット(src: "auto"、animation: "karaoke")とともに使用します。動画はあらかじめ文字起こしされている必要があります(generate_transcript または spoken_words アナライザーの実行)。そうでない場合、字幕もエラーもない状態でレンダリングが返されます。
翻訳。 translate_transcript(video_id, language="Spanish") は、翻訳済みのタイムスタンプ付きセグメントを返します。テキストまたは SRT 形式のリストとしてユーザーに渡してください。
吹き替えと翻訳音声。 コネクターでは利用できません。Claude Code では SDK が対応します(${CLAUDE_PLUGIN_ROOT}/python/reference/editor.md の吹き替えのセクション)。チャットでは、翻訳済みの文字起こしを提供し、吹き替えには SDK が必要だと伝えてください。
Python SDK を使う場合(Claude Code)
import videodb が失敗する場合は、まず /videodb:setup でセットアップしてください。完全なリファレンス:${CLAUDE_PLUGIN_ROOT}/python/SKILL.md。
from dotenv import load_dotenv; load_dotenv(".env")
import videodb
from videodb import SubtitleStyle, SubtitleAlignment, SubtitleBorderStyle
conn = videodb.connect(); coll = conn.get_collection()
video = coll.upload(url="https://www.youtube.com/watch?v=VIDEO_ID")
video.generate_transcript()
print(video.get_transcript_text())
stream_url = video.add_subtitle(SubtitleStyle(font_size=20, primary_colour="&H00FFFFFF",
back_colour="&H00000000", border_style=SubtitleBorderStyle.opaque_box,
alignment=SubtitleAlignment.bottom_center))
print(f"https://console.videodb.io/player?url={stream_url}")