MV(作る → 見てもらう → 直す → OK)
前提
- 音源はマスター済みの
<Title>.wav(マスタリング工程が先)。audio.wav で作らない。 - 最初に
templates/mv/README.mdを読む(プロジェクトの作り方・各スクリプトの役割・直し方)。 - 同じことをする自前のコマンドを書かない。テンプレートのスクリプトを使う。
- クレジットの文言は
workflow.config.jsonのcredits。動画側に書き写さない。
見せ方を選ぶ(任意)
- 利用者が「MV の見せ方を選びたい」「もっと凝りたい」「別のスタイルにしたい」と言ったときだけ行う。何も言われなければ飛ばして手順 0・1(
make_mv.sh=既定の型)へ進む。こちらから毎回勧めない。 - skill
mv-stylesで選定表と18軸をsongs/<曲フォルダ>/STYLE-SELECTION.mdに書き、利用者に採用を選んでもらう。 - 採用が既定の型(spectrum-still)なら手順 0・1 へ。それ以外は
styles/<採用>/README.mdの手順で作り、できたら手順 2 へ合流する。
0. 背景ループ動画(任意)
node engine/config.js providers.video の use で決める。曲フォルダに bg_loop.mp4 が既にあれば作らずに 1 へ。
none: 飛ばす(背景はカバーの静止画)。kling-mcp: 次の手順で作る。- 生成は課金の対象。作る前に「cover.png から約5秒のループ動画を1本作ってよいか」を利用者に聞き、OK をもらってから進める。
- Kling MCP の接続とアカウントを、その MCP の確認用ツールで確かめる。つながっていなければ止めて利用者に伝える。
- 画像→動画のツールで、始点の画像と終点の画像の両方に
songs/<曲フォルダ>/cover.pngを渡す(始点と終点を揃えると継ぎ目が見えない)。プロンプトは英語で、大きな動きをさせず、髪・光・粒子などの小さな動きだけを書く。音声はオフ。 - 1回に1本だけ投げる。失敗・時間切れでも自動で投げ直さない。結果を伝えて、投げ直すか・条件を変えるかを利用者に決めてもらう。
- できた動画を
songs/<曲フォルダ>/bg_loop.mp4に保存し、先頭と末尾のフレームを抜いて Read で観る:ffmpeg -y -i "songs/<曲フォルダ>/bg_loop.mp4" -frames:v 1 /tmp/loop_first.jpg ffmpeg -y -sseof -0.1 -i "songs/<曲フォルダ>/bg_loop.mp4" -frames:v 1 /tmp/loop_last.jpg - ウォーターマークが入っている場合の扱い(そのまま使えるか・消してよいか)は Kling の利用規約で確かめるよう利用者に伝える。規約を確かめないまま加工しない。
other:noteの手順で作り、songs/<曲フォルダ>/bg_loop.mp4に置く。課金があるなら作る前に利用者に聞く。手順が分からなければ利用者に聞く。- 縦用を別に作るなら
bg_loop_vertical.mp4(無ければ横の中央を切り出す)。置き方の詳細はtemplates/mv/README.mdの「背景ループ動画」。
1. 作る(1回)
./tools/make_mv.sh "songs/<曲フォルダ>"
- 歌詞の時刻取得 → テンポの実測 → 画像・ループ動画の準備 → 歌詞の同期 → レンダー → 検査 を1本で回す。曲用のプロジェクトは
projects/<slug>/に作られ、song.json のmv_projectに記録される。 - whisper が拾えない行(掛け声など)で止まったら、その行を利用者に伝え、了承を得て
--allow-unaligned(前後の行から時刻を割り振る)を付けて回し直す。 - テンポの推定が倍・半分にずれたら
--bpm <下限> <上限>で範囲を絞る(実測した BPM は make_mv.sh が profile/ledger.md に書く)。 - 歌詞の時刻取得(whisper)とレンダーで数十分かかることがある。長い処理はバックグラウンドで走らせ、終わるまで待つ。
- 終了コードを信じず、成果物を確かめる:
ls -la "songs/<曲フォルダ>/<Title>.mp4" "songs/<曲フォルダ>/<Title> (Short).mp4" "songs/<曲フォルダ>/thumbnail.jpg" ffprobe -v error -show_entries format=duration -of csv=p=0 "songs/<曲フォルダ>/<Title>.mp4" - 途中で止まったら、出力の最後のエラーを読み、どの段(歌詞の時刻・テンポ・画像・レンダー・検査)で止まったかを伝えてから直す。
2. 見てもらう(人の番)
providers.notifyがslackなら make_mv.sh が Slack にも送っている。- 次の文面で頼んで止まる:
MV ができました。 - 本編: songs/<曲フォルダ>/<Title>.mp4 - ショート: songs/<曲フォルダ>/<Title> (Short).mp4 - サムネ: songs/<曲フォルダ>/thumbnail.jpg 見て、OK か、直したい点を教えてください。例: - 歌詞の出るタイミングがずれている(何分何秒あたり) - 文字が大きい/小さい/読みにくい - 色・背景・キャラの見え方を変えたい - その曲で最初の MV を見てもらうときだけ、上の文面の末尾に次の1行を足す(2回目以降・別の曲では足さない):
ここから自由に作り変えられます。18の軸(歌詞の出し方・キャラの動き・背景・カメラ・打点)と演出の辞書(direction-library/)から選んで伝えてもらえれば、テンプレートを書き換えて作り直します。今のままで良ければ OK だけで大丈夫です。 - 何も言われなければ今までどおり手順 3・4 へ。勧め直さない。
3. 直す
直したい点を聞いたら、直し方を2〜3案示して選んでもらってから直す。 直す場所は「この曲だけか・次の曲からもか」で分ける。言われていなければ聞く:
| 範囲 | 直す場所 |
|---|---|
| この曲だけ | projects/<slug>/(input/song.config.ts・src/)と曲フォルダ(LYRICS.md・scenes.json など) |
| 次の曲からも(既定の型) | templates/mv/ も同じように直す。作成済みの曲のプロジェクトには届かない=今の曲にも入れる |
| 次の曲からも(スタイル) | styles/<名前>/ を直す(skill mv-styles「スタイルを足す・改変する」) |
| 新しい見せ方として残す | skill mv-styles「スタイルを足す・改変する」で styles/ に足す |
| 文言・名前・音量など設定の値 | workflow.config.json(skill setup の設定変更) |
よくある直し方:
| 直したい点 | 直し方 |
|---|---|
| 歌詞のタイミングがずれる | LYRICS.md の「歌詞(表示用)」で行の切り方を変えて、make_mv.sh で取り直す(lyrics.json は作り直しのたびに上書きされる) |
| 文字が大きい・小さい・はみ出す | ①「歌詞(表示用)」の長い行を2行に分ける(文字の大きさは行の長さから決まる)②projects/<slug>/input/song.config.ts の文字サイズの設定を変える |
| 読みにくい | ①文字の縁取り・影を強める ②背景を暗くする(どちらも song.config.ts かスタイル) |
| 色を変えたい | ①スタイルの配色を変える ②カバー画像に合わせた色を指定する |
| 背景・キャラを変えたい | ①cover.png を差し替える ②キャラの切り抜きを作り直す ③背景を動かす/止める(手順 0。止めるなら bg_loop.mp4 を外す) |
| 場面ごとに背景を変えたい・画像を何枚か作りたい | 下の「シーンの切り替え」 |
| クレジットの文言 | workflow.config.json の credits を直す |
- どのファイルのどの設定かは
projects/<slug>/README.mdで確かめる。無い設定を推測で書かない。 - 直したら
make_mv.shをもう一度回し、直した箇所のフレームを抜き出して Read で観てから見せる:ffmpeg -y -ss <秒> -i "songs/<曲フォルダ>/<Title>.mp4" -frames:v 1 /tmp/check.jpg - 何度でも往復してよい。直すたびに手順 2 の文面で見てもらう。
シーンの切り替え(画像を複数枚)
背景の画像をセクションごとに切り替える(書式は templates/mv/README.md「シーンの切り替え」)。
- 区間を決める。各セクションの歌い出しの秒(
projects/<slug>/input/lyrics.json)を、それ以前で最も近い拍(input/beats.json)に合わせる。間奏は直前の行の終わりから。 - 区間ごとの背景の案を表で見せ、新しく作る枚数の了承を取る(生成は課金の対象):
| 区間 | 秒(拍の頭) | 背景 | 画像(新規 / 既存・再利用) |
- 1番と2番の同じセクションは同じ画像を再利用してよい。最初の区間はカバーを使う。
- 画像は BRIEF.md と LYRICS.md の場面から取る(歌詞の物を寄りで映すより、その場面の状況を描く)。
- プロンプトを
songs/<曲フォルダ>/scenes/<NN>_<名前>.txtに書く。末尾にどの画像にも同じ一文を付ける(カバーと同じ世界・画風・光・no people(キャラがいなければ)・no text, no letters, no typography・16:9 landscape)。 - 1枚ずつ作り、Read で観てから次へ進む。カバーを参照画像に渡して画風をそろえる:
合わない絵が出たら止めて利用者に相談する(自動で作り直さない)。./tools/gen_image.sh "$(cat "songs/<曲フォルダ>/scenes/<NN>_<名前>.txt")" "songs/<曲フォルダ>/scenes/<NN>_<名前>.png" "songs/<曲フォルダ>/cover.png" songs/<曲フォルダ>/scenes.jsonを書き、./tools/make_mv.shを回す。- 各区間の頭と途中のフレームを抜いて Read で観る(切り替わっているか・絵の主役が画面に入っているか)。
3b. 作り変える(利用者が望んだときだけ)
テンプレートは出発点。直す(手順 3)より大きく見せ方を変えたいと言われたら:
- 選び方を聞く: 「軸を1つずつ決める」か「演出の辞書から選ぶ」か。
- 軸: skill
mv-stylesのreferences/axes.mdの18軸を、変えたい軸から1つずつ聞く(全部聞かない。言われた軸だけ)。 - 辞書:
direction-library/INDEX.mdを感情・タイミングで絞り、候補2〜3個を一行説明つきで見せて選んでもらう。
- 軸: skill
- 決めたものを
songs/<曲フォルダ>/DIRECTION.mdに区間ごとに書く(軸は軸コード=値、演出は slug)。 projects/<slug>/(templates/mvから作った曲のプロジェクト)のinput/song.config.tsとsrc/を書き換える。演出はレコードの「演出内容」の数値どおりに入れる。templates/mvは、利用者が「次の曲からも」と言ったときだけ書き換える(次の曲の出発点だから)。./tools/make_mv.sh "songs/<曲フォルダ>"で作り直し、変えた区間のフレームを抜いて観てから、使ったレコードの「品質チェック」と一緒に手順 2 の文面で見てもらう。
- 別のスタイルに丸ごと替えたいなら「見せ方を選ぶ(任意)」へ。
4. OK が出たら
node -e 'const f=process.argv[1],fs=require("fs"),j=JSON.parse(fs.readFileSync(f));j.approved_at=new Date().toLocaleDateString("sv-SE");fs.writeFileSync(f,JSON.stringify(j,null,2)+"\n")' "songs/<曲フォルダ>/song.json"
./next.sh "<曲フォルダ>"
- 利用者の OK を聞く前に approved_at を入れない。