mcpField
C
cut

cut

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

cut について

動画素材を文字起こしし、カット候補を見つけてタイムラインを作成・検証し、承認用に提示する編集スキルです。スタイル編集の前にカットを確認したい場合や、カットとスタイル編集を続けて行う場合に向いています。

主な機能

  1. 01動画素材の文字起こし
  2. 02撮り直しやフィラーの候補検出
  3. 03引用箇所に基づくタイムライン作成
  4. 04レンダリングしたカットの検証
  5. 05レビュー用カットの提示

活用シーン

  1. 01撮り直しや言い直しの削除
  2. 02台本に沿ったカットの確認
  3. 03スタイル編集前のカットレビュー

インストール

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

$npx skills add https://github.com/nextwork-projects/ai-video-editor-cooked --skill cut

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

同梱ファイル

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

references/
editorial-rules.md
judge-rubric.md
judge.md
retake-detection.md
script.md
shapes.md
takes.md
scripts/
build_timeline.py
hook_check.py
join.py
judge_cut.py
mirror.py
preview_cut.py
read_cut.py
render.py
retakes.py
script_match.py
splice_check.py
test_build_timeline.py
test_media.py
test_retakes.py
textnorm.py
transcribe.py
trend.py
verify_cut.py
scripts/testdata/
sample-whisper.json

詳細

カット

パス:${CLAUDE_SKILL_DIR} はこの SKILL.md があるフォルダーを指し、${CLAUDE_PLUGIN_ROOT} はその 2 つ上の階層にあるプラグインフォルダーを指します。

最初に ${CLAUDE_PLUGIN_ROOT}/PRINCIPLES.md を読んでください。このプラグインのすべての動画に適用されるルールが記載されています。

質問はすべて質問ボックスに入力します。AskUserQuestion ツールを使ってください(選択肢は 2〜4 個で、推奨するものを先頭にします)。そのツールが使えないエージェントの場合に限り、テキストで番号付きの質問をしてください。

edits/<name>/  transcript.txt (read this, never words.raw.json), spans.json (what to remove, quoted),
  candidates.md (what code flagged), paper-edit.md (the cut as text), cut-check.html (the
  transcript), review.json (notes), cut.mp4 + words.json (the render and its words).

<name> はライブラリ内のファイル名をスラッグ化したものです(IMG_1234.MOV → img-1234。場所は PRINCIPLES.md の「Where」を参照)。元ファイルは変更、移動、コピーせず、パスを渡してください。

PY="${CLAUDE_PLUGIN_ROOT}/lib/ai_editor/run.py" とします。python3 "$PY" でツールの venv を実行します。Windows では、これらのコマンドの python3 を py に置き換えてください。 まだ venv がない場合は、先に setup スキルを実行してください。S="${CLAUDE_SKILL_DIR}/scripts" とします。

動画がまだない場合

動画のテイクのパスを尋ねてください。複数のファイルがある場合は references/takes.md を参照してください。ファイルがない場合は、サンプルのテイク(未編集、縦向き、リテイク、言い間違い、ポーズをそのまま保持)を案内し、ユーザーのフォルダーにダウンロードします。

curl -L -o sample-take.mp4 https://github.com/nextwork-projects/ai-video-editor-cooked/releases/download/sample-video/sample-take.mp4

0. 質問:まずカットするか、一度にすべて行うか

何よりも先に、質問ボックスで質問を 1 つしてください(選択した方法は編集全体に適用されます)。

まずカットだけ行いますか。それともカットとスタイル編集を一度に行いますか?

  • まずカットだけ(推奨)。 キャプション、ズーム、ビジュアルを追加する前にカットを承認できます。カットを変更してもビジュアルを作り直す必要がなくなるため、トークンを節約できます。
  • 一度にすべて行う。 カットの後、待たずにスタイル編集します。レンダリング前に、カットページと静止画シートを確認できます。

ユーザーがすでに回答している場合(「カットだけで」「カットとスタイル編集を一度に」など)、または start か clips がこのスキルを呼び出した場合に限り、この質問を省略します。まずカットだけ: 手順 1〜6 を行った後、ユーザーがカットを承認し、さらにスタイル編集を依頼するまで停止します。一度にすべて行う: 手順 1〜5 を行い、カットページを開いて、そのままスタイル編集に進みます。後からカットが変更された場合は、プランの手順からスタイル編集をやり直します。

0b. ユーザーの好みを確認する

python3 "${CLAUDE_PLUGIN_ROOT}/skills/taste/scripts/taste.py" show --edit edits/<name>

記載されているすべてのルールに従ってください。結果に対する反応(「遅すぎる」など)を受けてやり直す場合は、その前に taste スキルで反応を保存してください。

1. 文字起こし

python3 "$PY" "$S/transcribe.py" <source> edits/<name>/words.raw.json [--script <their script>]

スクリプト(または --keyterm Name。複数指定可能)を指定すると、名前や専門用語の認識精度が上がります(Scribe では +20%)。

所要時間を最初に伝えてください。3 分のテイクなら Whisper は 1〜4 分、CrisperWhisper はテイクと同程度の時間がかかります。保存済みのキーがあれば Scribe、なければインストール済みの場合は CrisperWhisper、どちらもなければ無料のローカル Whisper を選びます(--engine whisper|crisper|scribe で上書きできます)。Whisper は一部の「えーと」や言いかけを削除します。どれも使えない場合は、setup で追加できると一度だけ伝えてください(CrisperWhisper の重みは非商用利用のみです)。編集中にモデルをダウンロードしてはいけません。インストールされていないモデルが必要な再確認(終了コード 4)はスキップし、そのラウンドのメモで伝えます。

words.raw.json は絶対に読まないでください。手順 2 で、その 1/12 のサイズの transcript.txt が作成されます。

2. カットする箇所を決める

python3 "$S/retakes.py" propose edits/<name>

コードは、考えられるすべてのカット候補(繰り返したセリフ、言いかけの文、「待って、ごめん」、フィラー)を candidates.md に出力します。各候補は確認する箇所であり、カットの決定ではありません。transcript.txt と candidates.md を読み、references/retake-detection.md に従って、spans.json を作成してください(references/shapes.md を参照)。

script.md がある場合:python3 "$S/script_match.py" edits/<name> を実行し、script-match.md を読んでください(references/script.md を参照)。

別テイクがある場合は、フック部分を除いて最後のテイクを優先します。タイムスタンプを入力したり、ポーズをまたぐスパンを指定したりしてはいけません。

ユーザーが短くしたい場合(またはユーザーの好みに応じて編集上の調整を行う場合)に限り、references/editorial-rules.md も読み、内容に基づく判断で redundant カットを追加してください。

名前の聞き間違いは、JSON を書き換えず、コマンド 1 つで修正します:python3 "$S/retakes.py" fix edits/<name> cloud=Claude jiv=Jev(単語全体を指定し、キャプション用に fixes.json に保存します)。

3. ビルド

python3 "$S/build_timeline.py" <source> edits/<name> && python3 "$PY" "$S/mirror.py" <source> edits/<name>

--max-pause(0.15 s)を超えるすべてのポーズ(息継ぎも含む)は0.10 sになり、音楽のみの場合は単語間のギャップだけが詰められます。ビルドでERRORが出た場合、何も書き込まれません。その範囲を修正して、もう一度実行してください。

mirror.pyで、本、シャツ、看板の文字が逆向き(フロントカメラで撮影した映像)だとmirroredと表示された場合は、1回だけ確認してください。撮影したままにする(推奨)(ほとんどのクリエイターはそのまま投稿します)/文字が読める向きに反転する。反転する場合は、以下のすべてのrender.pyに--flipを追加してください。

1つのメッセージ内で、スパンのエンコードをバックグラウンドで開始(run_in_background)し、紙面チェックも開始してください。ステップ4では変更があった箇所だけをエンコードします。

python3 "$S/render.py" <source> edits/<name> --segments-only

cut-judgeエージェントがpaper-edit.mdを評価し(言い間違いの見落とし、不自然なつなぎ、良いセリフの欠落など)、spans.jsonを修正します。5分を超えるテイクでは、まずリーダーが確認してからジャッジが確認します。references/judge.mdを参照してください。paper-edit.mdは自分で読まないでください。

  • paper-edit.mdにCLIPPEDとある場合:ポーズのカットで単語が削られています。--padを大きくしてください。それでも残る場合は、ラベルが間違っています。
  • 発話中のつなぎは、静かなフレームに移動します。still in speechが残っている場合は、ステップ5で聞いてください。

4-5. レンダリングと確認

フォアグラウンドで実行します(render.pyはバックグラウンドのエンコード完了を待ちます)。

R="${CLAUDE_PLUGIN_ROOT}/lib/ai_editor/review.py"
python3 "$S/build_timeline.py" <source> edits/<name> && \
python3 "$S/render.py" <source> edits/<name> && \
python3 "$PY" "$S/verify_cut.py" edits/<name> --engine <same engine as step 1> && \
python3 "$S/preview_cut.py" edits/<name> --no-open && \
python3 "$R" edits/<name> start --video edits/<name>/cut.mp4 --stage cut --transcript edits/<name>/words.json

確認で問題がなければ、カットページの準備は完了です。確認では、カットの文字起こしと残した単語を比較します(終了コード1の場合、チェーンは停止します)。

  • MISSING:残した単語がレンダリングにありません。--padを大きくする(またはスパンを狭める)し、再ビルドして再レンダリングしてください。
  • SURVIVED:実際の繰り返しや言いよどみなら、追加するスパンです。残した行をカットするものは追加しないでください。
  • HEARD DIFFERENTLY(「jev -> jeff」など)やフィラーに関する注記は、文字起こしのばらつきです。再ビルドは不要です。
  • DOUBLED:単語が連続して2回発話されています。自然な繰り返し(「very, very」など)は残してください。言いよどみの場合は、そのスパンを追加してください。
  • N join(s) in speech:聞いて確認してください。音が途切れている場合は、splice_check.py edits/<name> --fixを実行して再レンダリングしてください。

同じチェーンで修正を1サイクル行い、残っているものをユーザーに提示してください。

6. ユーザーの承認

チェーンによってレビュー用ページが開かれます(../style-edit/references/review.md)。バックグラウンドでserveとwaitを実行してください。カットした秒数を伝えてください。注記が「keep 」の場合は、そのスパンを狭めるか削除します。「cut 」の場合は、スパンを追加します。ポーズが適切でない場合は--max-pauseを調整します。その後、ステップ4~5を実行し、各注記にresolveで対応してください(--replyには変更内容を記載します)。最後にround --video edits/<name>/cut.mp4を実行します(2回目のstartは実行しないでください)。それから、学習に関する質問があれば尋ねてください。

承認後、1回のBash呼び出しでpython3 "$S/trend.py" log edits/<name>(tally:傾向)とフックのチェックを実行します。その後、hooks.jsonが存在する場合はフックのバリエーションを確認します(references/retake-detection.md)。これはstartによって呼び出されます。style-editの静止画承認と同じ質問ボックス内で尋ねてください。承認前には尋ねないでください。

承認された場合にのみカットが完成します。cut.mp4とwords.jsonはstyle-editに渡されます。「カットだけを先に」と言われた場合は、スタイルの編集も依頼できることを伝えてください。style-editを自分の判断で開始しないでください。startから呼び出された場合は、ページが開いたらvisual-prepをバックグラウンドで開始し、そのmotion_briefsごとにバックグラウンドでclip-builderをすぐに開始してください。motion_noteは1回だけ伝えてください。

スクリプトが停止した場合

メッセージ対応
no such file / ffmpeg could not read audio正しいパスを尋ねてください。ソースをコピーしたり変換したりしないでください
faster-whisper missing / CrisperWhisper missingpython3 "$PY"またはセットアップスキルのステップ3で実行してください
no ElevenLabs key(終了コード2)/ HTTP 4xx、unreachable(3)--engine scribeを外すか、セットアップスキルを使ってキーを保存し直してください
引用に対してビルドでERRORが出るそのスパンの引用を修正するか、occurrenceを追加して、再度ビルドしてください
cannot derive a silence threshold / marked no silence音声と背景音の差が10 dB未満です。ffmpeg -i <source> -af volumedetect -vn -f null -を実行し、平均値より約10 dB高い値を--noiseに指定してください
renderでERROR ...が出るエラーを伝えてください。renderを1回だけ再実行してください

ルール

  1. カットごとに文字起こしからの引用が必要です。引用がなければ、カットしないでください。
  2. テイクの優先順位はスクリプトで決定し、同じセリフを2回発話した場合は、すべてのテイクを残します。台本と異なることを理由にカットしてはいけません。
  3. カットをまたいでストリームコピー(-c copy)を行わないでください。最大2秒ずれます。
  4. 確認と承認を経ていないレンダリング結果を、決して引き渡さないでください。

Self-check

test_build_timeline.py, test_retakes.py, test_media.py (ffmpeg); demo on transcribe.py, trend.py, splice_check.py, script_match.py, mirror.py.

コメント