claude-video-edit について
claude-video-editは、FFmpegと関連スクリプトによる動画編集操作を案内するスキルです。トリミングやトランジションから、カラー調整、手ぶれ補正、プライバシー保護のぼかしまで扱います。
主な機能
- 01無劣化およびフレーム単位のトリミング
- 02クリップの分割と結合
- 03速度変更、クロップ、拡大縮小、回転
- 04オーバーレイ、テキスト、トランジションの追加
- 05カラー補正とLUTグレーディング
- 06手ぶれ補正とプライバシー保護のぼかし
活用シーン
- 01再エンコードの有無を選んでクリップをトリミング
- 02動画を分割または複数ファイルを結合
- 03タイトル、ウォーターマーク、ピクチャーインピクチャーを追加
- 04指定範囲をぼかす、または手ぶれを補正
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agricidaniel/ claude-video --skill claude-video-editインストール後、Claude Code で/claude-video-editを入力して読み込まれたか確認します。
詳細
claude-video-edit — 動画編集操作
事前確認
ファイルを書き込む操作を行う前に、毎回次の手順を実行してください。
bash scripts/preflight.sh "$INPUT" "$OUTPUT"を実行します- 失敗した場合は、処理を中止してエラーをユーザーに報告します
- エンコード操作では、エンコーダーを選択するために
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など