Claudeは動画ファイル(mp4・movなど)をそのまま読み込めません。チャットに添付できるのは文書と画像(JPEG・PNG・GIF・WebP)だけで、APIもClaude Codeも入力は画像とテキストです。動画の中身をClaudeに理解させるには、FFmpegで動画を静止画(フレーム)と音声に分け、音声を文字起こししてから渡します。本記事では、その手順と枚数ごとの画像トークンの目安、編集・生成に使うFFmpegスキル、/watch(claude-video)、Remotionの使い分けを、FFmpeg 9.0.2で実際にコマンドを実行した結果とあわせて解説します。
まとめ|Claudeで動画を扱うときの結論
- 読み込み:動画は直接読めないので、
ffmpeg -vf fps=1でフレームを切り出し、音声はWhisperで文字起こしして、画像とテキストをClaude Codeに渡します。 - 枚数と解像度:Claude 4.7以降のモデルでは、1920×1080のフレームは1枚2,691トークンです。1分を1秒間隔で渡すと161,460トークンになるので、幅854px前後に縮小し、シーン検出で枚数を絞ります。
- 手早く済ませる:
/watch(claude-video v0.3.2)を入れると、ダウンロード・フレーム抽出・文字起こしまでを1回の指示で済ませられます。Claudeのチャット画面とCoworkでは動きません。 - 編集:切り抜き・縦型変換・字幕・音声差し替えはFFmpegのコマンドをClaude Codeに書かせて実行します。スキルは必須ではなく、自社ルールを書いた小さなSKILL.mdで十分です。
- 生成:テロップや図解の動画はRemotion(React)でコードとして作ります。公式スキルは
npx remotion skills addで入ります。4人以上の組織はRemotionの有料ライセンスが必要です。
Claudeは動画(mp4)を直接読み込めるか|チャット・API・Claude Codeの対応範囲
結論は「どの入口でも読めない」です。入口ごとに公式の記述を確認します。
Claudeのチャット(Web・デスクトップ・スマホ)で添付できるファイル形式
公式ヘルプUpload files to Claude(2026年7月23日更新)が挙げる対応形式は、文書がPDF・DOCX・CSV・TXT・HTML・ODT・RTF・EPUB・JSON・XLSX、画像がJPEG・PNG・GIF・WebPです。動画形式は入っていません。上限は1ファイル500MB、1チャット20ファイル、画像は8000×8000ピクセルまでです。500MBまで添付できるのは文書と画像の話で、mp4を添付できるようになったわけではありません。
Claude APIの画像入力の上限(枚数・サイズ・解像度)
API側も入力は画像です。Vision(画像入力)のドキュメントは「アニメーションは非対応で、GIFは先頭フレームだけを使う」と明記しています。フレームを渡すときに効いてくる上限は次のとおりです。
| 項目 | 上限 |
|---|---|
| 枚数(claude.ai) | 1メッセージ20枚 |
| 枚数(API・20万トークンのモデル) | 1リクエスト100枚 |
| 枚数(API・それ以外のモデル) | 1リクエスト600枚 |
| 1枚の寸法 | 8000x8000px |
| 21枚以上を送るとき | より厳しい寸法制限(2000px以下なら全環境で通る) |
| 1枚のサイズ(API直) | 10MB(base64) |
| リクエスト全体 | 32MB(標準エンドポイント) |
引っかかりやすいのが21枚以上のときの寸法制限です。ドキュメントによると、制限を超えた画像は「many-image requests」に触れたエラーで拒否され、縦横とも2000px以下にすればどの環境でも通ります。Retinaディスプレイの画面録画(2880×1800など)をそのまま切り出すと超えてしまうので、切り出す段階で縮小しておきます。
Claude Codeで読めるファイルと動画の扱い
Claude CodeのReadツールが特別に扱うのは画像・PDF・Jupyter Notebookで、動画は対象外です(Tools reference)。動画をそのまま渡せるようにしてほしいという機能要望はIssue #12676として2025年11月29日に起票され、2026年10月13日時点でも未解決のままです。そのため、Claude Codeで「動画を読み込む」とは、ffmpegでフレームを書き出してから、その画像を読ませることを指します。
Claude Codeに動画を読み込ませる手順|フレーム抽出と文字起こし
ここからのコマンドは、FFmpeg 9.0.2(2026年9月18日公開の現行安定版)で、1920×1080・30fps・60秒のテスト動画を使って実行しました。FFmpeg自体の導入と基本コマンドはFFmpegの使い方とコマンド一覧にまとめています。
FFmpegの等間隔フレーム抽出|fps=1と縮小指定
まずは1秒に1枚、縮小しながら書き出します(実行環境はFFmpeg 9.0.2・macOS x86_64。容量はテスト動画での値で、映像の内容や画質の設定で変わります)。60秒の動画で60枚になり、フル解像度のJPEGは合計2.3MB、幅1280pxに縮小すると1.7MBでした。
mkdir -p frames
ffmpeg -i input.mp4 -vf "fps=1,scale=854:-2" frames/%04d.jpg
scale=854:-2は「幅854px、高さは縦横比を保って偶数に丸める」という指定です。画面の文字を読ませたい画面録画なら幅1280px、人物や場面の流れだけでよい実写なら幅512〜854pxが目安です。
シーン変化だけを拾う(select)と先頭フレームの落とし穴
カット割りのある動画は、場面が切り替わった瞬間だけを拾うと枚数を減らせます。15秒ごとに映像が切り替わる60秒の動画で試すと、select='gt(scene,0.3)'が拾ったのは15秒・30秒・45秒の3枚で、最初の場面(0秒)が抜けました。先頭も含めるにはeq(n,0)を足します(実行結果は4枚)。等間隔の画像と混ざらないよう、出力先は別のフォルダにします。
mkdir -p scenes
ffmpeg -i input.mp4 -vf "select='eq(n,0)+gt(scene,0.3)',scale=854:-2" -fps_mode vfr scenes/%04d.jpg
もう1つの落とし穴は、gt(scene,0.3)だけの指定では、しきい値を超える変化がない動画から1枚も出ないことです。大きな切り替えのないテスト映像では、PNG出力だと0枚のまま正常終了し、JPEG出力だと「Nothing was written into output file」でエラー終了しました。スライドを切り替えない講義や画面録画では、シーン検出ではなくfps指定を使います。
Whisperによる音声の文字起こしとフレームへの併記
ナレーションや会話はフレームから読み取れないので、文字起こしを添えます。音声だけを16kHzモノラルのWAVに書き出すと、60秒で1.83MB(1,920,078バイト)でした。
ffmpeg -i input.mp4 -vn -ar 16000 -ac 1 -c:a pcm_s16le audio.wav
whisper audio.wav --model turbo --language ja --output_format srt
2行目はopenai-whisper(PyPIの最新版は20250625)のコマンドで、引数は同版のtranscribe.pyで確認しました。openai-whisperは内部でffmpegを呼んで16kHzモノラルに変換するので、mp4を直接渡しても動きます。音声だけを切り出すと、文字起こしサービスに映像データを送らずに済みます。ただし非圧縮のWAVは元のmp4より大きくなることもあるので、送信量を抑えたいときは送信先が対応する圧縮形式も検討します。サービスの比較は文字起こしAPIの比較と選び方を参照してください。
YouTube動画の字幕だけを取るyt-dlpのオプション
YouTubeのURLを渡しても、Claudeは動画を見られません。字幕がある動画なら、映像をダウンロードせずに字幕だけを取るのが一番安く済みます。
yt-dlp --skip-download --write-subs --write-auto-subs --sub-langs ja --convert-subs srt "https://www.youtube.com/watch?v=動画ID"
オプション名はyt-dlpのREADME(最新版2026.08.19)で確認しました。YouTubeを完全に扱うには、yt-dlp-ejsとJavaScriptランタイム(推奨はDeno)も必要です。取得してよいのは、自分が権利を持つ動画か、利用を許された動画に限ります。
Claude Codeへの渡し方(指示の例)
framesフォルダと字幕ファイルを同じ作業フォルダに置き、Claude Codeを起動して次のように頼みます。この例はfps=1で等間隔に切り出した画像用で、「1枚目が0秒・1秒間隔」と伝えると字幕の時刻と突き合わせられます。シーン検出の画像は番号から時刻が分からないので、切り出した時刻の一覧も渡します。短い動作はフレームの間に落ち、文字起こしにも誤りが混ざるため、答えの時刻は元の動画で確認してください。
frames/ のJPEGを番号順に読んでください。1枚目が0秒、1秒間隔で切り出したフレームです。
audio.srt の字幕と突き合わせて、画面で起きていることを時刻付きで10行に要約してください。
フレームの枚数と画像トークンの見積もり(解像度別の試算)
動画を読ませる費用は、ほぼフレームの画像トークンで決まります。Visionのドキュメントによると、画像は28×28ピクセルのブロック単位で数え、トークン数は「⌈幅÷28⌉×⌈高さ÷28⌉」です。Claude 4.7以降の高解像度モデルは長辺2576px・4784トークンまで縮小せずに受け取ります。この式で計算すると次のとおりで、1920×1080の2,691トークンはドキュメントの表の値と一致しました。
| フレームの解像度 | 1枚 | 1分(1fps・60枚) | 10分(1fps・600枚) |
|---|---|---|---|
| 1920×1080 | 2,691 | 161,460 | 1,614,600 |
| 1280×720 | 1,196 | 71,760 | 717,600 |
| 854×480 | 558 | 33,480 | 334,800 |
| 512×288 | 209 | 12,540 | 125,400 |
高解像度ティアのモデルに1920×1080を1分ぶん渡すと、画像だけで161,460トークンです(標準ティアでは1456×819に縮小されて1枚1,560、60枚で93,600トークン)。コンテキストが20万トークンのモデルなら、高解像度ティアで8割、標準ティアでも半分近くを使います。10分を1秒間隔で切り出すと600枚になり、20万トークンのモデルの上限(100枚)を大きく超えます。判断の目安は次のとおりです。
- 1分を超える動画は、フル解像度・1秒間隔で丸ごと渡さない。まず字幕か文字起こしだけで要約させ、見るべき時間帯を決めてから、その区間のフレームを渡す。
- 画面の文字を読ませるときだけ幅1280px、それ以外は幅512〜854pxにする。
- カットのある動画はシーン検出、ない動画は2〜5秒間隔のfps指定で枚数を絞る。
上の表の値は次のPythonで再現できます。高解像度ティアの上限(長辺2576px・4784トークン)以下の画像に使う簡易計算で、上限を超える画像は先に縮小されるため、この式では計算できません。
import math
def tokens(w, h):
return math.ceil(w / 28) * math.ceil(h / 28)
for w, h in [(1920, 1080), (1280, 720), (854, 480), (512, 288)]:
print(w, h, tokens(w, h)) # 2691 / 1196 / 558 / 209
/watch(claude-video)による動画読み込みの自動化
ここまでの手順をまとめて実行してくれるのが、bradautomates/claude-videoのwatchスキルです(MITライセンス、v0.3.2は2026年9月25日公開)。URLかローカルファイルを渡すと、ダウンロード、フレーム抽出、字幕取得または文字起こしまでを行い、時刻付きのフレームとテキストをClaudeに渡します。Claude Code(ターミナル)ではセッション内で次の2行を実行して導入します。
/plugin marketplace add bradautomates/claude-video
/plugin install watch@claude-video
使うときは/watch:watchを選ぶか、「watchスキルで example.mp4 を見て」と頼みます。READMEで確認した仕様のうち、選ぶ前に知っておきたい点は次の3つです。
- エンジン:既定の
autoは、Gemini APIキーがあればGeminiに動画を送って解析させ、なければローカル(ffmpegとyt-dlp)で処理します。ローカルファイルはGoogleのFiles APIにアップロードされ、回答後に削除されます。Googleに動画を送りたくないときは--engine localを指定します。ただし文字起こしにGroqやOpenAIを選ぶと音声は外部に送られ、ローカルで処理しても切り出した画像とテキストはClaudeに渡ります。社外秘の素材は文字起こしの送信先まで確認してください。 - 枚数:detailの既定上限は
efficientが50枚、balancedが100枚で、フレームは既定で幅512pxまでに縮小されます。画面の文字を読ませたいときは--resolution 1024を付けます。 - 使える場所:Claude Code(ターミナル・VS Code・デスクトップアプリのCodeセッション)とCodexでは動きますが、Claudeのチャット画面とCoworkは非対応と明記されています。
10分を超える動画は精度が落ちやすいので、--start 2:15 --end 2:45のように区間を絞って渡すと確実です。
Claude Codeで動画を編集する|FFmpegスキルと実行確認したコマンド
編集は、Claude CodeにFFmpegのコマンドを書かせて実行する形が基本です。まず「ffmpeg skill」の選び方を説明します。
FFmpegスキルは必須ではない|既製スキルと自作SKILL.md
よく紹介されるychoi-kr/claude-ffmpeg-skill(MIT)は、変換・GIF作成・字幕・YouTubeやTikTok向けプリセットなどのレシピ集です。作者自身がREADMEで「ClaudeはすでにFFmpegの知識を持っており、このスキルが無くても一般的な処理はできる」と書いており、最終更新も2025年10月です。導入するなら、Claude Codeでは次の手順です。
git clone https://github.com/ychoi-kr/claude-ffmpeg-skill.git
mkdir -p ~/.claude/skills
cp -r claude-ffmpeg-skill ~/.claude/skills/ffmpeg-usage
実務で効くのは、既製のレシピ集より、次の章で挙げる落とし穴を防ぐ自社ルールを書いたスキルです。SKILL.mdの項目はすべて任意で、推奨されているのはdescriptionだけです(Claude Code公式ドキュメント)。~/.claude/skills/video-rules/SKILL.mdに置く最小例は次のとおりです。
---
name: video-rules
description: mp4の切り出し・変換・字幕焼き込みをffmpegで行うときの社内ルール
allowed-tools: Bash(ffmpeg *) Bash(ffprobe *)
---
- 出力は必ず -c:v libx264 -pix_fmt yuv420p -c:a aac にする
- 秒指定で切り出すときは -c copy を使わず再エンコードする
- 実行後に ffprobe で解像度・長さ・pix_fmt を確認して報告する
allowed-toolsに書いたコマンドは、スキルを呼んだターンの間は確認なしで実行されます。スキルの書き方全般はClaude Skillsとは?SKILL.mdの書き方で解説しています。
切り抜き動画と縦型ショート(9:16)への変換
切り抜き動画は、文字起こしをClaudeに読ませて使う区間を選ばせ、その時刻でffmpegを実行する流れが効率的です。横長の動画から中央を切り出して1080×1920の縦型にするコマンドは次のとおりで、実行すると15秒・1080×1920の動画が出力されました。
ffmpeg -ss 10 -t 15 -i input.mp4 -vf "crop=ih*9/16:ih,scale=1080:1920" -c:v libx264 -pix_fmt yuv420p -c:a aac short.mp4
字幕の焼き込みと音声(BGM)の差し替え
Whisperで作ったSRTはsubtitlesフィルタで映像に焼き込めます。音声の差し替えは、映像を再エンコードせずに音声だけ入れ替えます。2行目は元の音声をすべてBGMに置き換え、-shortestで映像とBGMの短いほうに合わせて終わるので、BGMが短いと動画も短くなります。どちらも実行して出力を確認しました(字幕の焼き込みには、libassを含むビルドのffmpegが必要です)。
ffmpeg -i input.mp4 -vf subtitles=audio.srt -c:a copy subbed.mp4
ffmpeg -i input.mp4 -i bgm.m4a -map 0:v -map 1:a -c:v copy -c:a aac -shortest swapped.mp4
速度変更(setptsとatempo)|「2倍まで」は古い情報
映像はsetpts、音声はatempoで別々に速度を変えます。atempoは「0.5〜2.0倍までなので3倍速は2回つなぐ」と書かれた解説がありますが、FFmpegのフィルタ文書の現行の範囲は0.5〜100です。FFmpeg 9.0.2で20秒を3倍速にすると、6.73秒の動画になりました。ただし文書には「2を超えると音声のサンプルを混ぜずに間引く」とあるので、音質が気になるときはatempo=sqrt(3),atempo=sqrt(3)のように2段に分けます。
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=PTS/3[v];[0:a]atempo=3.0[a]" -map "[v]" -map "[a]" fast.mp4
FFmpegで動画が再生できない・ずれる原因と対処
Claude CodeでFFmpegを実行するときに確認したい失敗条件を、テスト動画での実測結果とあわせて挙げます。出力形式や再エンコードの条件は上の自作スキルに書いておき、実行後にffprobeで結果を確かめる運用にすると防げます。
入力側の-ssと-c copyによる切り出し|直前のキーフレームから入るデータ
再エンコードを省く-c copyは処理時間を短縮できますが、切り出し位置とキーフレームの関係に注意が必要です。キーフレームが0秒・8.33秒・16.67秒にある動画で、-ss 12.5を-iの前(入力側)に置き-t 5 -c copyで切り出すと、出力は5.07秒になり、先頭の映像パケットのタイムスタンプは-4.17秒でした。8.33秒のキーフレームから4.17秒ぶんのデータが「破棄」の印付きで入るためで、表示上の先頭フレームは0秒ですが、ファイルは7.4MBと再エンコード版(3.8MB)の約2倍になりました。再エンコードした場合は5.00秒ちょうどです。秒単位で切り、余分なデータを持ち込みたくないときは再エンコードします。
画像連番からのH.264生成とyuv420p指定|ブラウザ再生の互換性
Remotionや画像の連番から動画を作るとき、-pix_fmtを省くと、PNG連番からはyuv444p(High 4:4:4 Predictive)、JPEG連番からはyuvj420pの動画になりました。yuv444pのH.264は多くのブラウザやスマホで再生できません。-pix_fmt yuv420pを付けるとyuv420p(Highプロファイル)になります。
ffmpeg・yt-dlp・Whisperの未導入時の対処
スキルを入れても、ffmpegなどの実行ファイルは付いてきません。「command not found」と出たら、macOSならbrew install ffmpeg yt-dlp、Windowsならwinget install --id Gyan.FFmpeg --exactで入れます。openai-whisperもffmpegが無いと動きません。FFmpegの版ごとの違いと確認方法はFFmpegの最新バージョンを参照してください。
Claude Codeで動画を生成する|Remotionの公式スキルとVideo Toolkit
Claude自身は動画を出力しません。「Claudeで動画を生成する」とは、Claudeに動画を作るコードを書かせ、レンダリングすることです。テロップ・図解・グラフが中心の説明動画なら、Reactで動画を組むRemotionが向いています。
Remotion公式Agent Skillsの導入コマンド
Remotionは公式のスキル集(remotion-dev/skills)を配布しており、既存のRemotionプロジェクトでは次のコマンドで導入します。CLIの実装(packages/cli/src/skills.ts)を見ると、このコマンドは内部でnpx [email protected] add remotion-dev/skills --yesを実行しています。npmの最新版は4.0.535です。
npx remotion skills add
収録スキルの中身、新規プロジェクトでの導入、Claude Codeでの制作手順はRemotion Agent Skillsとは?12スキルの中身と導入コマンドで詳しく解説しています。
Remotionのライセンス|4人以上の組織は有料
Remotionは誰でも無料で使えるソフトではありません。公式のライセンスFAQによると、個人・3人以下の組織やチーム・非営利団体は商用でも無料ですが、4人以上の組織ではCompany Licenseが必要です。取引先と同じRemotionプロジェクトを共同で開発・運用する場合は、両社の人数を合算して4人以上かどうかを判定します。業務で使うなら、導入前に確認してください。
ナレーションやBGMまで作るならVideo Toolkit
digitalsamba/claude-code-video-toolkit(MIT)は、台本・ナレーション(Qwen3-TTS)・BGM・画像生成・Remotionでの合成・レンダリングまでをまとめたClaude Code用の作業環境です。リポジトリをcloneして/setup、/videoの順に実行します。Node.js 18以上が必要で、音声や画像の生成モデルは自分のクラウドGPUアカウント(ModalやRunPod)に置いて動かします。
FFmpeg型とRemotion型の使い分け
| やりたいこと | 向いている方法 |
|---|---|
| 撮影した動画の切り抜き・縦型化 | FFmpeg |
| 字幕・BGMの追加 | FFmpeg |
| テロップ・図解の説明動画を量産 | Remotion |
| データから毎月のグラフ動画を作る | Remotion |
| ナレーション付きの動画を一から作る | Video Toolkit |
Remotionで書き出した動画をFFmpegで縮小・字幕付けする、というように両方を組み合わせる使い方もよくあります。社内で作った動画を配信・管理する仕組みまで必要になったら、動画配信システム開発のような専用のシステムを検討する段階です。
CoworkやClaudeのチャットで動画を扱うときの制約
ターミナルを使わずに動画を扱いたい場合、Claudeのチャット画面は動画を添付できないので候補になりません。Coworkには次の制約があります。
- ProとMaxプランのCoworkは、2026年10月6日以降、新しいタスクがすべてクラウドで動きます。自分のPCにffmpegを入れても、クラウドの実行環境には入っていません。
- Coworkは自分のPCの
~/.claude/skills/を読みません。読み込まれるのは、claude.aiのアカウントで有効にしたスキルだけです(Claude Code公式ドキュメント)。 - /watch(claude-video)はCowork非対応です。
手元の動画ファイルをffmpegで処理するなら、ClaudeデスクトップアプリのClaude Code(Codeタブ)を使うのが確実です。Coworkの料金や制限はClaude Coworkとは、クラウド移行までの経緯はClaude Cowork発表の内容とその後にまとめています。
Claudeでの動画の読み込み・編集に関するよくある質問
Claudeにmp4をアップロードして内容を読ませられますか?
できません。公式ヘルプの対応形式は文書と画像(JPEG・PNG・GIF・WebP)だけです。ffmpegでフレーム画像を切り出し、音声を文字起こししたテキストと一緒に渡してください。チャット画面で渡す場合は1メッセージ20枚までです。
Claude CodeでYouTube動画を読み込めますか?
URLを渡しても動画は見られません。yt-dlpで字幕だけを取得してテキストで渡すか、/watch(claude-video)にURLを渡します。/watchのローカル処理は字幕があれば字幕を使い、無ければ設定した文字起こしの方式で音声を文字にします。Geminiエンジンを使う場合は、動画そのものをGoogle側で解析します。
Claudeで動画生成はできますか?無料ですか?
Claude自身は動画を出力しません。Remotionのコードを書かせてレンダリングするか、FFmpegのコマンドで素材を加工します。RemotionもFFmpegも無料で使えますが、Remotionは4人以上の組織ではCompany Licenseが必要です。
Claude Code用のffmpegスキルはどれを入れればよいですか?
一般的な変換や切り出しのコマンドは、スキルがなくてもClaude Codeに作成させられます。生成されたコマンドの正しさは、入力条件と出力結果で確認してください。入れるならレシピ集のclaude-ffmpeg-skillより、-pix_fmt yuv420pや再エンコードのルールを書いた自作のSKILL.mdが効きます。読み込み用途なら/watchが手早く使えます。
Coworkで動画編集はできますか?
ProとMaxプランでは2026年10月6日からCoworkのタスクがクラウドで動くため、手元のffmpegや~/.claude/skills/は使われません。動画ファイルの加工は、ClaudeデスクトップアプリのCodeセッション(Claude Code)で行うのが確実です。