Claude Code が動画そのものを作ったわけではありません。作ったのは、動画を作るプログラムのほうです。
ブログ記事1本を材料に、台本を書き、VOICEVOX でナレーションを合成し、Python で絵を1枚ずつ描き、ffmpeg で mp4 にまとめる。この流れを通しで回す shortgen という道具を、Claude Code に書かせました。動画編集ソフトは一度も開いていません。
この記事で分かること。
- Claude Code に「動画を作る道具」を作らせるという考え方
- ブログ記事がショート動画になるまでの流れ
- 台本・ナレーション・映像をどうつなぐか
- 実際に作ってみて分かった問題点
- どこまで自動化できて、どこを人がやったか
完成したショート動画
先に実物です。YouTube で見る。
ずんだもんが解説する縦型の動画で、長さは32.5秒。7つのカットに分かれています。題材は、昨日公開した Claude Coworkの使い方 という記事です。

1カット目で「旅行の下調べは面倒」と問題を出して、2カット目でいきなり結果を出します。結論を最初の5秒に置く、という決め方をしました。
技術詳細:書き出したファイル
- 形式は H.264。YouTube にそのまま上げられる、いちばん普通の動画形式です
- 解像度 1080×1920 の30fps。縦持ちのスマホで画面いっぱいになる比率です
- 長さ32.518秒、976フレーム
- ファイルサイズ 6,177,640バイト(約6.2MB)
Claude Codeに何を作らせたのか
人がやったことと、Claude Code がやったことを分けて書きます。
人がやったのは、何を作るかを決めること、素材を用意すること、出てきた絵と音を見て中身を直すことです。素材はスクリーンショット3枚と、ずんだもんの立ち絵。
Claude Code が書いたのは、道具そのものです。bin/ に7本、lib/ に3本、あわせて1,434行。台本の7カットも Claude が書きました。
道具ができると、あとは1本の流れになります。
ブログ記事 → 台本 → VOICEVOX(ナレーション)
→ Python(絵を1枚ずつ描く)→ ffmpeg(音とつないで mp4)
shortgen の CLAUDE.md には「資料を見せるのではなく、体験を見せる」という方針を書いてあります。この一文が、あとに出てくる決めごとの元になっています。
技術詳細:使っているもの
- Python のライブラリは3つだけ。pillow(画像を描く)、numpy(数値計算。BGMの合成にも使う)、psd-tools(PSDから表情を取り出す)
- 音と映像の変換は ffmpeg。長さを測るのは ffprobe
- ナレーションは VOICEVOX、立ち絵は SOYA式ずんだもん立ち絵。どちらも無料です
44分の内訳
かかったのは44分でした。最初のコードファイルができた13:14から、mp4 ができた13:58までです。
何を含むかをはっきりさせておきます。含むのは、Claude Code への指示、コードを書く時間、中身の修正、書き出し。含まないのは素材の準備で、立ち絵のPSDを落としたのは午前11:44でした。
成果物のファイルの時刻から取れた実測はこうです。
時刻 | やっていたこと | 所要 |
|---|---|---|
13:14〜13:17 | コード10本のうち9本ができる | 3分 |
13:24〜13:26 | CLAUDE.md・README・投稿メモ | 2分 |
13:37:03〜13:37:17 | ナレーション7本の合成 | 14秒 |
13:46:23〜13:46:26 | PSDから表情5枚を書き出し | 3秒 |
13:46:38〜13:46:40 | プレビュー7枚 | 2秒 |
13:53:27 | 台本の最終調整 | — |
13:55:30〜13:57:32 | フレーム976枚を描画 | 2分2秒 |
13:57:46〜13:58:03 | mp4に書き出し | 17秒 |
足すと、機械が動いていたのは合計およそ2分半です。44分のうち残りの約41分は、書いて、見て、直していた時間でした。
自動化したのに時間が減っていない、という話ではありません。減ったのは待ち時間のほうで、空いたぶんが中身を考える時間に回っただけです。
制作フロー:音が先、絵はあと
設計で効いたのは一点だけだと思っています。カットの長さを、先に決めないことです。
ふつうは絵コンテを描いて「このカットは4秒」と決めたくなります。この道具は逆で、先に VOICEVOX に喋らせます。出てきた音声の長さを測って、その秒数をカットの長さにする。フレームの枚数も、ズームの速さも、テロップが出るタイミングも、全部そこから計算されます。
副作用が気に入っています。ナレーションを差し替えれば、動画全体が自動で組み直る。裏を返せば、音声より先に絵を描いても意味がない。作業の順番が1つに固定されました。
台本のほうも簡単で、1カットにつき ID・シーン名・喋る内容の3つだけです。
dict(id="c2", scene="payoff",
say="AIに12分やらせたら、205行のメモができたのだ。"),
これを7つ並べた14行が台本の全部です。決まりが2つあります。1つは、各カットに句読点を必ず入れること。VOICEVOX のアプリから手で書き出した音声を使う場合に、無音の数と句読点の数を突き合わせて分割位置を決めるからです(今回はエンジンを直接叩いたので、この経路は使っていません)。もう1つは、数字とアルファベットをカタカナで書くこと。URL は「ユーアールエル」と書かないと読みが安定しません。
技術詳細:カットごとの実測
カット | ナレーション | 前後の無音を足した尺 |
|---|---|---|
c1 | 3.381秒 | 3.801秒 |
c2 | 4.405秒 | 4.825秒 |
c3 | 5.216秒 | 5.636秒 |
c4 | 3.104秒 | 3.524秒 |
c5 | 3.883秒 | 4.303秒 |
c6 | 4.469秒 | 4.889秒 |
c7 | 5.120秒 | 5.540秒 |
前に0.12秒、後ろに0.30秒の無音を足したものが、そのカットの尺です。合計32.518秒。書き出した mp4 を ffprobe で測った値と、小数点以下まで同じでした。台本を書く段階の当たりは「モーラ数 ÷ 6.0秒」で付けています。
紙芝居にしないためにやったこと
スライドを順に映すだけの動画にはしたくありませんでした。方針は「資料を見せるのではなく、体験を見せる」です。
やったことは4つ。実際のアプリ画面を全画面で敷いてゆっくりズームする。注目してほしいところに赤枠を描く。ずんだもんのリアクションを重ねる。テロップを出す。画面に占める割合は、操作画面40%・キャラのリアクション25%・テロップ35%を目安にしました。

赤枠の位置は、画面の座標ではなく、元のスクリーンショットに対する割合で持たせています。ズームやパンで位置が動いても、枠は同じ場所に付いてくる。代わりに、スクリーンショットを差し替えたら数値も直すことになります。
構成は、掴み → 結論 → 手順 → 注意 → CTA。結論は最初の5秒に置きます。
最初は3Dで作ろうとした
立ち絵を2Dにするか3Dにするかは、最初から決まっていたわけではありません。
公式のVRMモデルをレンダリングする経路を作りました。読み込みは素直で、絵も出ました。そこまでやって、使わないことにしました。
静止画で2Dの立ち絵と並べたら、2Dのほうが明確に良かったからです。理由は3つ。3Dは頭身が高い。枝豆の尻尾が正面から見えない。表情の差が、ショートのサイズでは読み取れない。
ただ、これは「3Dはダメ」という話ではありません。3Dに意味が出るのは、動かす場合だけです。首を傾げる、体を揺らす。1フレーム約10秒なので、2秒のループなら10分で作れます。今回は動かしていないので、捨てました。
技術的に「できる」ことと、動画として「良い」ことは別でした。作れたから使う、にならなくてよかったと思います。
技術詳細:3Dの読み込みと見た目
- 公式VRMは、拡張子を
.glbに変えれば Blender 標準の glTF インポータでそのまま開きます - MToon(アニメ調の塗りを再現するシェーダ)は再現できないので、ベースカラーを Emission に繋いでフラット塗りにしました
- 輪郭線は、法線を反転させた Solidify で足しています
- この経路は
bin/vrm_render.pyの144行。残してはいますが、使っていません
音とBGMは自動で調整させた
BGMは既存の曲を使わず、その場で合成しています。マリンバ、ベル、ベース、キック、クラップ、ハットを numpy で作って重ねる。
理由は Content ID です。既存の音源を使うと、YouTube で権利者の申し立てが付くことがあります。自分で作った波形なら、その心配がありません。
実際に良かったのは別のところでした。小節ごとに、どの楽器を鳴らすかを表で持たせてあります。12〜13小節目でリズムを抜いて「注意点」のパートに合わせ、14小節目から戻して結論に向かう。既存曲を貼るだけでは、こういう合わせ方はできません。
ナレーションとBGMの音量も自動です。喋っている間はBGMが下がり、カットの切れ目では持ち上がって間を埋めます。
この効き方も、12〜13小節目でリズムが抜けるところも、文字では伝わりません。実際の音はこれです。
技術詳細:音量の設定
- BGMは118BPM、16小節。コード進行は4536(F - G - Em - Am)を4周
- ナレーションを -16 LUFS、BGMを -24.5 LUFS に整えたうえで、ナレーションをキーにしてBGMを下げます(サイドチェイン)
- LUFS は人の耳が感じる音の大きさの単位です。喋っている間は声がBGMより12〜19dB上になります
- 書き出した mp4 の実測は -14.4 LUFS、True Peak(瞬間的な最大値)-1.4 dBTP
YouTubeとInstagramで出し分ける
同じコードから、YouTube ショート版と Instagram リール版の2つを書き出せます。切り替えるのは環境変数1つです。
違うのは、画面のどこを空けるかと、BGMを入れるかどうか。YouTube は右端のいいね・コメント・共有のボタン列と、下の情報エリアを避けます。Instagram は下35%を空けます。リールはアプリ側でトレンド音源を足す前提なので、BGMは入れません。
安全域の確認は、数値ではなく目でやります。安全域を色で重ねたコンタクトシートを作って、文字が隠れていないかを見る。テロップを中央揃えにせず左に寄せているのも、立ち絵の裏に文字が入るのを避けるためです。
今回書き出したのは YouTube 版だけです。
技術詳細:出し分けの中身
YouTube ショート | Instagram リール | |
|---|---|---|
避ける領域 | 右端のボタン列と下の情報エリア | 下35% |
レイアウトのずらし | 左に95px・上に75px | なし |
BGM | あり | なし |
音量 | -14 LUFS | -16 LUFS |
CTAの文言 | 概要欄のリンクから | プロフィールのリンクから |
クレジットは飾りではない
立ち絵の表情は、PSDから5種類だけ書き出しています。困った顔、驚いた顔、話している顔、むっとした顔、得意げな顔。
ここで規約の話をしておきます。ずんだもんの音源利用ガイドラインによると、利用の際にはクレジット表記が必要です。クレジット表記をしない商用利用は、1キャラクターあたり40万円(+消費税)の契約になります。だから毎フレームの左上に「音声合成:VOICEVOX:ずんだもん」を描く処理を入れてあります。忘れようがない場所に置く、というのが答えでした。概要欄にも同じクレジットを残しています。
同じガイドラインで、情報商材での利用と、情報商材を宣伝する目的での利用は禁止されています。この動画から有料教材に誘導する導線は作れません。立ち絵のPSDは、配布元のBOOTHページで再配布が断られています。素材が紛れ込まないよう、PSDとVRMは .gitignore で除外してあります。
実際にやって分かったこと
- 44分で1本できた。ただし素材の準備は別で、立ち絵は午前中に用意していました
- 機械が動いていたのは2分半。時間を食ったのは中身の調整のほうです
- 数字の多い記事は、動画にしやすい
- 技術的に「できる」ことと、動画として「良い」ことは別だった
いちばん意外だったのは2つ目です。自動化した部分は驚くほど速く、遅いのは人が見て決めるところでした。速くしたければ、コードではなく判断のほうを速くする必要があります。
動画化を前提にブログを書く
作ってみて、いちばん持ち帰れたのはここでした。
元記事にあった数字が、そのまま動画の見せ場になっています。12分で205行が2カット目、参照18本・7ドメインが5カット目、公式サイトと一致17件・確認できず3件が6カット目。台本を考えたのではなく、記事から拾っただけです。

逆に言うと、数字の入っていない記事は動画にしにくい。記事を書く段階で、○分・○件・○円・○個・○%・比較の結果を残しておくと、あとで台本の骨になります。ブログ記事からショート動画、そこからSNS投稿へと使い回すつもりなら、いちばん手前でやっておくことです。
この仕組みを自分でも作るなら
必要なものは多くありません。
- Claude Code
- Python と ffmpeg
- VOICEVOX(無料)
- キャラクターの立ち絵などの素材
- 元になるブログ記事と、記事中の画面のスクリーンショット
流れはこうです。
- 元になるブログ記事を用意する
- Claude Code に、記事から台本を書かせる
- 台本からナレーションを合成する
- ナレーションの長さから、カットの尺を決める
- Python で1枚ずつフレームを描く
- ffmpeg で音とつないで mp4 にする
このうち3から6は、コマンド1つで通しで走ります。人が手を動かすのは1と2、それと出てきたものを見て直すところです。
まとめ
できた動画は YouTube に上げました。公開は14:12、mp4 ができてから14分後です。タイトルは投稿メモに並べた3案から「旅行の下調べって面倒くさくない?AIに全部やらせてみた」を選びました。
ブログ記事は、そのままショート動画に作り直せます。そしてこの場合、Claude Code にやってもらうのは動画を出すことではなく、動画を出す道具を用意することのほうです。次は、ほかのAI関連の記事も同じ形で動画にしていきます。