扎提·関係映像エッセイ
これは完成作品『なぜ一部の良い人は間違った人と付き合うのか?』から抽出した再利用可能なワークフローです。目的は同じ脚本を複製することではなく、新しいエピソードごとに同じ制作手法を維持することです:
具体的な物を使って関係性を語るストーリー + 宋体の大きな文字 + 映画/実写/写真の質感 + 抑制の効いたナレーション + 3:4カバー。
固定されているのは方法であり、素材ではない
固定:16ビートのナラティブ文法、フォント/カラーパレット/モーション/サウンドの標準、3:4カバー、出典と倫理の厳格なゲート、QA。
変更可能:脚本、ナレーション、音楽、映画/顧客実写/製品/写真/ライセンスストック、人物肖像、カバー背景、公開用コピー。
AIは自ら背景動画を探すことができます:顧客に素材がない場合、scripts/stock_search.pyを使ってMixkit/Coverr/Pexels/Pixabayを検索し、3つの候補を選び、scripts/fetch_stock.pyでダウンロード、オーディオ除去、標準化、マニフェスト書き出しを行います。詳細は references/stock-sources.md を参照。
マスターバージョンの『第七天国』、フロイト/アリストテレス/カントは、単なるリファレンス実装であり、毎回必ず使わなければならない素材ではありません。顧客が実際の店舗を望むなら顧客素材を使用し、映画史の事例を望むなら2~3本のパブリックドメイン映画に変更し、顧客に素材がなければテキスト/グラフィックのみにします。「シリーズ感」のために特定の映画や顔を無理に使わないでください。
詳細な選択については references/client-brief.md と references/asset-strategy.md を参照。
まず適用可能か判断する
適用可能:
- 男女関係、恋愛、親密な関係、境界、自己価値、与えることと報われること、別れと復縁など、中国語の感情的なテーマ。
- ブランドや組織が「関係性、境界、尊重、寄り添い」についてのクライアントストーリーを、散文的な表現に適した形で伝えたい場合。
- ユーザーが2:40~3:40の横長映像エッセイ(ナレーション、字幕、映画的な質感あり)を希望する場合。
- ユーザーが明示的に「『良い人と間違った人』のスタイルで」「以前のテンプレートを使って」「シリーズにして」と依頼した場合。
適用不可:
- 純粋な製品発表/販売促進/テンポの速いモンタージュ/機能説明。これらは別のフォーマットの方が適切。
- ユーザーが『カサブランカ』『花様年華』など、まだ著作権で保護されている断片を、ライセンスなしで使用するよう要求する場合。まずリスクを説明し、パブリックドメインの作品かユーザー提供のライセンス素材に変更する。
- ユーザーが9:16の縦型本編を希望する場合。本テンプレートは16:9の本編+3:4のカバー用。縦型はレイアウトをやり直す必要があり、単純に切り抜くことはできない。
完成品仕様(デフォルト)
| 項目 | デフォルト |
|---|---|
| 本編 | 1920×1080 / 30fps / 2:40–3:40 |
| 画面アスペクト比 | 16:9 |
| 言語 | 簡体字中国語ナレーション + 焼き込み字幕 + SRT |
| カバー | 1080×1440(3:4)、PNG + JPG |
| サウンド | ナレーション + オリジナルBGM + 雨音、約 −15 LUFS、真のピーク ≤ −1.5 dBFS |
| 字幕 | 画面内に焼き込み、別途 .srt ファイル |
| 納品物 | MP4、SRT、3:4カバー、公開用コピー、素材出典、編集可能なプロジェクトファイル |
| 顧客確認 | Brief → First still → Final の3つの確認ポイント |
マスターバージョンの場所(リファレンス実装)
参考マスターバージョン(リポジトリと一緒に配布はしません。アセット/構造の参考としてのみ使用):
- ローカル開発時:
~/Desktop/自媒体/good-people-wrong-person - 他のマシンでは:
--refで自分のマスタープロジェクトを指定
新しいエピソードでは、デフォルトでマスターバージョンの素材を流用しないでください。 --ref を使って vendor/、フォント、テクスチャ、そしてプレースホルダーの1トラックのオーディオを取得するためだけに使用します。映画、肖像、静止画、脚本、サウンドはすべてクライアントのブリーフに従って変更する必要があります。
マスターバージョンに含まれるもの:
index.html:201.37秒の完成作品の完全なhuashu-motion合成。cover/cover.html:1080×1440の3:4カバーソースファイル。assets/movies/:検証済み、音声除去済み、整数フレームに補完済みの『第七天国』(1927) 断片。assets/portraits/:フロイト、アリストテレス、カントのパブリックドメイン肖像。assets/stills/、assets/textures/、assets/fonts/、vendor/。assets/score.wav:前回エピソードのナレーション+BGM+雨音の完成ミックス。新しいエピソードでは必ず差し替えが必要で、そのまま流用してはいけません。output/:前回の納品物。参考用のみで、そのままコピーしないでください。
もしマスターバージョンが存在しない場合:templates/index.template.html と templates/cover-3x4.template.html を使ってコードを復元。映画断片と肖像は references/rights-and-ethics.md に従って再度取得し検証する必要があります。
新しいエピソードの始め方
SKILL="$HOME/.agents/skills/zhati-relationship-film"
$SKILL/scripts/new_episode.sh my-episode-slug --base "$HOME/relationship-films"
スクリプトの動作:
$BASE_DIR/my-episode-slugに新しいプロジェクトを作成(デフォルトは$HOME/relationship-films、--baseで変更可);- スキルの最新テンプレートコード(
index.html、cover/cover.html)をコピーし、次にマスターバージョンからvendor/、フォント、テクスチャ、そして一連の開始素材をコピー; - マスターバージョンの
assets/score.wavをプレースホルダーオーディオトラックとしてコピー(ページがひとまず動作するように); BRIEF.md、文稿.txt、字幕.srt、treatment.md、素材来源.md、发布文案.md、assets.manifest.jsonのテンプレートを生成;assets/imported/を作成し、次のステップと差し替えが必要なテキスト/素材スロットを表示。
その後、以下のパイプラインを実行します。新しいナレーションと新しい字幕を作成するステップは絶対にスキップしないでください。
パイプライン
0. クライアントのブリーフを読み、内容と素材を確定する
まず references/client-brief.md を読み、クライアントの要求を10行の内容計画にまとめます:
ターゲット / プラットフォーム / 尺 / 一言で言うとテーマ / フックとなる質問 / 2つの概念 / 思想的または心理的視点 / 倫理的転換 / 一言の小さな言葉 / 素材パターンと出典
次に references/beat-sheet.md を読み、テーマを16のナラティブビートに当てはめます。素材パターンはナレーションを書き始める前に決定します:顧客実写 / パブリックドメイン映画 / ライセンスストック / 写真 / テキストのみ / 混合。先に3分間書き上げてから顧客に素材を頼むようなことはしないでください。
デフォルトの構造:
- フック(質問1つ)
- 具体的なストーリー(雨/傘;他の具体的な物に変更可能だが、必ず1つの物が全体を通る)
- 「これは架空の物語です」という限定
- 2つの概念の区別(善良さ vs 適切さ、あるいは今回のエピソードに対応する概念のペア)
- 哲学的視点A(友愛/相互性/尊重など)
- 一人の人間の限界(「一人の努力だけでは二人の関係は完成できない」のようなもの)
- 感情の転換の質問(なぜ辛いのに次を期待してしまうのか)
- 心理的視点(反復/パターン;「一つの理解の角度」として使い、診断はしない)
- パターン認識(努力して承認を得る)
- 冷淡さと自己疑念
- 倫理的転換(傷はあなたが招いたものではない;責任は傷つけた側にある)
- 限定と例外(欺瞞、変化、付き合ってから見えるもの)
- 自己内省(2つの質問;鏡/映り込み)
- 哲学的視点B(自己尊重)
- とても小さな一言(実行可能な行動)
- 練習と結び(優しさを保ちつつ、自分自身の居場所も確保する)
- エンドクレジット/出典
新しいテーマに2人の哲学者が必要ない場合は、1人だけにしても構いません。心理的視点が必要ない場合は、8~9を1つの段落にまとめても構いません。構造を合わせるために引用や診断を捏造しないでください。
1. 新しいナレーションを書く
- 目標は950~1150字の漢字。通常の話速で約3分。ユーザーが既に原稿を持っている場合は、「呼吸できるように削る」編集を先に行い、立場は変えない。
- 限定的な表現を残す:一つの理解の角度 / すべての人に対する説明ではない / 傷の責任は相手のせいにできない。
- 結末には覚えられるような「小さなアクション」や「小さな言葉」を入れる。例:「私も寒い、この傘が必要なんだ」。
文稿.txtに書き込み、1段落1行で字幕生成しやすくする。
2. 新しいナレーションと新しいタイムラインを生成する
優先的にユーザー自身のローカル音声クローンを使用する(macos-local-voice スキル参照)。参照録音をアップロードしない。利用可能な音声がない場合は、明確にユーザーに尋ねる:本人録音 / ローカルクローン / システム音声 / 無音。
成果物:
- 完全なナレーションファイル
assets/voice.wav(48kHz、できれば24-bit); - 文ごとの開始・終了時間(JSONまたはCSV)、0.01秒単位;
- 新しい
CUES配列([start, end, text])。
マスターバージョンの194秒のナレーションを流用しないでください。マスターバージョンのタイムラインはリズムを理解するための参考に過ぎず、新しいエピソードのオーディオではありません。
3. BGMとミキシング
- 「ピアノ/弦楽器/軽い環境音 + 雨音」の方向性を維持し、既存の著作権付き楽曲は使用しない。
- ミキシング目標:ナレーションが明瞭に、音楽は −28〜−32 LUFS 程度、全体で約 −15 LUFS、真のピーク ≤ −1.5 dBFS。
assets/score.wavを出力し、プレースホルダーオーディオトラックを置き換える。ページ内の<audio id="score" ...>は残すが、長さは変更する。- 本テンプレートは
id="score"を使用しておりom-soundではないため、レンダリング時には--silentを追加する必要がある。そうしないとom renderがオーディオトラックを再構築しようとする。詳細はreferences/visual-system.mdの「サウンド」セクションを参照。
4. タイミングを再調整する
これは最も過小評価されがちなステップです。マスターバージョンのすべての時間はハードコードされています。新しいナレーションに差し替えたら、すべてのシーンでタイミングを合わせ直す必要があります。
references/beat-sheet.md の比率に従って16シーンに新しい長さを割り当て、その後:
- まず
CUES配列、ルートノードのdata-duration、JS内のDUR、<audio data-duration>を変更。 - 各シーンは「その段落の最初のナレーション文の開始点」をアンカーとし、シーンの終わりは次の段落の最初の文の開始点を境界とする。
- シーン内部のアニメーション時間は「新しい長さ / 古い長さ」の比率でスケーリング。先頭だけを移動すると後半でずれが生じる。
- 動画ウィンドウの
data-start/data-duration/data-media-start/data-playback-rateも再計算。フェードアウトの前に断片が再生終了しないようにする。マスターバージョンの断片はすでに整数フレームに補完されているが、新しいソースに変更した場合は再度フレーム補完が必要。 - 各シーンを修正するたびに、
om stillを使ってstart+0.5s、start+2s、end-0.5sを確認し、古いテキストの残像、テキストの重なり、空フレームがないことを確認。
具体的な差し替えリストは references/text-slots.md を、タイミング調整方法は references/retiming.md を参照。
5. テキストを差し替え、ビジュアルDNAは維持する
index.html 内のテキストスロットを1つずつ差し替える必要があります(references/text-slots.md 参照)。以下の項目を含む:
- タイトル変数
filmTitle、フックの2行; - 傘のストーリーの4つの大きな文字セクション;
- 「架空の物語」限定;
- 善良さ/適切さの2フレームのラベル;
- アリストテレス/フロイト/カントの段落と出典;
- 冷めた場面、転換、責任、鏡、自己内省、行動、結末、エンドクレジット;
CUES内のすべての字幕文。
維持するもの:
- カラーパレット、宋体/苹方/EB Garamond の組み合わせ;
- フィルムベース、雨、傘、粒子、ビネット、フラッシュホワイト、ワインレッドの下線;
- 16:9の左右の余白と下部の字幕ゾーン;
- 「1カット1イベント」のリズム。すべての文字を同じ画面に詰め込まない。
マスターバージョンの古い文案を残さないでください。新しいエピソードで「アリストテレス/フロイト/カント」以外の思想家が登場する場合、出典を再度検証し、画面内に「解釈/応用」と明記し、直接引用を偽造しないでください。
6. 素材の差し替え(クライアントの要求に応じて、必須)
マスターバージョンでは『第七天国』(1927) を使用していますが、これは単なるリファレンス実装です。references/asset-strategy.md に従ってパターンを選択:
- 顧客実写/写真/製品/店舗:優先。使用許可/肖像権同意を明確に。顔はリアルに保ち、過度な加工はしない。製品は「関係性の中の物」としてのみ使用し、ハードな広告にしない。
- パブリックドメイン映画:『第七天国』を引き続き使用しても良いし、1~3本のパブリックドメイン作品に変更しても良い。音声除去、フレーム補完、静止画抽出、作品ごとにクレジットを記載。
- AIが自らのWeb検索で無料ストックを探す:顧客に素材がない場合、まず3つの候補を顧客に提示。確認後、
scripts/fetch_stock.pyでダウンロード/標準化。YouTube/ストリーミング/著作権付き作品からの無断取得はしない。透かしやペイウォールを回避しない。出典、ライセンス、クレジットはマニフェストに記録。 - ライセンスストック:ライセンス/注文記録を保持。透かし入りのプレビューを使用しない。
- 写真/アーカイブ/肖像:写真/彫刻/絵画であることを明記。パブリックドメインまたは顧客の許諾があるもの。AI生成で歴史上の人物になりすまさない。
- テキストのみ/グラフィック:フッテージがない場合、文字と余白自体を画面の主役に。無理に映画を詰め込まない。
- 混合:最大2~3種類の出典。1つのグレード、1つのフォント、出典ごとのクレジット。
差し替え後、必須:
data-asset-slotに対応するsrcを変更;ffprobeで動画ウィンドウを再計算;- 静止画を再抽出;
#credit、#credits .cols、素材来源.mdを変更;python3 scripts/asset_report.py --manifest assets.manifest.json --project .を実行。
『カサブランカ』『ローマの休日』『花様年華』など、まだ著作権で保護されている作品の断片は、顧客から明確な書面による許諾がない限り使用しないでください。
7. チェック、レンダリング、審査
cd "$HOME/relationship-films/my-episode-slug"
om check . --samples 6
om render . --silent --fps 30 --workers 4 --video extract
om qa out/<new-file>.mp4
レンダリングには約25~35分かかります(1080p/30fps/4ワーカー、201秒程度)。720pで1080pの代用にしないでください。
もし手元の om がラッパースクリプト(例:Node/Chrome環境を設定しているもの)である場合、OM をそれに設定します。scripts/ は順に $OM、om、~/.agents/skills/huashu-motion/bin/om を試します。
必須合格条件:
om checkで0エラー;om qaで単一フレームのジャンプなし;- フレーム抽出チェック:フック、各シーンの境界、転換箇所、フロイト、結末、エンドクレジット;
- 独立したコールドレビュー(制作に関与していないエージェントに完成品だけを見てもらう)。少なくともMUST-FIXを修正;
ffprobeで1920×1080/30fps/正しい尺/AAC 48kHzステレオを確認;- 全編デコードエラーなし;ラウドネス/ピークが基準を満たしている。
8. カバーと公開用コピー
- カバー:
cover/cover.htmlをコピーし、タイトル、尺、下部のフック、出典を差し替え。1080×1440のPNG + JPGをレンダリング。テンプレートのレイアウト:上部の小さなラベル + 大きなタイトル(「間違った人」は琥珀色)+ 中央の傘/2人の人 + 下部の一言の金言 + 出典。 - 公開用コピー:
references/publishing.mdに従い、長文版/短文版/Bilibili版/トップコメント/タグを作成。前回のエピソードのコピーをそのまま流用しない。 - エンドクレジットとウォーターマークには、「映画の映像であり、実際の事例ではありません」「解釈のための視点であり、診断ではありません」などの必要な限定表現を残す。
9. 納品
my-episode-slug/output/
<slug>_1080p_30fps.mp4
<slug>_字幕.srt
<slug>_封面_3x4.png
<slug>_封面_3x4.jpg
<slug>_发布文案.md
素材来源.md
项目说明.md
必須ゲート(通過しなければ納品不可)
- 新しいナレーション:新しいエピソードには新しく録音/生成されたナレーションが必要。マスターバージョンの194秒オーディオを新しい字幕に合わせて流用してはいけない。
- 新しいテキスト:
index.htmlにマスターバージョンの完成した文案が残っていてはいけない。references/text-slots.mdを使って一つずつ確認する。 - 著作権/素材:映画、顧客素材、ストック、肖像、音楽、サウンドすべてに出典/ライセンス記録がある。すべての出典にクレジットがある。タイトル/制作年/非実在事例であることの表示が画面内にある。
- 倫理:診断しない、被害者を責めない、哲学者の言葉を偽造しない、映画のキャラクターを実際の事例として扱わない。
- 画面:テキストが途切れていない、1文字だけで行が終わっていない、テキストが字幕と重なっていない。今回も傘のメタファーを使う場合、結末では2人とも傘の下にいる。
- サウンド:ナレーションが明瞭、クリッピングなし、予期せぬ無音なし。
--silentレンダリングでカスタムオーディオトラックが保持される。 - 審査:独立したコールドレビューでのMUST-FIXが修正されているか、修正しない理由が明確に記録されている。
禁止事項
- マスターバージョンの古い文案、古い字幕、古いナレーションをそのまま流用しない。
- 『第七天国』/フロイト/アリストテレス/カントを固定素材として扱わない。顧客が不要な場合は無理に詰め込まない。
- すべてのシーンを同じ画像+同じテキストに変更しない。マスターバージョンのシーン文法にはバリエーションがある。
- 青紫のグラデーション、ネオン、AI臭い星空の背景を使用しない。
- 3:4カバーを16:9本編から単純に切り抜かない。
cover/cover.htmlを使って再レイアウトする。 - 哲学者/専門家の言葉を「名言」として引用符付きで書かない。「彼が論じたこと/一つの理解の角度」という表現を使う。
- 顧客の許可なく、著作権のある作品、顧客の顔写真、チャット履歴、未公開製品を使用しない。
- YouTube/Bilibili/ストリーミング/著作権のある作品から背景動画を直接ダウンロードしない。透かし、ペイウォール、地域制限を回避しない。明確に許可された無料/ライセンスストックのみを使用する。
- 「依存体質」「恋愛脳」といった診断的なラベルをタイトルに使用しない。質問を使い、判決を下さない。
ファイルマップ
references/client-brief.md:クライアントブリーフ、コンテンツマトリックス、確認ポイント。references/asset-strategy.md:顧客実写/パブリックドメイン/ストック/写真/テキストのみ/混合、複数ソースの統一、素材スロット、マニフェスト。references/stock-sources.md:Mixkit/Coverr/Pexels/Pixabay/Commons の検索、ライセンス、ダウンロード、クレジット。references/beat-sheet.md:16ビート構造、比率、画面イベント、文案の機能。references/visual-system.md:カラーパレット、フォント、カメラワーク、傘/雨、サウンド、カバー。references/text-slots.md:置き換えリスト。references/retiming.md:新しいナレーションのタイムライン再調整方法。references/rights-and-ethics.md:映像ソース/肖像/サウンド/倫理。references/publishing.md:タイトル、長文コピー、短文コピー、Bilibili概要、トップコメント、タグ。templates/index.template.html:マスター合成テンプレート。templates/cover-3x4.template.html:3:4カバーテンプレート。templates/assets.manifest.example.json:素材マニフェストテンプレート。scripts/new_episode.sh:新規プロジェクト作成。scripts/prepare_media.sh:フレーム補完、静止画抽出、ソースチェック。scripts/render.sh:--silent付きレンダリングラッパー。scripts/render_cover.sh:cover/cover.htmlを1080×1440 PNG/JPGにレンダリング。scripts/verify.sh:check/qa/ffprobe/デコード/ラウドネス。scripts/asset_report.py:素材マニフェストのファイル/権利/クレジット/シーンをチェック。scripts/stock_search.py:Webから無料ストックを検索、候補/ページ/ライセンスを出力。scripts/fetch_stock.py:ダウンロード、オーディオ除去、1920×1080/30fpsに標準化、マニフェストを更新。