ra-local-talking-head-cut について
口頭解説動画のローカル編集を再現可能な手順で行うスキルです。文字起こしの確認、意味に基づくカット、最終品質確認に対応し、字幕の明示的な承認前には編集リスト作成やレンダリングを行いません。
主な機能
- 01単語タイムスタンプ付き文字起こし
- 02用語と仮字幕の確認
- 03承認後の編集リスト作成
- 04意味に沿ったカットとハードカット出力
- 05完成版の検査と字幕生成
活用シーン
- 01口頭解説の文字起こしと仮字幕の確認
- 02言い直しや失敗テイクの削除
- 03元動画の解像度とフレームレートを保つ粗編集
- 04完成した口頭解説動画の字幕生成と検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pluviobyte/ rnskill --skill ra-local-talking-head-cutインストール後、Claude Code で/ra-local-talking-head-cutを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/artifact-contract.mddefault-glossary.jsonscripts/analyze_visual_cuts.pybuild_edl.pyburn_captions.pygenerate_final_subtitles.pyprepare_transcript.pyqc.pyrender_cut.py詳細
ローカル音声精密編集
編集製品ではなく、再現可能なローカルワークフローを提供します。上流のスキルには手を加えず、すべてのジョブをソースプロジェクトのエンジニアリングディレクトリ内に作成します。
必須ワークフロー
- ソースを調査します。ユーザーが納品形式への変換を明示的に依頼しない限り、幅、高さ、フレームレートを維持します。
- インストール済みの
video-use/helpers/transcribe.pyをvolc.seedasr.aucと単語ごとのタイムスタンプを使って実行し、文字起こしします。キャッシュ済みの正規化 JSON を再利用します。 references/default-glossary.jsonを使ってscripts/prepare_transcript.pyを実行します。review.md、precut-review.srt、corrected-script.md、uncertain-terms.md、subtitle-approval.jsonを作成する必要があります。- ソース動画に加えて、
precut-review.srtと読みやすいレビューをユーザーに渡します。十分な根拠がある用語のみを修正します。不確かなモデル名や製品名を推測してはいけません。ここで停止し、ユーザーの明示的な承認を待ちます。 承認待ちの間は、EDL を作成したりカットをレンダリングしたりしてはいけません。 - 確認済みの対応付けをジョブ専用の用語集コピーに追加して不確かな用語を解消し、スクリプトを再実行して、スクリプトとカット前の SRT の両方をまとめて再生成します。準備処理を実行すると、承認は必ずリセットされます。ユーザーが再生成された SRT を確認した後、
subtitle-approval.jsonをapproved: trueに設定し、確認時刻を記録して、unresolved_termsを空にします。再生成後に承認を引き継いではいけません。 - 意味に基づく削除には、任意で
decisions.jsonを作成します。後に続く完全なテイクがある場合は、繰り返された話し始めや失敗したテイクを削除し、固有の意味は保持します。正規化された単語インデックスは成果物内でのみ使用し、ユーザー向けレポートには使用しません。 - 承認ファイルを指定して
scripts/build_edl.pyを実行します。字幕が承認済みで、すべての不確かな用語が解消されていない限り、スクリプトは続行を拒否する必要があります。デフォルトのペーシングでは、550 ms 以下の間を維持し、それより長い間は 380~450 ms に圧縮し、曖昧さのない「呃/额」のみを削除して、ソースの先頭と末尾に余白を追加します。200 ms を超える間をすべて一律に削除する方法に置き換えてはいけません。 - トランジションなしで
scripts/render_cut.pyを実行し、ハードカットのプレビューを作成します。ソースの寸法と fps を維持し、各カットに 15 ms のオーディオフェードを適用し、軽いダイアログクリーンアップを行い、2 パスのラウドネス正規化で -16 LUFS/-1.5 dBTP にします。強めのノイズ除去やゲートは候補であり、デフォルトではありません。同じ ASR アライメントテストでスコアが 0.01 を超えて低下する、または 0.90 未満になる候補は却下します。 - ハードカットのプレビューに対して
scripts/analyze_visual_cuts.pyを実行します。コンタクトシートを確認し、推奨された 80~120 ms のトランジションのみを使用します。動画 1 本あたり最大 3 つまでとします。有効な意味上のカットに大きな視覚的な不連続もある場合に限り、--transitionsを指定して再レンダリングします。トランジションを一律に追加してはいけません。 - 選択したクリーンな最終 MP4 に対して
scripts/qc.pyを実行します。トランジションを使用した場合は、同じトランジション JSON も渡します。寸法/fps の一致、音声/動画の有効性、想定される長さ、ゲート内のラウドネスを必須とします。一般用とトランジション用の両方のコンタクトシートを確認します。 - 正確な最終 MP4 と承認済みの
corrected-script.mdに対してscripts/generate_final_subtitles.pyを実行します。タイミング調整/アライメントはra-audio-to-subtitlesに委任され、caption-qc.jsonが PASS でない場合、納品は拒否されます。ASR をタイミングのソースとし、承認済みスクリプトのテキストを字幕表示のソースとします。タイムライン編集後にprecut-review.srtを再利用してはいけません。 - 納品物に字幕の表示が必要な場合は、最終版の
captions.jsonと PASS のcaption-qc.jsonを使ってskill-captionsを実行します。契約で別のスタイルが指定されていない限り、anchor-darkを使用します。代表的なフレームをプレビューし、派生ファイルに字幕を焼き込み、caption-render-qc.jsonが合格することを必須とします。クリーンなラフカットと汎用 SRT は保持します。
コマンド
SKILL_DIR="<this skill directory>"
JOB="<engineering job directory>"
WORDS="$JOB/transcripts/<source-name>.json"
python3 "$SKILL_DIR/scripts/prepare_transcript.py" \
"$WORDS" --out-dir "$JOB/transcript-review" \
--glossary "$SKILL_DIR/references/default-glossary.json"
python3 "$SKILL_DIR/scripts/build_edl.py" \
<source.mp4> "$WORDS" --out "$JOB/edl.json" \
--approval "$JOB/transcript-review/subtitle-approval.json" \
--decisions "$JOB/decisions.json"
python3 "$SKILL_DIR/scripts/render_cut.py" \
"$JOB/edl.json" --out "$JOB/local-hard-cut-preview.mp4"
CODEX_PY="$HOME/.cache/codex-runtimes/codex-primary-runtime/dependencies/python/bin/python3"
"$CODEX_PY" "$SKILL_DIR/scripts/analyze_visual_cuts.py" \
"$JOB/local-hard-cut-preview.mp4" --edl "$JOB/edl.json" \
--out-dir "$JOB/visual-cut-qc"
python3 "$SKILL_DIR/scripts/render_cut.py" \
"$JOB/edl.json" --out "$JOB/local-benchmark.mp4" \
--transitions "$JOB/visual-cut-qc/visual-cut-qc.json"
python3 "$SKILL_DIR/scripts/qc.py" \
<source.mp4> "$JOB/local-benchmark.mp4" \
--edl "$JOB/edl.json" \
--transitions "$JOB/visual-cut-qc/visual-cut-qc.json" \
--out-dir "$JOB/qc"
python3 "$SKILL_DIR/scripts/generate_final_subtitles.py" \
"$JOB/local-benchmark.mp4" \
--script "$JOB/transcript-review/corrected-script.md" \
--approval "$JOB/transcript-review/subtitle-approval.json" \
--out-dir "$JOB/captions"
"$CODEX_PY" ".claude/skills/skill-captions/scripts/render_captions.py" \
"$JOB/local-benchmark.mp4" "$JOB/captions/captions.json" \
--qc "$JOB/captions/caption-qc.json" --style anchor-dark \
--out "$JOB/local-benchmark-captioned.mp4" \
--preview "$JOB/qc/caption-preview.png" --preview-at 15
意味上の繰り返しや失敗したテイクがない場合は、--decisions を省略します。
判断ゲート
- 意味を失うよりも、埋め草の見逃しを優先します。
- 文字起こしの修正と再生時の削除は、別々の操作として扱います。
- 字幕の承認が false であるか、未解決の用語が残っている間は、EDL を作成しません。
precut-review.srtはソースタイムラインのレビュー資料としてのみ扱います。caption-qc.jsonが存在しないか PASS でない間は、キャプションを焼き込みません。- 同じ入力に対する ASR カバレッジが 1 パーセントポイントを超えて後退する音声クリーンアップは、たとえ表面的にはより静かに聞こえても、受け入れません。
- すべてのカットにトランジションを追加しません。トランジションには、有効な意味的境界と測定された視覚的な不連続性の両方が必要です。
- ラフカットの字幕タイムラインを本番準備完了と呼びません。
cut-qc.jsonがfailを報告した場合は、納品しません。- 中間ファイルは
01-内容生产/视频工作台/制作中/<日期-主题>/に保持し、ユーザーが承認した最終版のみを视频工作台/已制作/月上旬或月下旬/日期-主题/にアーカイブします。
別のレンダラーを統合する場合や、成果物のスキーマを変更する場合は、references/artifact-contract.md をお読みください。
コメント
Markdown 対応