cut について
動画素材を文字起こしし、カット候補を見つけてタイムラインを作成・検証し、承認用に提示する編集スキルです。スタイル編集の前にカットを確認したい場合や、カットとスタイル編集を続けて行う場合に向いています。
主な機能
- 01動画素材の文字起こし
- 02撮り直しやフィラーの候補検出
- 03引用箇所に基づくタイムライン作成
- 04レンダリングしたカットの検証
- 05レビュー用カットの提示
活用シーン
- 01撮り直しや言い直しの削除
- 02台本に沿ったカットの確認
- 03スタイル編集前のカットレビュー
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nextwork-projects/ ai-video-editor-cooked --skill cutインストール後、Claude Code で/cutを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/editorial-rules.mdjudge-rubric.mdjudge.mdretake-detection.mdscript.mdshapes.mdtakes.mdscripts/build_timeline.pyhook_check.pyjoin.pyjudge_cut.pymirror.pypreview_cut.pyread_cut.pyrender.pyretakes.pyscript_match.pysplice_check.pytest_build_timeline.pytest_media.pytest_retakes.pytextnorm.pytranscribe.pytrend.pyverify_cut.pyscripts/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 missing | python3 "$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回だけ再実行してください |
ルール
- カットごとに文字起こしからの引用が必要です。引用がなければ、カットしないでください。
- テイクの優先順位はスクリプトで決定し、同じセリフを2回発話した場合は、すべてのテイクを残します。台本と異なることを理由にカットしてはいけません。
- カットをまたいでストリームコピー(
-c copy)を行わないでください。最大2秒ずれます。 - 確認と承認を経ていないレンダリング結果を、決して引き渡さないでください。
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.