mcpField
E
editor

editor

github.com/makemyclipクリエイティブ・メディア5174 回インストール1 日前に更新
リポジトリ

editor について

MakeMyClip Editorは、会話を通じてローカルの動画エディターを操作するエージェントスキルです。MCP設定やグローバルインストールなしで、npx経由でclip CLIを呼び出します。カット、合成、トランジション、字幕、音声、映像調整に対応し、結果をJSONで返します。

主な機能

  1. 01メディア情報の取得とプレビュー画像の抽出
  2. 02動画のトリミング、分割、連結
  3. 03テキスト、字幕、タイトルカード、オーバーレイの追加
  4. 04トランジション、速度変更、無音部分の削除
  5. 05音声・映像の調整と再エンコード

活用シーン

  1. 01複数の素材をカットしてハイライト動画を作成
  2. 02画面録画に字幕やタイトルカードを追加
  3. 03BGMをミックス、または元の音声を置き換え
  4. 04編集結果を確認して映像を調整

インストール

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

$npx skills add https://github.com/makemyclip/editor --skill editor

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.gitignore
LICENSE
CONTRIBUTING.md
AGENTS.md
RELEASING.md
CLAUDE.md
llms.txt
.releaserc.json
README.md
biome.json
package.json
pnpm-workspace.yaml
pnpm-lock.yaml
.github/workflows/
ci.yml
release.yml
docs/
ROADMAP.md
docs/backlog/
typescript-7.md
drawtext-expansion.md
timeline-color-validation.md
src/
cli-timeline.ts
cli.ts
src/ffmpeg/args/
add-text.ts
chroma-key.ts
adjust.ts
add-audio.ts
overlay.ts
trim.ts
split.ts
preview.ts
concat.ts

詳細

MakeMyClip Editor — エージェントスキル

チャットでローカルの動画エディターを操作します。起動すると、このスキルは npx 経由で clip CLI を実行します(初回使用時に自動ダウンロードされ、その後はキャッシュされます)。MCP のセットアップ、グローバルインストール、設定の編集は不要です。

起動するタイミング

ユーザーが次のことを依頼した場合に、このスキルを起動します。

  • 動画ファイルの編集、トリミング、カット、または分割
  • クリップの一部をズーム、パン、または Ken Burns 効果を適用
  • 映像にキャプション、タイトル、またはローワーサードを追加
  • 複数のクリップを 1 つにまとめる(連結、モンタージュ)
  • 画面録画をデモ動画やソーシャル動画に仕上げる

次の場合は起動しないでください。文字起こしのみの場合(音声テキスト変換スキルを使用)、サムネイル画像のみの作業、ライブストリーミング。

使用方法

メディアファイルを調査する(実装済み)
npx -y @makemyclip/editor ingest <input>

メタデータを JSON で返します。長さ、動画ストリーム(コーデック、解像度、fps)、音声ストリーム(コーデック、サンプルレート、チャンネル)、および絶対パスから生成される決定的な mediaId が含まれます。

{
  "mediaId": "m_a1b2c3d4e5f6",
  "ref": {
    "path": "/abs/path/screen.mp4",
    "durationSec": 83.5,
    "video": { "codec": "h264", "width": 1920, "height": 1080, "fps": 30 },
    "audio": { "codec": "aac", "sampleRate": 48000, "channels": "stereo" }
  }
}

まずこれを呼び出し、ソースに実際に何が含まれているかを把握してください。トリミング計算には長さ、ズームやオーバーレイの配置には解像度を確認し、add_audio を提案する前に音声の有無を確認します。同じ入力パスからは常に同じ mediaId が返されます。

クリップを指定位置で分割する(実装済み)
npx -y @makemyclip/editor split <input> <atSec>

クリップを atSec の位置で 2 つに分割します。ストリームコピー(再エンコードなし)なので高速で、両方の断片が並行して生成されます。両方のパスを返します。

{ "before": "/var/folders/.../split-before-abc.mp4", "after": "/var/folders/.../split-after-xyz.mp4", "atSec": 12.5, "durationMs": 38 }

ストリームコピーでは GOP の途中でデコードしてカットできないため、フレーム単位ではなくキーフレーム単位で正確です。フレーム単位で正確に分割する必要がある場合は、先に render を実行して再エンコードしてから、split を実行してください。

クリップをトリミングする(実装済み)
npx -y @makemyclip/editor trim <input> <start> <end>

タイムコードは HH:MM:SS[.ms]、MM:SS、または数値の秒数で指定できます。出力は JSON です。

{ "path": "/var/folders/.../makemyclip-editor/trim-abc123.mp4", "durationMs": 14 }

トリミングはストリームコピー(再エンコードなし)なので、高速かつロスレスです。出力は $MAKEMYCLIP_WORKSPACE に保存されます(デフォルトは os.tmpdir()/makemyclip-editor)。

テキストオーバーレイを追加する(実装済み)
npx -y @makemyclip/editor add_text <input> <text> <position> <startSec> <endSec>

動画のコピーにテキストオーバーレイを焼き込みます。

  • <position> は次のいずれかです:top-left、top-center、top-right、center-left、center、center-right、bottom-left、bottom-center、bottom-right
  • <startSec> / <endSec> は入力の開始時点からの秒数です
  • デフォルト:フォントサイズ 48、白いテキスト、読みやすさのための半透明の黒い背景ボックス

JSON を返します。

{ "path": "/var/folders/.../makemyclip-editor/add-text-abc123.mp4", "durationMs": 412 }

テキストは ffmpeg に渡す前に一時ファイルに書き込まれるため、引用符、コロン、コンマ、角括弧、およびほとんどの Unicode 文字は手動でエスケープせずに使用できます。注意点:テキスト内のリテラルな %{...} は drawtext の式として解釈されます(実際のキャプションではまれですが、使用は避けてください)。

クリップを連結する(実装済み)
npx -y @makemyclip/editor concat <input1> <input2> [<input3> ...]

2 つ以上のクリップを途切れなく 1 つの出力に連結します。ストリームコピー(再エンコードなし)なので、高速かつロスレスです。

JSON を返します。

{ "path": "/var/folders/.../makemyclip-editor/concat-abc123.mp4", "durationMs": 95, "inputCount": 3 }

すべての入力でコーデックと解像度が一致している必要があります。一致しない場合、ffmpeg は明確なエラーを返すため、連結する前にエージェントが再エンコードする必要があります(例:何もしないテキストを指定した add_text を使うか、将来の render 呼び出しを使用)。trim → concat を組み合わせる手順は、ハイライト動画を作成する基本的なワークフローです。N 個のセグメントをトリミングしてから、順番に連結します。

プレビュー用フレームを抽出する(実装済み)
npx -y @makemyclip/editor preview <input> <atSec>

指定したタイムコードの JPEG フレームを 1 枚抽出します。変更を伴う編集を行うたびに、次の作業に進む前にこれを使って出力を確認してください。テキストオーバーレイが意図した位置にあるか、トリミングが適切な位置で行われているか、連結箇所が自然につながっているかを確認できます。JSON を返します。

{ "path": "/var/folders/.../makemyclip-editor/preview-abc123.jpg", "atSec": 1.5, "durationMs": 12 }

ffmpeg の入力シーク(-i の前に -ss を指定)を使うため高速(約 10〜50 ms)です。フレーム単位ではなくキーフレーム単位で正確ですが、サムネイルには問題ありません。ユーザーは JPEG を開いて確認できます。画像入力に対応したエージェントは画像を読み込んで、出力を自己修正できます。

2つのクリップ間のトランジション(実装済み)
npx -y @makemyclip/editor transition <inputA> <inputB> [<kind>] [<durationSec>]

2つのクリップ間にクロスフェード、スライド、黒/白へのフェードを挿入します。このツールはクリップ A を自動でプローブして適切なオフセットを計算するため、エージェントがクリップの長さを把握する必要はありません。

  • <kind> は次のいずれかです:fade、fadeblack、fadewhite、dissolve、wipeleft、wiperight、wipeup、wipedown、slideleft、slideright、circleopen、circleclose。デフォルトは fade です(最も安全で、目立ちにくい設定です)。
  • <durationSec> のデフォルトは 1 です。上限は 10 です。

JSON を返します:

{ "path": "/var/folders/.../makemyclip-editor/transition-abc.mp4", "durationMs": 320, "offsetSec": 4, "hasAudio": true }

音声:両方の入力に音声がある場合、同じ長さの acrossfade を適用します。どちらにも音声がない場合、出力は無音です。片方だけに音声がある場合は、わかりやすいメッセージを表示して処理に失敗します。まず無音のクリップを、無音の音声トラックを付けて再エンコードしてください。

concat や add_text と組み合わせることで、複数クリップの出力に唐突さがなく、意図的に仕上げられた印象を与える仕上げの工程になります。

エクスポートまたは正規化のための再エンコード(実装済み)
npx -y @makemyclip/editor render <input> [<format>] [<crf>] [<preset>] [<maxWidth>]

動画を指定した形式/品質で再エンコードします。最終エクスポート、コーデックが一致しない場合に concat/transition の前に入力を正規化する場合、またはウェブ配信用にサイズを小さくする場合に便利です。

  • <format> は次のいずれかです:mp4(デフォルト、h264+aac)、mov(h264+aac)、webm(vp9+opus)
  • <crf> は品質を調整する値です(0 = 可逆、51 = 最低品質)。デフォルトの 23 は適切な基準値です。品質を高くするには値を小さくします。
  • <preset> は libx264 の速度と効率のバランスを指定します:ultrafast … veryslow。デフォルトは medium です。webm では無視されます。
  • <maxWidth>(任意)はピクセル単位で幅の上限を指定します。アスペクト比を維持し、拡大はしません。

JSON を返します:

{ "path": "/var/folders/.../makemyclip-editor/render-abc.mp4", "format": "mp4", "durationMs": 412 }
音声を追加 — ミックスまたは置換(実装済み)
npx -y @makemyclip/editor add_audio <input> <audio> [<mode>] [<audioVolume>] [<startSec>]

BGM、ナレーションを追加したり、元の音声を完全に置き換えたりできます。

  • <mode> は mix(デフォルト — ベース音声を維持し、新しい音声を重ねます)または replace(ベース音声を削除し、新しい音声だけを使用します)です。
  • <audioVolume> は重ねる音声の音量倍率です(0~2、デフォルトは 0.5 — BGM に適した音量です。ナレーションには 1.0 を使用します)。
  • <startSec> は重ねる音声を開始する位置です(デフォルトは 0)。

JSON を返します:

{ "path": "/var/folders/.../makemyclip-editor/add-audio-abc.mp4", "mode": "mix", "durationMs": 412 }

ミックスモードでは、入力動画に音声トラックが必要です(まず ingest で確認してください)。出力の長さは元の動画に一致します。重ねる音声が元の動画より長い場合は切り詰められ、短い場合は無音が追加されます。

クロップ/回転/反転/拡大縮小(実装済み)
npx -y @makemyclip/editor transform crop   <input> <x> <y> <width> <height>
npx -y @makemyclip/editor transform rotate <input> <90|180|270>
npx -y @makemyclip/editor transform flip   <input> <horizontal|vertical>
npx -y @makemyclip/editor transform scale  <input> [<width>] [<height>]

単一の動画に対する幾何学的な操作です。transform scale では、省略した寸法に -2 を指定します(アスペクト比を維持して自動調整し、H.264 用に偶数ピクセルにします)。回転は 90° 単位のみです。任意の角度で回転するには、カスタムフィルターグラフを使って render を実行してください。

色/明るさ/コントラスト/彩度/音量の調整(実装済み)
npx -y @makemyclip/editor adjust <input> --brightness N --contrast N --saturation N --volume N

統合された調整パネルです。ノブは任意の組み合わせで設定できますが、少なくとも 1 つは指定する必要があります。

ノブ範囲変更なしの値
--brightness-1(黒)… 1(白)0
--contrast0 … 41
--saturation0(グレースケール)… 3(鮮やか)1
--volume0(ミュート)… 2(2倍)1

調整しない方のストリームはストリームコピーします(例:--volume だけを設定した場合、動画ストリームはストリームコピーされるため高速です)。

速度変更/スロー再生/逆再生(実装済み)
npx -y @makemyclip/editor speed <input> [<factor>] [<reverse>]

倍率の意味:factor=2 は2倍速、factor=0.5 は半分の速度(スローモーション)です。reverse=true では逆再生になり(音声も逆再生されます)、factor != 1 または reverse=true のいずれかが必要です(何も変更しない設定は拒否されます)。

音声の処理には atempo を使用します。この機能の範囲は [0.5, 2.0] に制限されています。より大きな倍率では内部的に複数の atempo を連結するため、factor=4 と factor=0.125 のどちらも機能します。

ピクチャー・イン・ピクチャー/画像オーバーレイ(実装済み)
npx -y @makemyclip/editor overlay <base> <overlay> [<position>] [<scaleToWidth>] [<startSec>] [<endSec>]

ベース動画の上に動画または画像を配置します。add_text と同じ9種類の名前付き位置を指定できます。任意の scaleToWidth を指定すると、先にオーバーレイのサイズを変更します(高さは自動調整され、偶数ピクセルになります)。startSec と endSec で時間範囲を指定できます。または startSec のみを指定すると、「この時点から最後まで」表示します。

ケン・バーンズ効果/フォーカスズーム(実装済み)
npx -y @makemyclip/editor zoom_pan <input> [<fromZoom>] [<toZoom>] [<centerX>] [<centerY>]

クリップの全長にわたって、正規化された [0, 1] 座標での (centerX, centerY) を中心に、fromZoom から toZoom へ滑らかにズームします。デフォルト値は fromZoom=1、toZoom=1.5、中心は (0.5, 0.5) です。ズームアウトするには fromZoom > toZoom を指定します。ツールは入力を調査し、出力解像度と fps を合わせます。

タイトルカードを追加(実装済み)
npx -y @makemyclip/editor add_title_card <input> <text> [<durationSec>] [<background>] [<fontSize>] [<fontColor>]

全画面の色付きカード(デフォルトは 2 秒、背景は黒、テキストは白)を生成し、中央にタイトルを表示してから、入力の前に連結します。入力を自動的に調査して、寸法、fps、オーディオサンプルレートを合わせるため、シームレスに結合できます。

1 回の呼び出しで複数の字幕を追加(実装済み)
npx -y @makemyclip/editor add_captions <input> <cuesJson>

cuesJson は { text, startSec, endSec, position? } の JSON 配列です。各キューに対して add_text を繰り返し実行します。文字起こしは行いません — エージェント(またはユーザー)がキューを指定します。連携よりも組み合わせやすさを重視しており、必要に応じて別の文字起こしステップと組み合わせてください。

無音を除去(実装済み)
npx -y @makemyclip/editor silence_remove <input> [<noiseDb>] [<minSilenceSec>]

ffmpeg の silencedetect フィルターで無音部分を検出し、無音ではない部分をトリミングして連結します。デフォルト値は noiseDb=-30、minSilenceSec=0.5 です。FFmpeg だけで処理でき、Python の auto-editor への依存はありません。

ハイライトリールを作成(実装済み)
npx -y @makemyclip/editor highlight_reel <input> <segmentsJson> [<transitionKind>] [<transitionSec>]

segmentsJson は { startSec, endSec } の JSON 配列です。各セグメントを並列に(ストリームコピーで高速に)トリミングし、その後、transitionKind がなければハードカットで連結し、指定されていればトランジションツールを各ペアに順番に適用してクロスフェードします。長い動画から「最高の瞬間」を集める定番のワークフローを、エージェントから 1 回の呼び出しで使えるツールとして実現します。

グリーンスクリーン/カラーキー(実装済み)
npx -y @makemyclip/editor chroma_key <foreground> <background> [<color>] [<similarity>] [<blend>]

前景動画から指定した色を取り除き、背景に合成します。背景には動画または静止画像を指定でき(自動判別)、前景の長さに合うようループします。

  • <color> のデフォルトは green です。色名、#RRGGBB、または 0xRRGGBB を指定できます。
  • <similarity>(0~1、デフォルトは 0.3)— ピクセルがキー色とどの程度近ければ該当色と判定するかを指定します。
  • <blend>(0~1、デフォルトは 0.1)— エッジを柔らかくする度合いです。0 はハードカット、値が大きいほど柔らかくなります。

デフォルトでは背景(「シーン」)の音声を使用します。前景に音声が含まれる場合は、preferForegroundAudio=true で上書きしてください。

手ぶれした映像を安定化(実装済み)
npx -y @makemyclip/editor stabilize <input> [<shakiness>] [<smoothing>] [<accuracy>] [<zoom>]

2 パスの vidstab を使用します。パス 1(vidstabdetect)で動きを解析して変換ファイルを書き出し、パス 2(vidstabtransform)で各フレームを補正し、滑らかなカメラパスに沿わせます。デフォルト値は実用的な設定(5、10、9、5)です。非常に不規則な入力では shakiness を、より映画的な仕上がりにするには smoothing を、変形による境界を隠すには zoom を大きくしてください。

vidstab に対応した ffmpeg が必要です。バンドルされている ffmpeg-static には含まれています。含まれていない場合、ツールは明確なエラーを返します。

複数クリップの合成を作成 — タイムライン(実装済み)

上記の単一ファイル用ツールは、それぞれ新しい出力ファイルを作成します。非破壊トリミング、トランジション、元に戻す/やり直しに対応しながら複数のクリップを 1 つの編集にまとめるには、タイムラインを操作します。タイムラインは、まとめた編集の信頼できる唯一の情報源となる合成ドキュメントです。CLI、ブラウザー UI、このスキルはすべて同じドキュメントを変更します。

npx -y @makemyclip/editor timeline new                       # start an empty composition
npx -y @makemyclip/editor timeline add-media intro.mp4       # ingest + append a clip
npx -y @makemyclip/editor timeline add-media demo.mp4
npx -y @makemyclip/editor timeline transition <afterClipId> fade 0.5
npx -y @makemyclip/editor timeline show                      # read tracks, clips, timings
npx -y @makemyclip/editor timeline export final.mp4          # compile the document to a render

ユーザーが動画を組み立てる場合(複数のクリップ、トランジション、最終的なレンダリング)は、単一ファイル用ツールを連鎖させるのではなく、タイムラインを使用してください。編集は非破壊で元に戻せます(timeline undo/redo、timeline log)。また、timeline at <sec>/timeline frame <sec> を使えば、変更前に現在のドキュメントを読み取り専用で確認できます。すべてのサブコマンドを確認するには、npx -y @makemyclip/editor timeline --help を実行してください。

ローカル UI を開く(実装済み)
npx -y @makemyclip/editor ui

http://127.0.0.1:5573 で小さなローカルサーバーを起動し、ブラウザーを開きます。UI にはセッションログ(エージェントが実行したすべての操作)が表示され、結果のパスとタイムスタンプを確認できます。また、操作をクリックして出力を再生できます。チャット主導のワークフローと併用すると便利です。ユーザーはターミナルに触れることなく、セッションの進行をリアルタイムで確認し、出力をチェックできます。

ローカルでのみ動作します。UI はダークテーマのタイムラインエディターです。ドラッグ&ドロップによるインポート、モニター(再生ヘッド位置で合成されたフレーム)、編集可能なタイムライン(クリップを選択してトリミング/分割/移動/トランジション/削除)、ワンクリックでのエクスポート、タイムラインの元に戻す/やり直し、スナップショットに対応しています。これにより、エージェントが指示から外れた場合でも、ユーザーはいつでも画面上で操作を引き継げます。

セッションの安全性 — スナップショット、元に戻す、確認、削除(実装済み)

ツール呼び出しが成功するたびに、$MAKEMYCLIP_WORKSPACE/session.json にログが記録されます。エージェントはそのログを確認し、現在の状態のスナップショットを作成し、操作を元に戻したり、個々の操作を削除したりできます。

npx -y @makemyclip/editor snapshot [<label>]            # Save the current session as <label>.json (default: snap-<N>)
npx -y @makemyclip/editor undo [<snapshotLabel>]        # Pop the last op, OR restore a named snapshot
npx -y @makemyclip/editor inspect [<limit>]             # Show recent ops with one-line summaries
npx -y @makemyclip/editor delete <id> [<removeFile>]    # Remove an op (and optionally unlink its output file)

これらは、評議会が必須とした復旧ループです。確信が持てない編集の前にスナップショットを作成し、うまくいかなかった場合は元に戻し、何をしたか思い出すために内容を確認します。

安全性

  • FFmpeg は引数を配列として起動するため、シェルによる補間やインジェクションは発生しません。
  • すべてのファイルパスは、デフォルトでワークスペースディレクトリを基準に解決されます。
  • このスキルがネットワークに接続するのは、パッケージ自体を一度だけ npx でダウンロードするときだけです。

インストール

npx skills add MakeMyClip/editor

以上です。

ライセンス

MIT。詳細は LICENSE をご覧ください。

コメント