結論
- 構成と尺: Tiny Desk AI動画は、5つのショットと5人の登場人物で構成される19秒・縦型9:16の映像で、楽曲にはThe Gap Bandの「Outstanding」が使われます。
- 入力アセット: 生成モデルに実写映像を直接渡すことはなく、各ショットをエッジ検出(edge detection)した線画(line drawing)のみを参照動画編集(reference edit)として渡し、結合後の動画の背後にNPRの音源を再配置します。
- モデルと処理系統: Wan 3.0では4本のエディット(480pおよび720p)、Seedance 2.5では5本のセグメント(1080pルート)に分割して送信し、480pの同一線画で両モデルとも5人の人物を同等に維持しました。
- プロンプトの挙動: プロンプト内に単語を含めると、否定形(no〜)で記述した場合であってもモデルはその対象を描画します。
以下の数値は、筆者のチームが2026年10月26日および27日に実行した8バッチ・計25回のテストレンダージョブに基づき、テスト写真に登場する人物はすべて生成AIで作成されたものです。
前提:トレンドの中身と5つのショット
このトレンドの原曲となった演奏は、2023年6月5日にYouTubeへ投稿されたCharlie Wilsonの2023年のNPR Tiny Desk Concertのラストナンバー「Outstanding」です。2026年10月18日にTikTokクリエイターの@theburnerfromhe11が、その週の土曜日に敗れた大学フットボールのヘッドコーチ5人をバンドに配置した動画「College Football's Week 8 All-Loss Tiny Desk Concert」を投稿し、230万回再生を超えました。
このトレンドは2026年10月23日付けでThe AthleticおよびNew York Timesでも報じられました。動画のフォーマットは単一の固定映像ではなく、部屋の内装、登場人数(4〜6人)、カット割りなどがバージョンごとに異なる形式です。映像の規格は縦型9:16で、全体の長さは19秒です。
| ショット | 時間(秒) | フレーム数 | 画面上の人物 |
|---|---|---|---|
| 1 | 0.000–1.375 | 33 | リードシンガーの横顔アップ |
| 2 | 1.375–6.708 | 128 | 中央手前のキーボード、後方のコーラス2人 |
| 3 | 6.708–13.000 | 151 | リードシンガーの笑顔アップ |
| 4 | 13.000–16.375 | 81 | サックスソロ |
| 5 | 16.375–19.042 | 64 | 再びバンド全体 |
リードシンガーはショット1と3に、バンドメンバーはショット2と5に、サックス奏者はショット4のみに登場し、この配置がパイプライン全体の分割構造を決定します。
筆者のチームでは、NPRの公式映像ではなく拡散されたAI動画そのものをトレース元として採用しています。ソーシャルメディアで共有されているのはAI生成版の複製であり、ショット割りや秒数を秒単位で一致させる必要があるためです。以前の設計ではNPRの映像からショットごとに9:16でクロップしてトレースしていましたが、拡散されたAI動画をソースに変更したことで、視聴者が認知しているカットのタイミングと完全に一致しました。
source : 720x1280, 24 fps, 457 frames = 19.042 s
cuts : after frames 33, 161, 312, 393
shot 1 : frames 1-33 ( 33) 0.000- 1.375 s
shot 2 : frames 34-161 (128) 1.375- 6.708 s
shot 3 : frames 162-312 (151) 6.708-13.000 s
shot 4 : frames 313-393 ( 81) 13.000-16.375 s
shot 5 : frames 394-457 ( 64) 16.375-19.042 s
ソースクリップは720×1280、24fps、457フレームで構成され、総尺は19.042秒です。フレーム33、161、312、393の直後にハードカット(hard cut)が存在し、正確に5つのショットへ分割されます。
検証方法
線画化フィルタ(ffmpeg edgedetect)
モデルに渡す参照動画は、元の映像から顔や衣装、色情報を完全に除去したエッジ検出済みの線画です。黒地に灰色の輪郭線のみで構成され、サイズは720×1280、アスペクト比は9:16、音声は無音です。バンドショットには標準的なフィルタを適用しますが、AI動画の2箇所のアップショットは輪郭がソフトであったため、通常のフィルタでは点灯ピクセル率が約0.4〜0.9%にとどまりました。そこでアンシャープマスクを前置するフィルタを適用したところ、点灯ピクセル率が約2%まで回復し、頭部の回転や笑う動作の追従に必要な輪郭を確保しました。線画はlanczosリサンプリングで720×1280にスケーリングされ、24fpsでエンコードされます。
# band shots
ffmpeg -i shot.mp4 -vf "scale=720:1280:flags=lanczos,gblur=sigma=2,edgedetect=low=0.1:high=0.25,format=gray" -r 24 -an lines.mp4
# soft close-ups
ffmpeg -i shot.mp4 -vf "scale=720:1280:flags=lanczos,unsharp=7:7:1.5,gblur=sigma=1.2,edgedetect=low=0.05:high=0.15,format=gray" -r 24 -an lines.mp4
マスクで帽子・ロゴ・隅の人物を消す
Wan 3.0向けの線画では、帽子、ヘッドホン、ヘッドセット、胸のロゴ、プリントスローガン、フード、画面の隅に映るピントの合っていない人物など、5ショット合計で22個のオブジェクトをキーフレームごとのマスク(mask)で黒く塗りつぶしました。目、鼻、口のラインはそのまま残し、点灯ピクセルのうち62%から81%を維持しています。モデルに対しては英語プロンプト内で「its blank black patches (over heads, on chests) are not objects: fill them naturally from the photos and the room」と指定し、黒い領域が物理的な物体ではないことを指示しました。
線画上で物体を単にぼかす処理をすると形状の輪郭が残留し、モデルがその輪郭に別の物体を補完してしまいます。そのため、元のバンドショットからサックスをぼかして消すのではなく、サックス自体が初めから映っていないAI動画をトレース元として使っています。
また、サックスショットの端にぼやけて写っていたバンドメンバーの輪郭によって別の人物が生成される現象が発生しました。この領域をマスクで完全に消去し、プロンプトでフレーム内に他の人物が存在しない旨を指示することで解消しています。
ショット分割と写真の割り当て
各ショットに対して渡す写真の割り当ては固定されています。
- リードシンガー(アップ): 写真1を指定(必須写真)。ショット1(冒頭の横顔)およびショット3(笑顔のアップ)に登場。
- サックス奏者: 任意指定。ショット4(サックスソロ)に登場。
- キーボード奏者: 任意指定。ショット2およびショット5の中央手前、赤いキーボードの位置に登場。
- 左側コーラス: 任意指定。ショット2およびショット5の後方左側に登場。
- 右側コーラス: 任意指定。ショット2およびショット5の後方右側に登場。
指定された写真は所定のスロットに留まり、空きスロットがあっても写真が繰り上げられることはありません。空きスロットには、4Kキャラクターシート(顔のアップ1点と全身像4点)から生成した筆者のチーム固有のAIキャラクター4人が固定で割り当てられます。リードシンガーの写真が他のパートに割り当てられることはなく、プロンプト側で新たな人物を捏造することもありません。人物のほか、イラストやゲームのキャラクター、ペットの写真も指定でき、キーボードの位置にペットを配置した場合は鍵盤に前足を乗せた姿勢で生成されます。
Wan 3.0は4本、Seedance 2.5は5本に分けて送る
出力解像度によって実行するエンジンを切り替えます。480pおよび720pはWan 3.0で処理し、1080pはSeedance 2.5で処理します。
Wan 3.0: 4 reference edits, drawings at 24 fps, model audio off
edit 1 : shot 1 48 frames = 2.000 s join keeps 0.000-1.375 s
edit 2 : shot 2 + shot 5 192 frames = 8.000 s join: shot 2 from 0 s, shot 5 from 5.333 s
edit 3 : shot 3 6.292 s
edit 4 : shot 4 3.375 s
sent : 19.667 s back: 30 fps, same length as the drawing
Seedance 2.5: 5 segments, drawings padded with their last frame to whole seconds
shot 1 : 4 s -> back 4.0417 s @ 24 fps
shot 2 : 6 s -> back 6.0417 s
shot 3 : 7 s -> back 7.0417 s
shot 4 : 4 s -> back 4.0417 s
shot 5 : 4 s -> back 4.0417 s
sent : 25 s asset review first (all nine of one render's: 20 s)
Wan 3.0はアセット審査(asset review)を必要とせず、URLとしてファイルを直接受け付けます。一方のSeedance 2.5では、生成処理を開始する前に写真と5本の線画がプロバイダーの無料アセット審査を通過する必要があります。この審査は短時間で完了し、1レンダー分の計9アセットが20秒で処理されました。あるプロバイダーで生成に失敗した場合は、同一のリクエストが次のプロバイダーへ自動的にフォールバックされます。
リクエスト例
Wan 3.0へ送信したリクエストのJSONボディは以下の通りです。
{
"model": "wan3.0-video",
"prompt": "<the shot's prompt>",
"resolution": "480P",
"size": "adaptive",
"duration": -1,
"audio": false,
"generation_type": "reference",
"image_urls": ["<photo for @Image 1>", "<@Image 2>", "<@Image 3>"],
"video_urls": ["<the shot's line drawing>"]
}
意図的に無効な値を送信するテストを行った結果、ジョブを開始することなく許容されるパラメータ値が判明しました。受け付けられる解像度は480P、720P、1080Pであり、アスペクト比はadaptive、16:9、4:3、1:1、3:4、9:16です。
Wan向けのプロンプトは、以下の要素を半角スペースで連結して構築します。
- @Video 1が線画であること、および黒いパッチは物理的な物体ではないことの指定
- 各@Imageの定義と、画面内の配置(「the person from @Image N」と写真に基づく服装の指定)
- どの写真から顔と衣装を参照するかの対応関係
- バンドショットにおける規則(正確に3人の人物、異なる3つの顔、位置の入れ替わり禁止)
- 空間設定(オフィスの隅、レコードや玩具が並ぶ本棚、赤いステージキーボード、暖色の照明)
- @Video 1から引き継ぐべき要素(構図、タイミング、ポーズ、頷き、頭部の回転、口の動き、楽器を弾く手、「The people are new」という記述)
- 仕上げの指定(フォトリアル、線の残留禁止、フード、パーカー、キャップ、帽子、ヘッドホン、ヘッドセットマイク、プリント文字の禁止)
各プロンプトは自身のショットに映る人物と状況のみを記述し、楽曲名、歌手名、バンド名、コンサート名、拡散元の登場人物名などは一切含めません。本番環境のプロンプトには、承認されたテストレンダーのプロンプトをそのまま使っています。訪問者の写真は視覚モデルがプロンプト用に言語化しますが、写真と説明が一致しない場合は破棄します。誤った人物説明が付与される方が無指定より悪影響を及ぼすためです。
結果
Wan 3.0とSeedance 2.5の比較(480p・同じ線画)
| 同一線画・480pでの比較 | Wan 3.0 | Seedance 2.5 | 運用上の意味 |
|---|---|---|---|
| 動画1本あたりのジョブ数 | 4 | 5 | Wanでは2つのバンドショットを1本の動画として送信可能 |
| 送信秒数 | 19.667秒(線画の実尺) | 25秒(端数を繰り上げた秒数) | Seedanceでは保持する長さより長めに生成される |
| アセット審査 | なし | 10件の審査(無料・数秒で完了) | Wanは事前審査の手順が不要 |
| 返却されるフレームレート | 30 fps | 24 fps | 結合時にいずれも30 fpsへ強制統一 |
| 返却される尺 | 線画と同じ長さ | 要求秒数プラス1フレーム | フレーム数ではなく時間指定でトリムが必要 |
| 顔・衣装・背景・動作 | 同等 | 同等 | 両モデルとも5人の人物の一貫性を維持 |
同一の線画を入力とした場合、480pで両モデルは人物の顔立ちや衣装、動作の再現で同等の出力を返しました。分割ジョブ数やアセット審査の有無といったパイプライン上の差異はあるものの、最終的な映像の再現性に差は生じていません。
返ってくる長さとfps
Wan 3.0は30fpsで映像を出力し、入力した線画と完全に同じ尺を返します。一方、Seedance 2.5は24fpsで出力し、指定した秒数よりも正確に1フレーム分長い動画を返します(4秒要求時は4.0417秒、6秒要求時は6.0417秒、7秒要求時は7.0417秒)。そのため、後段の結合処理ではフレーム数ではなく時間でトリムする必要があります。Wan 3.0の全4エディットの所要時間は、実測で480pが7.1分、720pが9.5分でした。
8秒のバンド編集にした理由
Wan 3.0では、ショット2(128フレーム)とショット5(64フレーム)を結合した計8.0秒の単一線画として送信しました。結合処理で、ショット2は0秒から、ショット5は5.333秒からの区間を切り出します。Wan 3.0は5.333秒の結合点で視覚的なカットを生成せず動作が連続するため、後段の処理で時間に基づいて切り離しています。また、ショット1の本来の尺は33フレーム(1.375秒)ですが、モデルが安定して処理できる最短尺を確保するため、48フレーム(2.0秒)の線画として生成し、結合時に先頭の1.375秒のみを残しています。
ハマりどころ
ロゴが服になる
キャップのロゴが残った線画を入力した初期のWan実行で、リードシンガーのTシャツが白のパーカーへと変化し、視認可能な大きさの「ALABAMA」の文字とナイキのスウッシュ記号が胸元に描画されました。エッジ検出されたロゴの形状が服のデザインとして誤解釈されたことが原因です。線画上の帽子、ロゴ、文字プリントをマスクで黒塗りし、プロンプト内で各人物の着用する服を具体的に記述するように変更しました。修正後の生成では、写真通りの無地の白Tシャツとチェーンネックレスが正しく反映されました。
短いショット単体だと顔が変わる
2.67秒の短いバンドショット(ショット5)を単独のジョブとして送信した際、同一人物として指定したはずの3人が別の見知らぬ人物に置き換わりました。短い時間幅ではコンテキストが不足し人物の同一性を保持できませんでした。ショット2と統合して1本の8秒の線画として送信する設計に変更した結果、カットの前後で同一の3人が演奏を継続する出力を得ました。
「メガネなし」と書くとメガネが描かれる
2026年10月26日の検証で、プロンプトに「no glasses」と指定していたにもかかわらず、サックス奏者に元映像の太縁メガネが描画されました。目元をぼかした線画を用意して再検証しましたが、11.6秒から15秒の全フレームにわたって細いメタルフレームのメガネが生成され続けました。
禁止事項として単語を記述するとモデルがその対象を認識して描画してしまうことが判明したため、プロンプトから「glasses」という単語を完全に削除し、「Subject 1's face is exactly the face in @Image 1.」に置き換えました。3回目の実行では全フレームでメガネが除去されました。除外したい対象を否定形で指定する記述は避け、写真通りの顔をそのまま適用する指示に変更しています。同様の理由から、過去のプロンプトにあった元映像の衣装一覧(「no blue knit beanie」など)もすべて削除し、各人物の写真に基づく衣装と役割のみを肯定形で記述しています。
音声と結合
モデル側の音声は常にオフ(audio: false)に設定します。音声トラックには、NPRの元動画の23:45.886から24:04.928の区間を0秒位置から配置し、末尾に0.3秒のフェードアウトを適用します。この再生区間はAI動画の音声トラックとの相互相関(cross-correlation)によって特定したもので、相関ピーク値は次点候補の10.2倍を示しました。楽曲のテンポは約98BPMです。
per shot : trim to its length -> scale + pad to shot 1 size -> fps=30
join : concat=n=5, map the song
video : -c:v libx264 -preset veryfast -crf 20
audio : -c:a aac -b:a 128k, NPR upload 23:45.886-24:04.928 from 0 s, 0.3 s fade-out
output : -shortest -movflags +faststart
result : 571 frames, 19.033 s, 480x854 or 720x1280
1つのffmpegフィルタグラフ(filter graph)内で、各ショットを元の長さにトリムし、ショット1の解像度にスケーリングとパディングを行い、フレームレートを30fpsへ統一した上でconcat=n=5により結合します。エンコード設定はlibx264、-preset veryfast、-crf 20、AAC 128kbpsとし、出力は571フレーム・19.033秒(480×854または720×1280)です。結合処理のリトライ上限は3回、各試行のタイムアウトは75秒に設定しており、ローカル環境では全ショットのダウンロード完了から5.45秒で結合が完了しました。ffmpegのfreezedetectによる検査で、0.3秒以上のフリーズは検出されていません。
モデルに入力する写真に対しては、以下の事前処理をします。
- 向きの補正: スマートフォンの写真はEXIFのOrientationタグによって回転情報が保持されていますが、モデルはピクセルデータをそのまま読み取りタグを無視するため、事前に直立した状態の画像として再保存します。
- 解像度調整: 各辺を300〜6000pxの範囲に収めます。短辺が250px未満の画像は拒否し、250〜299pxの場合は300pxまで拡大、長辺が6000pxを超える場合は長辺5900pxへ縮小します。
- アスペクト比: 幅÷高さの比率が0.4〜2.5の範囲外となる極端に縦長の画像(スマートフォンのスクリーンショット等は約0.30)は、クロップを行わずに長辺側に黒帯を追加してパディングします。
- 非クロップ処理: プロンプトによって写真の背景、ポーズ、構図を無視するよう指示しているため、一般的な写真をトリミングせずそのまま使えます。
これらの処理をブラウザ上で行い、顔が1つ明確に含まれているかを検証するツールとして、筆者のチームでは写真の前処理を行う無料Space(Tiny Desk AI Photo Prep)を公開しています。写真はサーバー側に保存されません。
まとめ
参照動画を用いたキャラクター置換で汎用的に機能する要素は以下の通りです。
- 実写映像ではなくエッジ検出による線画を参照動画として使うこと
- ショット単位で映像を分割し、その画面に現れる人物の写真のみを渡すこと
- 写真内の服装を肯定形でプロンプトに指定すること
- 除外したい要素の名前をプロンプト内に記述しないこと
- 最後に原曲の音源を映像の下に配置すること
これらのパイプラインをオープンウェイトのモデルで試す場合は、Wan-AIが2025年9月19日にApache-2.0ライセンスでウェイトと推論コードを公開したキャラクターのアニメーションと置き換えのためのオープンモデルであるWan2.2-Animate-14Bが使えます。Wan-AIはHugging Face上でデモ用のSpaceも運用しています。
Seadanse(筆者が開発に関わっているサービス)
筆者はSeadanseのTiny Desk AIの開発チームに所属しています。Seadanseでは1枚から5枚の写真をアップロードすることで、原曲「Outstanding」の音源を含む19秒・9:16のTiny Desk AI動画を数分で生成できます。720pの動画は9.90ドルのクレジットパック購入(サブスクリプション不要、アカウント登録不要)で生成できます。本記事で記載したWanのプロンプト、線画フィルタ、結合スクリプトは、サービス内で実際に稼働している設計をそのまま記述したものです。上記の比較および実測値は筆者のチームのテストレンダーに基づくものであり、検証結果の掲載順や評価で自社製品を優先することなく、実測された事実のみを記載しています。

