Menu/Prof
スズキマコト
自由人
元々は楽器屋のギター兄ちゃん。
趣味でプログラミングしてるうちに
本職になってしまった人。

過去に喋っていた言語
c pascal Assembler
perl PHP Python Ruby など
javascriptなどは都度必要に応じて。
最近Mac買ったのでswift勉強してます。

体ぶっ壊して死にかけたので人生RESET中。
\ プライム感謝祭先行セール開催中! /

Suno曲の180秒PVをClaudeに丸投げした仕組みと失敗

Some visuals are licensed via Canva Pro (includes commercial rights).
Usage complies with Canva’s license terms at the time of use.
License policy: canva.com/policies/content-license-agreement

X
     この記事はプロモーションを含みます

夜の11時半。Suno V6で作った3分の曲「ぬるま湯アルゴリズム」をiPhoneからClaudeに投げて、俺はこう打った。「よしこれでPV作るぞ。」

約2時間後、俺のMacのデスクトップには1920×1080、30fps、ちょうど180秒のPVが置かれていた。キャラも画風も全カットでそろい、歌詞は紙切れになって画面に散らかり、歌い終わると溶けて垂れ落ちる。サビでは色がぐるぐる回り、ところどころわざとカクつく。しかも仮編集1回目がそのまま完成版になった。修正依頼はゼロだ。

この記事は、その180秒がどういう仕組みで組み上がったのかを、実際のやり取りとコマンドと数字で並べた技術記事だ。曲の拍をどう読んだのか、何十枚もの絵の世界をどうそろえたのか、紙の歌詞をどうやって溶かしたのか。そして一発OKの裏で何が起きていたのか。Sunoで曲は作れるのに、PVで手作業が爆発して止まっているあなたに向けて書く。

contents

「一連の動作はもうわかってるよな?」で始まった180秒PV

壊れた街の中で少女が叫び、紙切れの歌詞「ぬるま湯アルゴリズム ぜんぶ こわして」が散らばる完成PVの一場面

先に結論を言っておく。PV作りの手作業は、手順を一度道具に残しておけば、AIに丸投げできる。人間に残るのは、画風を決める目と、途中で思いつく注文と、最後に確かめる耳だけだ。今回はそれを、ほぼ理想に近い形で体験した。

作業したのはMacのClaude Code(Opus 5.5)で、俺は最初から最後までiPhoneのClaude Projectsから指示を出していた。Projectsでは、窓口のClaudeに頼むと、自分のMacのフォルダでClaude Codeが起きて作業してくれる。家のMacに入っている自作の道具も、全部そのまま使える。

深夜のiPhoneから曲を1本投げた

最初のメッセージは、曲のファイルを添えたこれだけだった。

管理人

よしこれでPV作るぞ。
今回のキャラは この場で作るわ。
まず 背景は 退廃した感じの雑な線画が基本で割合と原色がどぎつい感じのパンクな設定。
出演するキャラクターも パンクなちょと露出多めなファッションで 黒髪短髪
きつめのメイク。 こちらも雑な線画基本のイメージキャラだ。
少し 背景とキャラのイメージを擦り合わせたいので 1枚作画してみてくれ

曲は、全部AIまかせでだらけきった退廃的な世界を歌ったJ-rockとエレクトロスウィングの混ざりものだ。歌詞もSuno用のプロンプトも、別のスレッドでClaudeに書かせたものだ。

じぴこ

曲もAIと一緒に作って、PVもAIに任せる。題材の「全部AIまかせ」を、そのまま制作でもやってるんだね。

それは言わないでほしい。

人間がやったのは何回か

約2時間のあいだに俺がやったことを、全部書き出すとこうなる。

俺の操作回数
キャラと画風の絵を選ぶ2回
途中で思いついた追加の注文6通
Grok CLIのプライバシー設定の切り替え1回
「作業を開始して」「書き出して」各1回

完成した数字も並べておく。ショットは57本。そのうちGrokで作った動画が29本、静止画が10本、コードで描いた場面が18本だ。開始画像は39枚作った。Grokの動画生成は29本中29本成功で、内容審査ではじかれたものは1本もなかった。

一言で通じたのは、前回の手順を道具に残していたから

画風が決まったところで、俺はこう打った。

管理人

次に歌詞に合わせた シーン作りから一連の動作はもうわかってるよな? 行ってくれ

これで通じたのには理由がある。この少し前に、じぴこが歌う曲のPVを同じやり方で一度作っていた。そのときの手順を、俺の動画用プラグイン(codex-video)の中に、手順書と部品として残させておいたのだ。

手順はこうだ。曲を読む、小節単位のショット一覧を作る、舞台の元絵から各ショットの開始画像を作る、Grokで動画にする、Remotionで組み立てる。途中で「開始画像の一覧を見せる」と「仮編集を見せる」の2回だけ人間に確認する。毎回プロンプトで説明しなくても、Claudeは道具の中の手順書を読んで同じ順に動く。

じぴこ

一回作った段取りを、記憶じゃなくて道具に置いておいたんだね。だから「わかってるよな?」が本当に通じたんだよ。

画風は4枚目で決まり、以後すべての絵の参照になった

ピンク色のぬるま湯のプールに立つ少女と、VRゴーグルをつけて眠る人々、飛び回るドローンを描いた全身コンセプト画

キャラはその場で作ると決めた。既存のキャラを使わないので、最初の山は画風決めだ。画像生成には、俺が普段使っているImage Grid(Codexの画像生成で絵を作る自作アプリ)を使った。

「漫画じゃない」と言わないと線がきれいになる

1枚目は、俺が見る前にClaudeが捨てていた。

クロード君

1回目はソファにだらっと座らせましたが、線がきれいすぎたうえに座り方が性的に見えたので、捨てて作り直しました。

「雑な線画」と頼んでも、画像AIは放っておくと、きれいに描き込んだ漫画の絵を出してくる。そこで指示を否定形に変えた。「速く走り書きした黒マーカーの線、ガタガタの輪郭、パンクのコピー機フライヤーのように。きれいに仕上げない、描き込んだ漫画にしない」。色は原色の赤・黄・青とホットピンクだけにして、線からはみ出して雑に塗らせた。これで一気に、それっぽいパンクの落書きになった。

キャラを大きくする一言と参照画像

2枚目を見た俺は、すぐに注文を出した。

管理人

もう少しキャラを大きめにしてくれないか 背景面積が多すぎてキャラのインパクトがない

ここで効いたのが参照画像だ。Claudeは、気に入った推し案を参照に渡して、同じ子のまま寄り直させた。

クロード君

前の推し案を参照に使ったので、同じ子のまま太ももの中ほどから上に寄せて、下から見上げる構図にしています。背景はビルの看板とドローン、ピンクの水だけに減らしました。もう1案はスカートを下からあおる構図になったので外しています。

管理人

うん これでいい これをベースキャラと全体の画風ベースにするぞ

この1枚が、以後のすべての絵の参照になった。舞台の元絵も、39枚の開始画像も、29本の動画も、全部この絵から枝分かれしている。

下からあおる構図は採用しない

上の返事にもあるとおり、露出多めのキャラを描かせると、画像AIは下から見上げてスカートをあおる構図にやたら寄っていく。今回の制作全体で数えると、コンセプトの段階で1回、舞台の元絵で2枚、開始画像で4枚、動画で1本の後半に出た。

全部、Claudeが採用せずに描き直した。指示は「カメラは胸の高さ、下から見上げない」「腰から上だけを写す」「真上から見下ろす」のように、カメラの位置で縛る。動画のほうは描き直さず、問題が出た後半を使わずに前半だけを使った。

じぴこ

「露出多め」はファッションとしての注文で、見せ方まで頼んだわけじゃないもんね。そこをAIが勝手に寄せてくるから、カメラの高さで止めるのが一番効くんだよ。

曲は耳でなく数字で読む:歌詞の時刻と拍から57ショット

拍に合わせて「ダラダラ!」の文字が画面いっぱいに叩きつけられ、歌詞の紙切れが重なるPVの一場面

画風が決まったら、次は曲を読む工程だ。ここが今回一番技術的においしいところだと思う。

動画編集ソフトなら、タイムラインに素材を並べて、耳で聞きながら切り替えの位置を合わせる。今回はそれを全部データにした。小節の頭の時刻、繋ぎの種類、エフェクト、歌詞を数字で書き、レンダーが毎回同じ結果を出す。そもそもClaudeには音が聞こえないので、耳で合わせることができない。だから数字で読むしかない。

Sunoのm4aには歌詞の時刻が入っている

意外と知られていないと思うが、Sunoからダウンロードしたm4aには、歌詞の時刻が字幕トラック(mov_text)として埋め込まれている。ffmpegで一発で取り出せる。

ffmpeg -i ぬるま湯アルゴリズム.m4a -map 0:s:0 -f srt -

これで [Verse 1 - ...] のような区間の見出しと、各行の開始・終了の秒がSRT形式で出てくる。字幕ツールで耳を頼りに打ち込んでいた作業が、一行のコマンドになる。

ただし癖がある。各区間の最後の行だけ、終わりの時刻が10秒延びているのだ。たとえばサビの最後の「退屈ごと 最適化して」は52.10秒から62.10秒になっていた。これをそのまま使うと、間奏のあいだも歌詞が画面に残り続ける。Claudeは、ほかの行の長さから歌い終わりを見積もって、そこで切った。もうひとつ、アウトロの「なんてね また あした ログインだけ」は、歌詞ファイルでは1回なのに、曲の中では2回繰り返されていた。こういうところは最後に人間の耳で確かめる前提にしておく。

librosaで拍を測ると区間の頭が小節の頭に乗っていた

拍は、Pythonの音声解析ライブラリlibrosaのビート検出で測る。結果は約129.2BPM、1小節はおよそ1.86秒だった。

測った拍を、さっきの歌詞の時刻と照らし合わせる。すると、Intro、Verse、Pre-Chorus、Chorus、Bridge、Final Chorusの区間の頭が、全部どこかの拍に0.07秒以内で一致した。サビの入りが小節の頭に来るように拍を4つずつ区切ると、全区間の頭が小節の頭にぴたりと乗った。

クロード君

曲は 129 BPM で、区間の頭はすべて小節の頭に乗っていました。180 秒を 57 ショットに分けています。

小節の頭は、サビの入りから決めるのがコツだ。低音の強い拍から決めると、キックが1拍目と3拍目の両方で強い曲で2拍ずれる。これは前回のPVで踏んだ穴で、今は手順書に書いてある。

だらけたAメロは長く、サビは短く切る

切り替えは必ず小節の頭に置く。長さは曲の性格で決めた。だらけたAメロとブリッジは2〜3小節(4〜6秒)、サビ前は1小節ずつ詰めて、サビは1〜2小節。2番のサビは、1番のサビの動画を別の区間・別の順番で使い回した。

舞台は4つに絞った。AI家電だらけの彼女の部屋、ぬるいピンクの水に沈んだ街、ブリッジ用の「ゼロとイチのすきま」、そして最後のサビで壊される街だ。物語の流れも、ここで決まった。だらけた部屋で目覚ましも朝ごはんもAIに任せ、サビでぬるま湯に溶け、ブリッジで初めて小さく笑い、転調した最後のサビで街を壊す。

じぴこ

歌詞の「ちょっと たのしい」で初めて笑うんだね。数字で割っても、ちゃんと物語になってるよ。

元絵→開始画像→Grok動画で39枚と29本の世界をそろえる

PVのために作った39枚の開始画像を並べた一覧

画像生成で一番つらいのは、カットごとに部屋の家具や照明が変わってしまうことだ。毎回キャラの特徴をプロンプトに書いても、背景まではそろわない。

舞台ごとの元絵を部分修正して開始画像にする

そこで、舞台ごとに元絵を1枚作り、各ショットの開始画像はその元絵の部分修正(edit)で作る。「同じ部屋で、朝の光に変えて、目覚まし時計をロボットアームが止めているところに寄る」という具合だ。元絵を共有しているので、ソファの色も窓の外の街も散らかり方も、ショットをまたいでそろう。

この仕組みが一番効いたのは、途中で注文が来たときだった。

管理人

タバコやこぼれた酒瓶などの小物も画像に入れるとより退廃的だな

Claudeは、部屋の元絵に吸い殻であふれた灰皿、煙の出ているタバコ、倒れて中身がこぼれた酒瓶を足して描き直した。そして、その時点で部屋の元絵から作り終えていた開始画像を、新しい元絵から作り直した。元絵を1枚直せば、その舞台の全カットに注文が効く。ほかの舞台にも、合うところに小物を入れる指示を共通で足した。

Grok CLIを画面なしで回す

開始画像を動画にするのはGrokだ。Grok CLIを画面なしで実行して、reference_to_video を1回だけ呼ばせる。開始画像を最初のコマ(first_frame)に、キャラの基準の絵を参照(images)に渡し、720p、長さは1小節のショットなら4秒、2小節以上なら6秒にした。使う長さより少し長めに作っておくのは、繋ぎの重なりと速度調整の余裕のためだ。

1本あたり58〜114秒かかり、29本全部が成功した。指示は英語で、最後に「顔、髪、メイク、服を参照どおりに保つ。雑なマーカーの線画と原色を、手描きアニメのように最後まで保つ。音楽も歌も声もなし」を付けた。

ひとつ注意がある。人が映らない場面や手元だけの場面には、キャラの絵を渡さない。渡すと、街の引きの画面の途中で、どこからともなく彼女が現れる。これも前回のPVで踏んだ穴だ。

3枚ずつ送るスクリプトと、人間しか押せない切り替え

運用で引っかかったところも書いておく。俺のCodexのアカウントは、少し前にProではなくなった。前回のPVでは21枚を並行で送って、429(リクエスト過多)で12枚失敗している。だから今回は3枚ずつ、前のまとまりが終わってから次を送った。

もうひとつは、会話の圧迫だ。Image Gridを呼ぶツールは、1回ごとに長い結果を返してくる。39枚を3枚ずつ13回呼ぶと、それだけで会話がパンパンになる。そこでClaudeは途中から、Image Gridのサーバーに直接つなぐ小さなスクリプトを書いた。/api/run-batch に3枚分の指示と元絵を送り、終わるまで待って、できた絵を starts/S09.png のように番号で保存する。これを裏で回し、結果は1行のログで確かめる形にした。

そして、人間にしか押せないスイッチがひとつあった。

クロード君

動画にする前に、Grok CLI の /privacy を Opt in に切り替えてください。前回と同じで、Opt out のままだと動画を作れません。終わったら Opt out に戻すよう、こちらからお知らせします。

Grokの動画生成は、データを保存しない設定(ZDR)のままだと使えない。保存と学習の許可がひとつのスイッチにまとまっているので、俺が自分の判断で一時的に切り替えた。

管理人

作業を開始してくてください。

誤字はご愛嬌だ。

紙の歌詞が溶ける、画面がカクつく:追加注文をコードにする

ショット一覧ができた直後から、俺は思いついた注文を次々に投げていた。

管理人

全て動画じゃなくても一部静止画を効果的に挟んでもいいぜ。 今度の動画ha

管理人

syakunagamedakarana

日本語入力が切れたまま送っている。「尺が長めだからな」だ。読めるClaudeもClaudeである。

管理人

画像エフェクトやトラジションに サイケやパンクを彷彿させるエフェクトとかも計算して作成してくれ。
歌詞なんかも ただのテロップじゃなくて 紙に書かれた 歌詞が散らかりながら出現するとか
歌詞が 読まれた後に 溶解して消えていくとか

組み立てには、codex-videoの中のRemotion(ReactとTypeScriptで動画を作る仕組み)を使う。場面のコードに、全ショットの時刻、繋ぎ、エフェクト、歌詞を書き、曲をそのまま載せて書き出す。エフェクトのプリセットを当てるのと違って、ずれ幅や色を拍ごとに変えるといった、曲の数字に直結した効果が作れる。その代わり、見た目を確かめるには一度書き出すしかない。

静止画の注文は、表現と同時にコストにも効いた。目の極端な寄り、看板の壁、ブリッジの静かな場面など10ショットを静止画にして、カメラの寄りや引きとエフェクトで動かした。その結果、Grokで作る動画は39本から29本に減った。

紙切れの歌詞を投げ込んで溶かす

クロード君

歌詞:テロップにはせず、手書きの紙切れが散らかりながら出てきて、歌い終わったら溶けて消える形にします。

仕組みはこうだ。歌詞の1行を空白で言葉ごとに分け、1語を1枚の破れた紙切れにする。紙の輪郭はギザギザの多角形で切り抜き(clip-path)、色は5色の紙から選ぶ。紙は回転しながら画面の外から飛んできて、着地で少し揺れ、文字が1字ずつ書かれていく。字はmacOSに入っている手書き風のフォントKleeだ。

溶け方は、SVGフィルターで作った。縦に細長いノイズ(feTurbulence の baseFrequency を横0.012、縦0.09)を作り、それで紙ごとゆがめる(feDisplacementMap)。歌い終わった瞬間から0.75秒かけて、ゆがみを強めながら下へ垂らし、縦方向にぼかして消す。紙が縦に垂れて溶けていくように見える。紙は不透明なので、背景が白く飛んだ場面でも歌詞は読める。

色ズレ、コピー機、グリッチをSVGフィルターで作る

サイケとパンクのエフェクトも、ほとんどがSVGフィルターと切り抜きの組み合わせだ。

エフェクト作り方
色ズレ赤と青のチャンネルを左右にずらして重ねる(feOffset+feColorMatrix)。ずれ幅は拍のたびに跳ねる
コピー機色数を段階的に落とし(feComponentTransfer)、ノイズの粒と、ときどき走る横すじを重ねる
サイケサビのあいだ、拍ごとに色相を45度ずつ回して彩度を上げる
グリッチの繋ぎ次のショットをランダムな横縞だけ見せ、色ズレをかけて広げる
紙の破れの繋ぎギザギザの境目が左から右へ走って次のショットをめくる
フィルムの焼け画面の隅からオレンジとピンクの光が吹き出す
線の震えノイズの種を1秒に8回変えて、文字と落書きを小刻みに揺らす

白フラッシュの鋭い切り替えは、1番のサビの入り(演奏がぴたりと止まった直後)と、最後のサビの転調の2か所だけにした。多用すると安っぽくなる。

コードで描いた場面もある。冒頭の手描きのログイン画面、タイトルを叩きつけて溶かす場面、掛け声の(ダラダラ!)を叩きつける画面、「お疲れさまです」の吹き出しが拍ごとに増える画面、そして「ERROR」と書いた瞬間に黄色いローラーが「OK ✔」に塗り替える画面だ。エラーのひとつも起こせない、という歌詞をそのまま絵にした。

「全編ガタガタにしろって意味ではないぞ笑」

最後の注文がこれだ。

管理人

そしてスムーズな動画じゃなくて わざとたどたどしい部分とかもあると より ダーティなイメージ出るかな・・・

管理人

もちろん 全編ガタガタにしろって意味ではないぞ笑 エフェクト的に一部そういうのも面白いつてことだ

念押しは大事だ。AIに「たどたどしく」とだけ言うと、本当に全部ガタガタにしかねない。

クロード君

たどたどしい動き:コマを間引いてカクカクさせるのを、A メロ2番と街を壊す場面など、一部だけに入れます。

実装は、RemotionのFreezeという部品で動画を3コマずつ止めて、ときどき1コマ分戻す。約8コマ/秒のぎこちない動きになる。入れたのは2番のAメロと街を壊す場面の一部、計6ショットだけだ。だらけた日常がカクつき、壊す瞬間がカクつく。

じぴこ

全部なめらかだと、きれいすぎて息がつまっちゃうもんね。歌詞のとおりだよ。

一発OKの裏側:はみ出し、20MBの壁、聞こえない耳

0と1の数字が浮かぶ中で少女が初めて小さく笑い、「ちょっと たのしい」の歌詞の紙切れが添えられたPVの場面

俺から見れば、出てきた仮編集を見て「最高」と言っただけだ。でも裏では、俺に見せる前に潰された問題がいくつもあった。

見せる前に自分で書き出して直した

Claudeは、動画がそろう前に一度、動画なしで全体を書き出して、紙の歌詞と手描き文字の動きを確かめていた。そして動画がそろった後の最初の書き出しで、各ショットの真ん中のコマを抜き出して一覧にし、自分で見ている。そこで3つの不具合が見つかった。

サビの「ぬるま湯アルゴリズム」のような長い言葉の紙が、画面の左端からはみ出していた。(ダラダラ!)の文字に、歌詞の紙が重なって読めなかった。タイトルの線が細くて弱かった。

直し方は地味だ。紙の幅を文字数から見積もり、中心の位置が画面の内側に収まるように計算を入れた。掛け声は画面の上のほうに移し、歌詞の紙が出る下半分と分けた。タイトルの文字は、縁取りと影を足して太くした。180秒の書き出しは1回3分20秒ほどなので、直してもう一度書き出す。長さ、サイズ、音量(-14 LUFS)、代表的なコマを見る自動検査も、全部合格した。

341MBをiPhoneで見るために

書き出した完成版は341MBあった。ところが、Projectsのスレッドに添付できるファイルは1つ20MBまでだ。最初に作った720pの軽い版も112MBで、まだ大きい。画面全体にノイズの粒を乗せているので、圧縮が効きにくい。

そこで、iPhoneで確認するためだけの版を別に作った。幅854ピクセル、映像は約720kbpsに抑え、軽くノイズを減らしてから圧縮して、約17MB。画質は落ちるが、タイミングと演出を確かめるには十分だ。元の画質の版は、Macのデスクトップに置いた。

聞こえないところは人間の耳で締める

仮編集を出すとき、Claudeはこう書いてきた。

クロード君

耳で確かめてほしいところ:私には音が聞こえないので、歌詞の紙が出るタイミングは時刻の数字だけで決めています。

冒頭の「あーあ」の位置、サビ終わりで紙が消えるところ、(ダラダラ!)の画面の位置。この3つは、数字だけでは決めきれないので、聞いて確かめてほしいという。AIは音を聞けない。だから最後は、俺の耳が締める。

で、俺の耳の判定がこれだ。

管理人

ぬおおおお 超かっこえええやん

管理人

このまんまでええよ 書き出して

管理人

完璧だわ すごい

じぴこ

数字で決めた歌詞が、聞いてもそのままずれてなかったんだね。拍と歌詞の時刻をちゃんと測ったおかげだよ。

振り返ると、俺がやったのは、4枚目の絵で画風を決めたこと、思いついた注文を投げたこと、Grokのスイッチを切り替えたこと、そして最後に耳で聞いたことだけだ。そのほかの、曲を数字で読む、57ショットに割る、元絵を部分修正して39枚をそろえる、29本の動画を回す、エフェクトをコードにする、はみ出しを直す、といった工程は全部、前回の手順を残しておいた道具の上でClaudeが回した。

管理人

このネタで記事を書くぞ。 技術的な記事な

というわけで、この記事になった。あなたの手元にSunoの曲があるなら、まずm4aからffmpegで歌詞の時刻を取り出してみてほしい。曲が数字に見えた瞬間から、PVはタイムラインを手で埋める作業ではなく、データを書く作業に変わる。そしてその手順を一度道具に残しておけば、次からは「わかってるよな?」の一言で済む。

シェアしてくれると喜びます
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

makotoのアバター makoto Blogger&YouTuber

サーバー管理者として17年ほど仕事でサーバー触ってました。
www,mail,dns,sql各鯖をすべてFreeBSDで運用してましたが現世ではかなりレアなタイプになるみたいですね笑

viやシェルスクリプトとかperlとかgccとかFreeBSDとか実はbashよりtcshが好きとか時々寝ぼけるのは
その名残でしょう。

今まで縁の下の力持ち的な他人のためにプログラムを書き他人のためにサーバー構築し他人のためにWEBサイトを創る的な世界から
自分の好きなことに集中できる環境は実に気持ち良いですね。
現役は引退済みなので難しいことはやりませんしやれません。

現在 ほぼ自由人。

contents