Communityコーディング&開発github.com

1mxffe/editor-reels

Gutmann & Silva 法律事務所のトークカメラ動画を縦型Reel(1080×1920)に編集します。文字起こし、無音・フィラー・繰り返しの検出・カット、フレーズ単位の静的な字幕焼き込み、グラフカードの重ね合わせを行い、プレビューまたは最終版をレンダリングします。

editor-reels とは?

このスキルは、弁護士事務所 Gutmann & Silva のトークカメラで撮影された生の動画を、Instagram などの縦型 Reel(1080×1920)用に完全編集するエージェントスキルです。ユーザーが生動画をフォルダに置き、「edit this into a reel」または「build preview」「final」などの指示を出すと、まず自動文字起こし(faster-whisper)を実行し、無音、フィラー(えーと、あのー)、繰り返しを検出してカットリストを作成します。ユーザーがカットを承認すると、フレーズ単位の静的な字幕(Poppins Bold、フェードイン最大150ms)を焼き込み、必要に応じてグラフカード(タイトル60文字以内、本文140文字以内、1~6秒表示)を重ねます。最終的に540×960のプレビューと1080×1920の最終版(final.mp4)をレンダリングします。また、ブランドガイドライン(brand/brand.json)を対話的に設定し、サムネイル作成(顔写真候補の選択、テキスト、ハンドル追加)もサポートします。リポジトリルートからPython 3.11以上で動作し、FFmpeg、Chromium(グラフ用)、Node.js(カバーアート用)が必要です。すべての編集は元動画を変更せず、cortes.json によるリバーシブルなワークフローを提供します。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/1mxffe/editor-reels/tree/HEAD/.claude/skills/editor-reel

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Editor de Reel — Gutmann & Silva

完全な手順です。リポジトリのルートから実行します。すべてのPythonスクリプトは python3 -I で実行します。フォーマットと安全ゾーンは references/formatos-reel.md、字幕ルールは references/legendas.md、グラフカードは references/graficos.md を参照してください。

変わらないルール

  • テキストは事務所のものです。 事務所は録画前にテキストをレビューします。このツールは弁護士会(OAB)のルールをチェックしません。発話、字幕、カード、カバーはユーザーが承認した通りに出力されます。
  • 静的な字幕、フレーズ単位。 ポップアップ表示や単語単位のエフェクトは行いません(最大150msのフェードのみ許可)。
  • カットは元に戻せます。 元の entrada.<ext> は決して変更されません。カット情報は cortes.json に保存され、編集・再適用が可能です。
  • ブランド情報は brand/brand.json のみから取得します。 色、フォント、@マークはすべてそこから来ます。ブランドの値をでっち上げることは絶対にせず、不足しているものがあればユーザーに確認してください。

開始前の準備

python3 -I scripts/doctor.py を実行し、最後の行に従って対処してください。スクリプトには Python 3.11以上 が必要です(macOSに付属のpython3は3.9です:brew install [email protected])。doctorスクリプトは古いPythonでも動作しますが、その場合はバージョンアップを促すだけです(python >= 3.11)。

  • READY:そのまま進めます。
  • READY WITH LIMITS:オプションの項目だけが不足しています。faster_whisper がない場合、自動文字起こしが利用できないことを伝え、pip install -r requirements.txt か既存の transcricao.json の提供を促して続行します。グラフ項目(chromium + playwright)や node がない場合、カードなしで進み、インストール方法を伝えます(references/graficos.md)。Pillow や node がない場合、自動カバー作成(手順9、10)は実行できません:pip install -r requirements.txt / Node.jsをインストールするか、Figmaを使用する方法に進んでください。
  • MISSING:停止します。不足している項目(python、ffmpeg、ffprobe、ディスク容量)を ✘ でリストアップし、インストール方法を伝えます。レンダリングを試みないでください。

ブランド確認

brand/brand.json が存在しない、不完全、または無効な値(python3 -I scripts/brand.py check brand/brand.json がエラーを返す)の場合のみ実行します。

  1. brand/brand.json がない場合のみ、シードを生成します:python3 -I scripts/brand.py seed brand/brand.json。シードは brand/guia-visual.md(紺色 #001931、Poppins、静的スタイルの字幕)から生成されます。seed はファイルが存在しない場合にのみ使用され、既存のファイルには上書きしません(拒否されます)。ファイルは存在するが不完全または無効な場合は、check が指摘したキーを修正してください。--force は使わないでください。
  2. 一度に1つの質問 をし、常にシードの値を提案して、次の質問に進む前に回答を待ちます:(a) パレット、(b) フォント、(c) 字幕スタイル、(d) 公式アカウントの@。
  3. 各回答を brand/brand.json に記録し、brand.py check で確認します。@マークにはシードがありません:でっち上げないでください。ユーザーが入力するまで handles は空のままにします。ユーザーが入力したら、次のコマンドで記録します:python3 -I scripts/brand.py set-handles brand/brand.json @profile [@profile2]。

ワークフロー

  1. projects/<slug>/ を作成します(slugはテーマの短い名前)。動画を projects/<slug>/entrada.<ext> にコピーします。

  2. python3 -I scripts/transcribe.py projects/<slug>/entrada.<ext> projects/<slug>/transcricao.json を実行します。doctor が READY WITH LIMITS(faster-whisper なし)を返した場合、文字起こし前に pip install faster-whisper でインストールするか、既存の transcricao.json を提供するよう促します。音声のない動画はここで失敗します:別のファイルを要求してください。

  3. python3 -I scripts/cut.py detect projects/<slug>/transcricao.json projects/<slug>/cortes.json を実行します。

  4. カットのリスト(ID、開始~終了時間、タイプ:無音、フィラー、繰り返し)と節約された合計時間をユーザーに表示します。拒否されたカットは、projects/<slug>/decisions.json に {"cuts_removed": ["c3"]}(拒否されたID)を記録し、python3 -I scripts/review_apply.py apply projects/<slug> projects/<slug>/decisions.json を実行します(カットは revisao.json に保持され、復元可能です)。cortes.json を手動で編集しないでください。

  5. グラフ(オプション): 発言の理解に役立つカード(期限、条件、手順など)があれば、約8秒ごとに最大1枚を提案します。ユーザーが「はい」と答えたら、references/graficos.md に従って projects/<slug>/graficos.json に記録します(タイトル60文字以内、本文140文字以内、カット済みタイムライン上の at 位置、1~6秒間、必要に応じて materiais/ からの画像)。カードがない場合は、この手順をスキップします。

  6. python3 -I scripts/render.py projects/<slug> preview を実行し、projects/<slug>/saida/preview.mp4(540×960)のパスを伝えます。

  7. レビュー: プレビュー後、Chromium ベースのブラウザでレビューページを開きます。macOS では open -a "Google Chrome" review/review.html(単なる open は Safari を開く可能性があり、フォルダにアクセスできません)。Linux では、デフォルトが Chromium/Chrome の場合は xdg-open review/review.html、それ以外は google-chrome review/review.html とします。ユーザーに projects/<slug>/ フォルダを選択するよう促します。その前に、読み取りビューを生成します:python3 -I scripts/review_apply.py build projects/<slug>。詳細は references/revisao.md を参照してください。

  8. 「reviewを適用」 → 次の順序で実行します:python3 -I scripts/review_apply.py apply projects/<slug> projects/<slug>/decisions.json、python3 -I scripts/review_apply.py build projects/<slug>、python3 -I scripts/render.py projects/<slug> preview。ユーザーに「Recarregar review.json」をクリックするよう伝えます。apply が失敗した場合(コード1)、何も書き込まれていません:メッセージを読み、判断を修正します。ページを開けない場合(ブラウザがフォルダにアクセスできず、代替手段もない場合)、会話の中でレビューを行い、同じ形式で decisions.json を記録します。

  9. カバー — フレームを選ぶ(プレビュー承認後):元の動画から候補フレームを抽出します。python3 -I scripts/cover_frames.py video projects/<slug>/entrada.<ext> projects/<slug>/capa(オプション --n 3。各行にパスを出力します)。または、ユーザーが写真を送ってきた場合は、python3 -I scripts/cover_frames.py photo <photo> projects/<slug>/capa(capa/foto.png に保存)。capa/candidato-N.png ファイルを表示し、ユーザーが希望する笑顔のフレームはどれかを尋ねます。選択するのはユーザーであり、ツールは鮮明で適度に分散したフレームを分離するだけで、笑顔は検出しません。どのフレームも気に入らない場合は、写真を送ってもらうか、別の --n 値で再実行します。詳細は references/capa.md を参照してください。

  10. カバー — 合成(フレーム選択後)。詳細は references/capa.md を参照してください。 (a) @マーク(必須): brand/brand.json の handles が空の場合、@マークを一度尋ね、python3 -I scripts/brand.py set-handles brand/brand.json @profile で記録します。決してでっち上げないでください。 (b) フック(最大28文字、例:「3 MITOS」)、ピルエリア(最大28文字)、サブタイトル(最大90文字。最後の改行以降の部分は水色で表示)を尋ねます。 (c) Figma を使用する場合(Figma コネクタが利用可能で認可されている場合が望ましい):figma-use スキルを use_figma の前に読み込み、POSTS-OUTUBRO ファイルのフレーム 272:2 を複製し、写真とテキストを置き換え、@マークを追加し、PNG 1x で projects/<slug>/capa/capa.png にエクスポートします(詳細な手順は references/capa.md)。 (d) Figma なし、またはエクスポートが失敗した場合: python3 -I scripts/cover_compose.py projects/<slug>/capa/candidato-N.png brand/brand.json projects/<slug>/capa/capa.png --hook "3 MITOS" --area "ISENÇÃO DE IR" --subtitle "linha branca\nlinha em destaque"(または capa/foto.png)。コード1 = 何も書き込まれていません。メッセージを読んでください(@なし、写真が小さい、フックが2行を超える、テキストが長すぎる、出力が入力ファイルと同じ、Chromium なし)。 (e) capa.png をユーザーに表示し、承認を求めます。ユーザーが修正を希望する場合は調整し、再度生成します。

失敗(任意のスクリプトでコード1):メッセージを読み、原因を修正して(ブランドがないか無効、文字起こしに発話がない、ファイルがない、カードが無効、グラフレンダラーがない — メッセージがどのカードかを示します)、再実行します。不完全なファイルを残さないでください。

トリガー

  • 「build preview」 / 「montar preview」 → python3 -I scripts/render.py projects/<slug> preview を実行します。
  • 「final」 / 「versão final」 → python3 -I scripts/render.py projects/<slug> final を実行します(1080×1920、saida/final.mp4)。プレビューを提供した後にのみ実行します。ユーザーの「final」はプレビューの承認を意味するため、確認を求めずにレンダリングします。

目標尺

Reel ショート:12~15秒、詳細版:30~45秒。カット済みの動画の長さ(元の長さからカットの合計を引いたもの)を計算します。いずれの範囲にも収まらない場合は警告し、調整方法(さらにカットする、またはセグメントを保持する)を提案します。ブロックはしません。

まだ存在しないもの

ページレビュー、マテリアルタブ(手順7、8)、グラフカード(手順5)、カバー(手順9、10:フレーム選択、Figma または scripts/cover_compose.py による合成)は既に存在します。公開機能はありません:自動的に Instagram に投稿されることはありません。笑顔検出もありません(ユーザーがフレームを選択します)。assets/fonts/ にあるのは Poppins-Bold.ttf のみです:字幕は Poppins Bold で出力され、カードとカバーもすべてのテキストに同じウェイトを使用します(Figma で作成されたカバーは正確なタイポグラフィで出力されます)。完全なブランドデザインのためには、assets/fonts/ に Poppins-Regular.ttf、Poppins-SemiBold.ttf、Poppins-ExtraBold.ttf も配置してください(SIL OFL ライセンス、リポジトリに追加可能)。動画と字幕は render.py によってのみ出力されます(動画や字幕を書き込む他のスクリプトはデバッグ用です)。

関連スキル