Communitygithub.com

robertomanfroi/videos-opus

縦撮り動画(カメラに向かって話す人)を「自分でスマホ編集した」風のReelに仕上げます。単語ごとの字幕、生のスクリーンショットを頭上に、小さなタイトル、カット編集、間や繰り返しなし、最大90秒。別スキルから依頼された場合やユーザーが「スマホ編集風」を希望した時に使用します。

videos-opus とは?

このスキルは、クリエイター自身がスマートフォンで編集したように見える縦型動画(Reel)を生成するためのものです。主な特徴は、単語ごとに切り替わるキャプション、実在するスクリーンショットの切り抜きを話者の頭上に配置する視覚スタイル、そして一切のアニメーションやフェードを排したカット編集にあります。対応プラットフォームはClaude CodeなどのAIエージェントで、コマンドランチャー`$K`を介して動作します。ワークフローは、動画の取り込みと高速文字起こし、カット選択、ノイズ除去、スクリーンショットのトリミング、HTMLテンプレートによる要素合成、そして最終レンダリングという手順を踏みます。特に、PCの性能を考慮し、レンダリング前にスナップショットで確認する、不要な処理を避けるなど、効率的な処理を重視しています。最終的には「prontos/」フォルダに成果物を出力し、AIが作業内容を簡潔に報告します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/robertomanfroi/videos-opus/tree/HEAD/kit/.claude/skills/estilo-celular

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

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

ドキュメント

スマホ編集風(Estilo Celular)

唯一のルール: 見る人が「これはクリエイター自身がInstagramのエディターで編集したんだ」と感じること。決して代理店やAIがやったように見えてはいけません。迷ったら「少なく、より生で、より小さく」。ここでかわいいモーショングラフィックスは禁止です。

始める前に ../perfil-criadora.md を読み、ルートの perfil.json を読み込む(または作成する)こと。

ビジュアル — 譲れない条件

要素ルール
スクリーンショットクリエイターのマイプリントフォルダから実際のスクリーンショット(プロフィールヘッダー、インサイト、いいね/コメント/保存、再生数、DM、コメント、投稿)を使用。角は直角、枠なし、影なし、フレームなし、角丸カードなしでそのまま切り抜き。頭上に配置。
頭上テキストタイトルフォント(.tit)、白、小さい — タイトルは48〜70px、ラベルは1080幅で40〜48px。スクリーンショットの左端に左揃え。 アクセントカラー(.y)はたまに1単語のみ。サンセリフ(.sans)は「悪い/良い/バズった」のようなラベルだけ。
影後ろの壁が明るい場合のみ(.sh)。テキストの後ろにボックス、背景、ガラスは絶対に配置しないこと。
動きなし。 要素はカット編集で出入りするのみ(show()/hide())。フェード、スライド、ズーム、バウンド禁止。
絵文字テンプレート上では実際の文字(✅ ❌ 🔥 ❤️ 👇 🚨 …)を使用。montar.mjs がTwemojiのアートに差し替えます。アイコンは絶対に描かないでください。
キャプション1単語ずつ、54px、白、ソフトな影付き(輪郭は不可)。胸の中央、あごのすぐ下(reel.json の capTop)に配置。単語ごとにカット編集。
固定タイトル話題のタイトルは、その上でスクリーンショットが切り替わっている間、長時間画面に表示したままにできます。
リスト絵文字+単語のチェックリスト(✅ 字幕 / ❌ タイトル)。話されている単語に合わせて1項目ずつ表示。
モックアップ避けてください。実際のスクリーンショットを使用してください。スクリーンショットが存在せず、かつクリエイターが依頼した場合のみモックアップを描いてください。

カットのルール

  • 息継ぎや間を一切残さない:−30dB以下が0.15秒以上続く部分はすべて削除(cortar.mjs が自動実行)。
  • 繰り返し、言い直し、言い直しのやり直しはすべて削除。最後の最もきれいなバージョンを残す。
  • 文字起こしツールは繰り返しを隠し、タイミングを誤ることがあります。 カット後は必ず clean.mp4 を再文字起こしし、最初から最後まで読んで、重複したフレーズ、切れた単語、不足した動詞がないか確認。きれいになるまでカットし直す。
  • 最大90秒。クリエイターが別の指定をした場合を除く。納品時には何をカットしたか伝える。
  • J/Lカット はデフォルトでオン(--jl 6 でよりソフト、--no-jl でオフ)。

速度に関するルール(クリエイターのPCは遅い可能性がある — 以下の手順よりも優先)

  • novo-projeto.mjs の文字起こしはすでに --rapido(軽量モデル、カット選択のみ)。 clean.mp4 の再文字起こし(キャプション用)は高精度モデルを使用 — カットのバージョンごとに1回実行し、調整のたびには実行しない。
  • すべての接合箇所は1回の呼び出し(1回のモデルロード)で確認: $K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 --janelas t1,t2,…(時間はcleanのタイムライン上)。決して1ウィンドウずつ実行しない。
  • ラフ画全体をレンダリングしてフレームを確認しない。代わりに $K --em video-projects/<slug> hyperframes snapshot --at t1,t2,… -o snapshots を使用(要素の変更ごとに1回)してPNGを確認。スナップショットが正しくなってから、動画を1回レンダリングする。 変更が要求された場合のみ再レンダリング。
  • raw.mp4 / clean.mp4 のエンコーダーは自動選択(NVIDIA / Intel / AMD / Apple、それ以外はCPU)。変更しない。
  • 各時間のかかる手順の前に、何を実行中で数分かかる可能性があるかを、短いポルトガル語の行で1つ警告すること(「動画を文字起こし中 — お使いのPCでは数分かかる場合があります」)。待機中にフリーズしているように見えないようにするため。

フロー(すべてのコマンドはランチャー $K 経由)

M=.claude/skills/_motor · K = videos-opusスキルのランチャー: "<VO>\bin\node.exe" "<VO>\scripts\video.mjs" kit (<VO> はvideos-opusスキルのフォルダ(このガイドを読むよう指示した SKILL.md がある場所))。これによりポータブルプログラムがパスに追加され、キットの作業フォルダで実行されます($K pasta で確認可能;プロジェクトは <pasta>\video-projects\<slug> に配置)。$K --em <subpasta> … はそのサブフォルダ内で実行。npx、Python、生の node は使用禁止:すべて $K 経由で実行。

  1. プロジェクト作成+高速文字起こし: $K node $M/novo-projeto.mjs "<video>" <slug> .claude/skills/estilo-celular → video-projects/<slug>/ 内に assets/raw.mp4(1080×1920, 30 fps)、assets/raw.json、assets/palavras.txt、 フォント、src/index.template.html が作成。slugは短く、小文字、ハイフン区切り(promo-engrene)。
  2. フレーミング: rawのコンタクトシートスナップショットを撮る($K --em video-projects/<slug> ffmpeg -i assets/raw.mp4 -vf "fps=1/4,scale=180:-1,tile=12x1" -frames:v 1 assets/contato.png) そして確認: 頭のてっぺんとあごの位置はどこか。要素はy≈100から頭のてっぺんの間に配置; キャプションはあごの下 → プロジェクトルートに reel.json を書く: {"capTop": <px>}(デフォルト1380)。
  3. カット選択: assets/palavras.txt を読み、assets/keeps.json を書く ({"fps":30,"keeps":[{"from":0,"to":9.38,"why":"…"}]})。各 why はポルトガル語で何を残したかとその理由を説明。
  4. カット: assets/ 内で: $K --em video-projects/<slug>/assets node ../../../$M/cortar.mjs → clean.mp4 + edit-decisions.json。
  5. 確認: プロジェクトルートで: $K --em video-projects/<slug> node ../../$M/transcrever.mjs assets/clean.mp4 assets/transcript.json --nomes "<プロフィール用語>"。 繰り返しや単語の欠落がある場合は手順3に戻る。聞き間違えられた単語は assets/caption-fixes.json({"cloud":"Claude"})。 $K --em video-projects/<slug> ffmpeg -i assets/clean.mp4 -af silencedetect=noise=-30dB:d=0.25 -f null - → 無音が残っていてはいけない。
  6. スクリーンショット: プロフィールの pasta_prints から画像をリスト(新しい順)し、使用前に各候補を実際に確認。ffmpegで assets/prints/ に切り抜き(-vf crop=w:h:x:y)、出典を assets/prints/ORIGEM.md に記録。 適切なスクリーンショットがない場合は、どの画面があればよいかを伝え、スクリーンショットなしで進める(後で調整として依頼可能)。決してスクリーンショットを捏造しない。
  7. 合成: src/index.template.html を編集 — 要素は ELEMENTOS ブロックに、タイミングは TEMPOS ブロックに。 タイミングは $K --em video-projects/<slug> node ../../$M/ancoras.mjs "frase" "outra frase"(プロジェクトルート)から取得し、話されている単語に合わせる。カット編集のみ。
  8. 組み立て+チェック: $K --em video-projects/<slug> node ../../$M/montar.mjs → $K --em video-projects/<slug> hyperframes lint → 各要素の切り替え時のスナップショット ($K --em video-projects/<slug> hyperframes snapshot --at …)を撮り確認: 顔が隠れていないか、テキストが読めるか、スクリーンショットがタイトルと揃っているか。 その後、レンダリングして納品(ランチャー経由、キットの作業フォルダで): $K node $M/renderizar.mjs <slug> — ロックを確認、バックグラウンドでレンダリング、検証、自動で prontos/ にコピー。出力3 = まだレンダリング中: $K node $M/renderizar.mjs <slug> --esperar を実行して PRONTO と出るまで待つ。決して $K --em video-projects/<slug> hyperframes render を直接実行したり、手動で prontos.mjs を実行しない。
  9. 納品: ポルトガル語で短く回答: 動画の場所、カットした内容、使用したスクリーンショット、不明点。 決して公開したり送信したりしない。

納品後の調整

「価格の部分を削除」 → keeps.json を編集、手順4〜5を繰り返し、ancoras.mjs で該当部分以降のすべてのタイミングを再計算し、手順8を繰り返す。「キャプションを下げて」 → reel.json を編集し、手順8を繰り返す。 「スクリーンショットを交換」 → 手順6〜8のみ。クリエイターが変更を依頼していない部分をゼロからやり直さない。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

関連スキル