mcpField
C
claude-video-edit

claude-video-edit

github.com/agricidanielクリエイティブ・メディア3145 回インストール29 週間前に更新
リポジトリ

claude-video-edit について

claude-video-editは、FFmpegと関連スクリプトによる動画編集操作を案内するスキルです。トリミングやトランジションから、カラー調整、手ぶれ補正、プライバシー保護のぼかしまで扱います。

主な機能

  1. 01無劣化およびフレーム単位のトリミング
  2. 02クリップの分割と結合
  3. 03速度変更、クロップ、拡大縮小、回転
  4. 04オーバーレイ、テキスト、トランジションの追加
  5. 05カラー補正とLUTグレーディング
  6. 06手ぶれ補正とプライバシー保護のぼかし

活用シーン

  1. 01再エンコードの有無を選んでクリップをトリミング
  2. 02動画を分割または複数ファイルを結合
  3. 03タイトル、ウォーターマーク、ピクチャーインピクチャーを追加
  4. 04指定範囲をぼかす、または手ぶれを補正

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/agricidaniel/claude-video --skill claude-video-edit

インストール後、Claude Code で/claude-video-editを入力して読み込まれたか確認します。

詳細

claude-video-edit — 動画編集操作

事前確認

ファイルを書き込む操作を行う前に、毎回次の手順を実行してください。

  1. bash scripts/preflight.sh "$INPUT" "$OUTPUT" を実行します
  2. 失敗した場合は、処理を中止してエラーをユーザーに報告します
  3. エンコード操作では、エンコーダーを選択するために bash scripts/detect_gpu.sh を実行します

操作

トリミング

ロスレストリミング(キーフレームに合わせてトリミングし、即時に完了します。再エンコードは不要です):

ffmpeg -n -ss HH:MM:SS -i "$INPUT" -t DURATION -c copy "$OUTPUT"

注:高速シークのため、-i の前に -ss を指定します。時間は秒、または HH:MM:SS で指定します。

フレーム単位で正確にトリミング(再エンコードします。任意のフレーム位置で正確にトリミングできます):

ffmpeg -n -i "$INPUT" -ss HH:MM:SS -t DURATION -c:v libx264 -crf 20 -c:a aac "$OUTPUT"

注:フレーム単位の精度を得るため、-i の後に -ss を指定します。精度が重要な場合に使用します。

先頭または末尾から N 秒を削除する:

  • 先頭の 10 秒を削除:-ss 10 -c copy
  • 末尾の 10 秒を削除:ffprobe で長さを取得し、duration - 10 までトリミングします
分割

指定した時刻で分割:

ffmpeg -n -i "$INPUT" -t 60 -c copy part1.mp4
ffmpeg -n -i "$INPUT" -ss 60 -c copy part2.mp4

等しい長さのセグメントに分割:

ffmpeg -n -i "$INPUT" -f segment -segment_time 300 -c copy -reset_timestamps 1 "segment_%03d.mp4"

シーンの境界で分割(PySceneDetect については references/analyze.md を読み込みます):

scenedetect -i "$INPUT" detect-adaptive -t 3.0 split-video
結合

同じコーデックの場合(再エンコードなし):

printf "file '%s'\n" file1.mp4 file2.mp4 file3.mp4 > /tmp/concat_list.txt
ffmpeg -n -f concat -safe 0 -i /tmp/concat_list.txt -c copy "$OUTPUT"
rm /tmp/concat_list.txt

異なるコーデックの場合(再エンコードあり):

ffmpeg -n -i file1.mp4 -i file2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1" "$OUTPUT"
再生速度の変更

2 倍速にする(音声のピッチを補正):

ffmpeg -n -i "$INPUT" -vf "setpts=0.5*PTS" -af "atempo=2.0" "$OUTPUT"

0.5 倍速にする:

ffmpeg -n -i "$INPUT" -vf "setpts=2.0*PTS" -af "atempo=0.5" "$OUTPUT"

速度係数:atempo の有効範囲は 0.5~100.0 です。極端な速度変更には、atempo=2.0,atempo=2.0 のように連結します(4 倍速)。

フレーム補間によるスローモーション(AI で中間フレームを生成):

ffmpeg -n -i "$INPUT" -vf "minterpolate=fps=60:mi_mode=mci:mc_mode=aobmc:vsbmc=1" "$OUTPUT"

警告:非常に時間がかかります(リアルタイムの約 0.05 倍)。短いクリップに最適です。

クロップ、拡大縮小、回転

クロップ(幅:高さ:x:y):

ffmpeg -n -i "$INPUT" -vf "crop=640:480:100:50" "$OUTPUT"

拡大縮小(アスペクト比を維持し、偶数の寸法にします):

ffmpeg -n -i "$INPUT" -vf "scale=1280:-2:flags=lanczos" "$OUTPUT"

パディングを追加して正確なサイズに拡大縮小(レターボックス):

ffmpeg -n -i "$INPUT" -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black" "$OUTPUT"

回転 90° 時計回り:-vf "transpose=1" 回転 90° 反時計回り:-vf "transpose=2" 回転 180°:-vf "transpose=1,transpose=1" 任意の角度:-vf "rotate=PI/6:fillcolor=black" 反転 水平方向:-vf "hflip" | 垂直方向:-vf "vflip"

オーバーレイとウォーターマーク

画像のウォーターマーク(右下、余白 10px):

ffmpeg -n -i "$INPUT" -i logo.png -filter_complex "overlay=W-w-10:H-h-10" "$OUTPUT"

ピクチャーインピクチャー(隅に小さな動画を表示):

ffmpeg -n -i "$INPUT" -i pip.mp4 -filter_complex "[1:v]scale=320:180[pip];[0:v][pip]overlay=10:10" "$OUTPUT"

テキストオーバーレイ:

ffmpeg -n -i "$INPUT" -vf "drawtext=text='My Title':fontsize=48:fontcolor=white:x=(w-tw)/2:y=50:fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:box=1:[email protected]:boxborderw=8" "$OUTPUT"

時間指定テキスト(5 秒から 15 秒の間に表示):

-vf "drawtext=text='Hello':enable='between(t,5,15)':fontsize=36:fontcolor=white:x=10:y=10"
グリーンスクリーン(クロマキー)
ffmpeg -n -i greenscreen.mp4 -i background.mp4 -filter_complex \
  "[0:v]chromakey=0x00FF00:0.1:0.2[fg];[1:v][fg]overlay" "$OUTPUT"

最適な結果を得るには、色の HEX 値、類似度(0.1)、ブレンド(0.2)を調整します。

動画の手ぶれ補正

vidstab を使用する 2 パス処理です:

# Pass 1: Analyze motion
ffmpeg -i "$INPUT" -vf vidstabdetect=shakiness=5:accuracy=15:result=/tmp/transforms.trf -f null -

# Pass 2: Apply stabilization + sharpening
ffmpeg -n -i "$INPUT" -vf "vidstabtransform=smoothing=10:input=/tmp/transforms.trf,unsharp=5:5:0.8:5:5:0.3" "$OUTPUT"

rm /tmp/transforms.trf

shakiness は 1~10 の範囲で指定します(ソースの揺れの強さ)。smoothing は値が大きいほどカメラワークが滑らかになりますが、端がクロップされる場合があります。

トランジション

2 つのクリップ間をクロスフェード(44 種類以上のトランジションを利用可能):

ffmpeg -n -i first.mp4 -i second.mp4 -filter_complex \
  "xfade=transition=fade:duration=2:offset=5" "$OUTPUT"

利用可能な xfade トランジション:fade、dissolve、wipeleft、wiperight、wipeup、wipedown、slideleft、slideright、slideup、slidedown、circlecrop、rectcrop、distance、fadeblack、fadewhite、radial、smoothleft、smoothright、smoothup、smoothdown、circleopen、circleclose、vertopen、vertclose、horzopen、horzclose、diagtl、diagtr、diagbl、diagbr、hlslice、hrslice、vuslice、vdslice、pixelize、squeezeh、squeezev、zoomin、fadegrays、wipetl、wipetr、wipebl、wipebr、coverleft、coverright、coverup、coverdown、revealleft、revealright、revealup、revealdown。

フェードイン/フェードアウト:

# Fade in first 2 seconds
ffmpeg -n -i "$INPUT" -vf "fade=t=in:st=0:d=2" -af "afade=t=in:st=0:d=2" "$OUTPUT"

# Fade out last 2 seconds (get duration first with ffprobe)
ffmpeg -n -i "$INPUT" -vf "fade=t=out:st=OFFSET:d=2" -af "afade=t=out:st=OFFSET:d=2" "$OUTPUT"
色補正

フィルターの全カタログについては references/filters.md を読み込みます。クイックリファレンス:

  • 明るさ/コントラスト:-vf "eq=brightness=0.06:contrast=1.2:saturation=1.3"
  • トーンカーブのプリセット:-vf "curves=preset=lighter"(ほかに darker、increase_contrast、vintage など)
  • カラーバランス:-vf "colorbalance=rs=0.3:gs=-0.1:bs=0.0"
  • 3D LUT:-vf "lut3d=file=my_lut.cube"
  • グレースケール:-vf "colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3"
  • ぼかし:-vf "gblur=sigma=10"
  • シャープ化:-vf "unsharp=5:5:1.0:5:5:0.0"
  • ノイズ除去:-vf "hqdn3d=4:3:6:4.5"(高速)または -vf "nlmeans=s=3.5:p=7:r=15"(最高品質)
コンタクトシート/サムネイルグリッド
ffmpeg -n -i "$INPUT" -vf "select=not(mod(n\,100)),scale=320:180,tile=4x4" -frames:v 1 contact_sheet.png
単一フレームの抽出
ffmpeg -n -ss 00:01:30 -i "$INPUT" -frames:v 1 -q:v 2 thumbnail.jpg
プライバシーぼかし(顔/領域のマスキング)

顔全体の領域をぼかす(静的な座標です。顔のバウンディングボックスを見つけるには、ffprobe または MediaPipe を使用してください):

ffmpeg -n -i "$INPUT" -vf "delogo=x=200:y=100:w=150:h=150" "$OUTPUT"

領域をボックスぼかしする(より細かく制御できます):

ffmpeg -n -i "$INPUT" -filter_complex \
  "[0:v]crop=150:150:200:100,boxblur=10[blur];[0:v][blur]overlay=200:100" "$OUTPUT"

時間範囲を指定してぼかす(5s から 15s の間だけぼかします):

ffmpeg -n -i "$INPUT" -filter_complex \
  "[0:v]split[main][copy];[copy]crop=150:150:200:100,boxblur=10[blur];[main][blur]overlay=200:100:enable='between(t,5,15)'" "$OUTPUT"

全フレームをぼかす(B ロールの背景用):

ffmpeg -n -i "$INPUT" -vf "boxblur=20:5" "$OUTPUT"

フレーム間で AI を活用した顔検出と追跡によるぼかしを行うには、MediaPipe BlazeFace を使用する python3 scripts/face_tracker.py を使ってください(CPU で動作し、VRAM は不要です)。face_tracker は、オーバーレイのぼかし座標に利用できる、フレームごとのバウンディングボックスを出力します。

LUT カラーグレーディング

.cube LUT ファイルを適用する:

ffmpeg -n -i "$INPUT" -vf "lut3d=file=my_grade.cube" "$OUTPUT"

強度を調整して適用する(元の映像とグレーディング後の映像をブレンドします):

ffmpeg -n -i "$INPUT" -filter_complex \
  "[0:v]split[a][b];[b]lut3d=file=my_grade.cube[graded];[a][graded]blend=all_mode=normal:all_opacity=0.7" "$OUTPUT"

一般的な LUT の入手先:lutify.me、filtergrade.com などのサイトから .cube ファイルをダウンロードするか、DaVinci Resolve でカスタム LUT を作成してください。LUT ファイルはプロジェクトと同じ場所に配置するか、絶対パスを使用してください。

対応形式:.cube(最も一般的)、.3dl、.dat、.m3d

モーショントラッキングテキストオーバーレイ

位置に追従する静的テキスト(手動キーフレーム):

ffmpeg -n -i "$INPUT" -vf "drawtext=text='Label':fontsize=24:fontcolor=white:\
x='if(lt(t,5),100+t*20,200)':y='if(lt(t,5),50+t*10,100)':\
fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:\
box=1:[email protected]:boxborderw=4" "$OUTPUT"

式に基づいて動くテキスト(滑らかな正弦波):

ffmpeg -n -i "$INPUT" -vf "drawtext=text='Moving Text':fontsize=36:fontcolor=white:\
x='w/2-tw/2+50*sin(t*2)':y='h/2-th/2+30*cos(t*2)':\
fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf" "$OUTPUT"

動画内で顔やオブジェクトを追従する複雑なトラッキングでは、scripts/face_tracker.py のバウンディングボックス出力と、フレームごとの drawtext 座標を組み合わせてください。トラッカーから顔の中心座標をエクスポートし、フレームごとの x/y 式を使った drawtext フィルターを生成します。

出力ファイル名の規則

ユーザーが出力名を指定しない場合は、入力ファイル名をもとに生成します。

  • video.mp4 → video_trimmed.mp4、video_stabilized.mp4、video_2x.mp4 など
  • バッチ処理の場合:video_001.mp4、video_002.mp4 など

コメント