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 がエラーを返す)の場合のみ実行します。
brand/brand.jsonがない場合のみ、シードを生成します:python3 -I scripts/brand.py seed brand/brand.json。シードはbrand/guia-visual.md(紺色#001931、Poppins、静的スタイルの字幕)から生成されます。seedはファイルが存在しない場合にのみ使用され、既存のファイルには上書きしません(拒否されます)。ファイルは存在するが不完全または無効な場合は、checkが指摘したキーを修正してください。--forceは使わないでください。- 一度に1つの質問 をし、常にシードの値を提案して、次の質問に進む前に回答を待ちます:(a) パレット、(b) フォント、(c) 字幕スタイル、(d) 公式アカウントの@。
- 各回答を
brand/brand.jsonに記録し、brand.py checkで確認します。@マークにはシードがありません:でっち上げないでください。ユーザーが入力するまでhandlesは空のままにします。ユーザーが入力したら、次のコマンドで記録します:python3 -I scripts/brand.py set-handles brand/brand.json @profile [@profile2]。
ワークフロー
-
projects/<slug>/を作成します(slugはテーマの短い名前)。動画をprojects/<slug>/entrada.<ext>にコピーします。 -
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を提供するよう促します。音声のない動画はここで失敗します:別のファイルを要求してください。 -
python3 -I scripts/cut.py detect projects/<slug>/transcricao.json projects/<slug>/cortes.jsonを実行します。 -
カットのリスト(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を手動で編集しないでください。 -
グラフ(オプション): 発言の理解に役立つカード(期限、条件、手順など)があれば、約8秒ごとに最大1枚を提案します。ユーザーが「はい」と答えたら、
references/graficos.mdに従ってprojects/<slug>/graficos.jsonに記録します(タイトル60文字以内、本文140文字以内、カット済みタイムライン上のat位置、1~6秒間、必要に応じてmateriais/からの画像)。カードがない場合は、この手順をスキップします。 -
python3 -I scripts/render.py projects/<slug> previewを実行し、projects/<slug>/saida/preview.mp4(540×960)のパスを伝えます。 -
レビュー: プレビュー後、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を参照してください。 -
「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を記録します。 -
カバー — フレームを選ぶ(プレビュー承認後):元の動画から候補フレームを抽出します。
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を参照してください。 -
カバー — 合成(フレーム選択後)。詳細は
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 によってのみ出力されます(動画や字幕を書き込む他のスクリプトはデバッグ用です)。