リール動画を、あなたのマシンでレンダリング
「ランニングを始める人がよくやる3つの間違いについて、私のランニングアカウント用にリールを作って」といったリクエストに応えて、完成したリール動画を提供します:フック、シーンごとのスクリプト、ナレーション、BGM、そして縦型1080x1920のMP4ファイルを、Remotionを使ってローカルでレンダリングします。編集アプリにデータを送信する必要は一切ありません。
動画はテキストベースです:暗い背景にソフトな輝き、大きなタイトルが表示されるシーン、番号付きリスト、アニメーションする数字、Before/Afterカード、そして「コメント PALAVRA」という最終ブロックが含まれます。字幕は単語ごとに中央に表示され、太字とイタリックが交互に強調されます。
<skill> は、このスキルのフォルダ(このSKILL.mdが置かれている場所)を示します。
前提条件
- Node 18以上(
node -vで確認)。必須です。 - ffmpeg(オプション)。BGMの音量を平準化するためだけに使います。これがない場合、音楽はそのままの音量で入ります。
Mac:
brew install ffmpeg。Windows:winget install ffmpeg。Linux:sudo apt install ffmpeg。 - ElevenLabsのAPIキー(オプション)。これがない場合、リールには音声がなく、アニメーションする字幕とBGMのみが表示されます。
- 空き容量約600 MB(Remotionと、最初のレンダリング時にダウンロードされるブラウザ用)。最初のレンダリング時にはインターネット接続が必要です(Google Fontsからフォントをダウンロードするため)。
7つのステップで行うワークフロー
1. 簡単なヒアリング(1メッセージのみ)
すべての質問を一度に行い、括弧内にデフォルトの提案を示します。ユーザーがすでにリクエストで何か言っている場合は、再度質問しないでください。
- ニッチとプロフィール: そのアカウントは何についてのものですか?
- ターゲット視聴者: 誰が見ますか?(その分野の初心者)
- リールの目的: リーチ、保存、またはコメントを促して資料を送ること?(コメント)
- CTA: ユーザーがコメントするキーワードと、何を受け取るのですか?(例:「ガイドとコメントして、ガイドを送ってもらう」)
- トーン: ストレート、教育的、挑発的、軽い?(ストレート)
- 音声と音楽: ElevenLabsのキーはありますか?音楽(MP3、あなた自身の曲かロイヤリティフリーのライブラリから)はありますか?特定の色はありますか?(音声なし、音楽なし、暗いテーマ、ハイライトは黄色)
ユーザーにチャットでキーを貼り付けるように依頼しないでください。彼らは.envファイルにそれを入れます(ステップ4)。
2. フックとスクリプト
コードを書く前に、必ずブロックで表示します:フック、番号付きシーン(タイプ+画面に表示されるもの+音声)、推定時間。ナレーションを生成する前にOKを求めてください。なぜなら、ナレーションはElevenLabsのクレジットを消費するからです。ナレーションなしの場合、ユーザーが「ただ作って」と依頼した場合は、直接進んでも構いません。
フック(シーン1、最大2秒)
- 話すのは最大6〜7語。それ以上必要な場合は、フックではなく導入です。
- 画面は最初のフレームにフック全体をすでに表示します(
ganchoタイプがこれを行います)。 - 効果的なフォーマット:悩みを問う質問(「毎日トレーニングしてるのに変わらない?」)、常識に反する主張(「毎日投稿するのはあなたの妨げになっている」)、具体的な数字(「最初の5kmを妨げる3つの間違い」)、結果(「これでダイレクトメッセージで顧客を失っている」)。
- 「こんにちは、皆さん」「この動画では」「ご存知でしたか?」や自己紹介は禁止です。
スクリプト(合計20〜45秒)
- 4〜8シーン。各シーンは1.5〜6秒:1秒あたり2.9語のペースで、各シーンの音声は5〜17語。
- 途切れずに話すこと、途切れさせないこと。 すべてのシーンのテキストを続けて読んだとき、人が止まらずに話しているように聞こえる必要があります。各シーンは前のシーンの文やアイデアを継続します。一言の文、間を作るための省略記号、動詞のないリストは禁止です。最初に全文を書き、その後でシーンに分割してください。
- 1シーンにつき1つのアイデア。画面には短いバージョン(タイトル、項目、数字)を表示し、音声で説明します。
- 短い数字は音声でも数字で言います(「23時間」「1.6グラム」)。字幕がすっきりします。
- 約束は本当のことだけ。統計を捏造しないでください。出典がない場合は、別のタイプのシーンを使用してください。
- 最後のシーンは常に
ctaで、音声はそのキーワードをはっきり言います(「ガイドとコメントして、ステップバイステップを送ります」)。
3. スタジオ(1回限り)とリール用フォルダのセットアップ
スタジオはRemotionがインストールされたフォルダです。新しいリールごとに、ただサブフォルダとその中のcenas.jsonだけが必要なので、npm installは一度だけ実行します。
# 初回のみ
cp -R <skill>/template ~/reels-estudio
cd ~/reels-estudio && npm install
# 各リールごと(<slug>を短い名前に置き換えてください。例:3-erros-corrida)
mkdir -p ~/reels-estudio/reels/<slug>/public
~/reels-estudio/reels/<slug>/cenas.jsonを(以下のフォーマットで)作成します。スタジオのルートにあるcenas.jsonはStudioを開くためのサンプルですので、触る必要はありません。
4. ナレーション(ElevenLabsのキーがある場合のみ)
キーは~/reels-estudio/.envに保存します(<skill>/.env.exemploからコピー):
ELEVENLABS_API_KEY=あなたのキー
ELEVENLABS_VOICE_ID=ボイスID # オプション
スクリプトは環境変数またはこの.envファイルから読み取り、キーを決して出力しません。キーを読んだり、表示したり、他の場所にコピーしたりしないでください。
cd ~/reels-estudio
node <skill>/scripts/narrar.mjs --projeto reels/<slug> --simular # 検証、コスト表示、APIは呼び出さない
node <skill>/scripts/narrar.mjs --vozes-pt # パブリックライブラリのポルトガル語(ブラジル)のボイス一覧
node <skill>/scripts/narrar.mjs --projeto reels/<slug> # 実際に生成
- 常に最初に
--simularを実行してください。cenas.jsonを検証し、ナレーションが消費する文字数(クレジット)を表示します。 - ボイス: ユーザーに選ばせてください。
--vozes-ptはパブリックライブラリのブラジルポルトガル語のボイスを一覧表示します。それらを使用するには、ユーザーがWebサイトのVoice Libraryでアカウントに追加し(「Add to my voices」)、--voz <id>を指定するか、.envにELEVENLABS_VOICE_IDを設定します。--vozesはアカウントに既にあるボイスを一覧表示します。選択がない場合、スクリプトはポルトガル語を非ネイティブのアクセントで話すElevenLabsの既製ボイスを使用します:そのことを伝えてください。 - テキスト全体は1回の呼び出し(
/v1/text-to-speech/{voice_id}/with-timestamps)で送信され、イントネーションが連続して出るようにします。各文字のタイミングが各単語のタイミング(同期された字幕)と各シーンのタイミングになります。 - 出力:
reels/<slug>/public/narracao.mp3とpublic/palavras.json、そしてcenas.jsonがそれらを指すように更新されます。同じテキストと同じボイスで再度実行してもクレジットは消費されません。別のテイクの場合は--refazerを指定します。--velocidade 1.08で速度を変更できます(0.7〜1.2)。 - ナレーション後に音声を変更しましたか?
narrar.mjsを再度実行してください。 字幕は音声から生成されます。
キーがない場合:このステップはスキップします。リールには音声がなく、アニメーションする字幕が音声の推定時間(1秒あたり2.9語)で表示され、BGMがあればそれと一緒に表示されます。
5. BGM(ユーザーが提供した場合のみ)
音楽はユーザーが提供します:ユーザー自身の曲、またはロイヤリティフリーのライブラリ(YouTube Audio Library、Pixabay Music)からのもので、各曲のライセンスを尊重します。ライセンスが疑わしい「MP3ダウンロード」サイトやYouTube動画などから音楽をダウンロードしたり、そのようなことを提案したりしないでください。 BGMがない場合、リールには音楽は含まれません。
node <skill>/scripts/mixar.mjs /path/to/music.mp3 --projeto reels/<slug>
node <skill>/scripts/mixar.mjs /path/to/music.mp3 --projeto reels/<slug> --inicio 12 # イントロをスキップ
ffmpegがある場合、スクリプトはリールの長さに合わせてBGMをカットし(短い場合は繰り返し)、音量を平準化し、フェードイン/アウトを適用します。ffmpegがない場合、そのままコピーします。レンダリング時に、BGMの音量は低く設定され、音声があるときは自動的に下がります(コンポジションでのシンプルなダッキング)。音量はcenas.jsonのvolumeTrilhaで0〜1の範囲で設定できます(デフォルト:ナレーションありの場合は0.3、なしの場合は0.8)。
ユーザーがナレーションの後に音楽を持ってきた場合は、実際の長さを使用してカットするために、narrar.mjsの後にmixar.mjsを実行してください。
6. 確認、プレビュー、レンダリング
cd ~/reels-estudio
node <skill>/scripts/checar.mjs --projeto reels/<slug>
すべての✖(エラー)を修正し、!(警告)を確認してください。その後、レンダリング前に3フレームを確認してください(フック、中間、CTA)。タイミングはnarrar.mjsの出力から取得するか、秒数に30を掛けて計算します:
npx remotion still Reel out/<slug>-q1.png --props=reels/<slug>/cenas.json --public-dir=reels/<slug>/public --frame=30
npx remotion still Reel out/<slug>-q2.png --props=reels/<slug>/cenas.json --public-dir=reels/<slug>/public --frame=<中間>
npx remotion still Reel out/<slug>-q3.png --props=reels/<slug>/cenas.json --public-dir=reels/<slug>/public --frame=<終了-20>
画像を開いて、テキストの切れ、孤立行、重なりを確認してください。その後、レンダリングします:
npx remotion render Reel out/<slug>.mp4 --props=reels/<slug>/cenas.json --public-dir=reels/<slug>/public
30秒のリールは1〜4分かかります。マシンが弱い場合は、--concurrency=2を追加してください。素早いドラフトの場合は、--scale=0.5(540x960で出力)を指定します。
7. チェックリストとともに納品
MP4ファイルのパス(~/reels-estudio/out/<slug>.mp4)、最終的なスクリプト、そして投稿のキャプションの提案を提供します。その前に、以下の項目を確認して納品します:
- コントラスト: 字幕が背景に対して読みやすいこと(
checar.mjsで測定、最小4.5:1)。 - 約3秒以上静止している部分がないこと: 6秒を超えるシーンや、字幕なしの長いポーズがないこと。
- フックが2秒以内で、最初のフレームですでに表示されていること。
- 最後にCTAがあること、画面と音声の両方で、正しいキーワードが使われていること。
- 時間は20〜45秒であること。
- 音声がある場合:字幕が音声と一致していること(MP4の中間部分を確認)。
-
out/にあるプレビュー用PNGは削除して構いません。
cenas.json
{
"cores": { "fundo": "#0E0F12", "texto": "#F4F4F2", "destaque": "#FFC94A", "suave": "#9A9CA3", "sobreDestaque": "#0E0F12" },
"fonte": "Inter",
"fonteItalica": "Instrument Serif",
"legenda": true,
"narracao": null,
"palavras": null,
"trilha": null,
"cenas": [
{ "tipo": "gancho", "titulo": "毎日トレーニングしてるのに変わらない?", "destaque": "変わらない",
"fala": "毎日トレーニングしてるのに変わらない?" },
{ "tipo": "titulo", "titulo": "問題はトレーニングじゃない。", "subtitulo": "残りの23時間で何が起こっているかだ。",
"fala": "問題はほとんどの場合トレーニングではなく、残りの23時間で何をするかです。" },
{ "tipo": "lista", "titulo": "3つの原因",
"itens": ["7時間未満の睡眠", "タンパク質不足", "同じ負荷の繰り返し"],
"fala": "3つの原因があります:7時間未満の睡眠、タンパク質不足、そして何ヶ月も同じ負荷を繰り返すことです。" },
{ "tipo": "numero", "de": 0, "ate": 1.6, "decimais": 1, "sufixo": " g", "rotulo": "体重1kgあたり、1日のタンパク質",
"fala": "トレーニングをする人によく言われる基準は、1日に体重1kgあたり1.6グラムのタンパク質です。" },
{ "tipo": "antes-depois", "antes": "毎週新しいトレーニング", "depois": "同じトレーニング、負荷を上げる",
"fala": "毎週トレーニングを変える代わりに、同じトレーニングを維持して負荷を上げてください。" },
{ "tipo": "cta", "chamada": "コメント", "palavra": "プラン", "promessa": "で23時間のチェックリストを送ります",
"fala": "プランとコメントしてください。23時間のチェックリストを送ります。" }
]
}
同じサンプルが<skill>/exemplos/cenas.exemplo.jsonにあります。
シーンのタイプ
すべてのシーンにはfala(必須)とduracao(秒単位、オプション。ナレーションがない場合のみ有効)があります。
| タイプ | フィールド | 使用法 |
|---|---|---|
gancho | titulo, destaque | 最初のシーン。巨大なタイトル。destaqueはハイライトカラーでイタリック表示される部分。タイトルが音声と同じ場合、字幕は繰り返されません。 |
titulo | titulo, subtitulo, destaque | 強い主張。タイトルは最大約50文字。 |
lista | titulo, itens (2〜5) | 番号付きの項目が一つずつ表示されます。各項目は最大約30文字。 |
numero | ate, de, prefixo, sufixo, decimais, rotulo | 値までカウントアップする数字。例:"prefixo": "R$ "、"sufixo": "%"。 |
antes-depois | antes, depois, rotuloAntes, rotuloDepois | 2枚のカード。「後」のカードがシーンの中間でハイライト表示されます。 |
cta | palavra, chamada, promessa | 最後のシーン。「コメント」+キーワードをブロックで、ユーザーが受け取るものを表示。キーワードは最大9文字。 |
色とフォント
cores: 任意の#rrggbbカラー。デフォルトは暗いニュートラルでハイライトは黄色。明るいテーマの場合は、fundoとtextoを反転させ、十分に暗いdestaqueを選んでください。checar.mjsは低コントラストを警告します。fonteとfonteItalica: Google Fontsのファミリー名(例:"Montserrat"、"Playfair Display")。fonteはウェイト900が必要です。何もダウンロードしない場合は"sistema"を使用します。ファミリーが存在しないか、インターネットに接続できない場合、レンダリングはシステムフォントで続行されます。legenda: falseで単語ごとの字幕をオフにします。
よくある問題
- 「palavras.jsonは別のバージョンのcenas.jsonのものです」: ナレーション後に音声が変更されました。
narrar.mjsを再度実行してください。 - ElevenLabs 401: キーが間違っているか、テキスト読み上げの権限がありません。404: ボイスがアカウントにありません。Voice Libraryから追加してください。
- テキストが画面からはみ出る: タイトルまたは項目を短くしてください。
checar.mjsが長いものを警告します。 - レンダリングが遅い、またはフリーズする:
--concurrency=2を指定し、ブラウザを閉じて、ディスク容量を確認してください。 - 最初のレンダリングに時間がかかる: Remotionがヘッドレスブラウザをダウンロードします(一度だけ)。
このスキルがやらないこと
- 録画、録画されたビデオ、画像、アバターは使用しません。リールはテキストベース(テキスト、数字、カード)です。映像編集には別のツールを使用してください。
- 音声のクローン作成や、ユーザー自身のElevenLabsキーなしでの音声生成は行いません。
- 音楽の選択やダウンロードは行いません。BGMは常にユーザーが提供する必要があります。
- Instagramへの投稿や、投稿のスケジュール設定は行いません。
- ダッキングはシンプルです(音声があるときに音楽が小さくなる)。プロのミキシングの代わりにはなりません。