Wan 3.0 でつくるキービジュアル (2) — FLF2V でループ素材とロゴへのトランジション

(1)では、トロフィーの写真 1 枚を最初のコマにして、プロンプトだけで 10 通りのティザー動画を作りました。(2) では最後のコマも指定します。始まりと終わりを決めて、その間をモデルに作らせる使い方(FLF2V: First-Last-Frame to Video)です。
作ったのは 3 つです。会場のモニターで流し続けられるループ素材、トロフィーがアワードのマークに変わるトランジション、その逆のオープニング。最後に 3 本をつないで、17 秒のティザーにしました。
この記事の前提
| モデル | wan3.0-video・720p・5 秒 |
| 入力 | (1) と同じトロフィーの写真と、白地にアワードのマークを置いた画像 |
| 生成 | 3 本(ループ・写真からマーク・マークから写真)。合計 21,000 AP、1 本 111〜132 秒 |
| 後処理 | ffmpeg(つなぎ・クロスフェード・ロゴの差し替え)。費用はかからない |
API の呼び方
first_frame と last_frame に画像を base64 で渡します。それ以外は (1) と同じです。
curl -X POST https://api.aicu.ai/v1/video/generate \
-H "Authorization: Bearer $AICU_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"wan3.0-video\",
\"first_frame\": \"$(base64 -i trophy.jpg)\",
\"last_frame\": \"$(base64 -i logo-frame.jpg)\",
\"prompt\": \"The crystal trophy glows brighter and dissolves into streams of golden light ...\",
\"resolution\": \"720p\",
\"seconds\": 5
}"
返ってきた id で GET /v1/video/status/{id} を 10 秒おきに見て、completed になったら GET /v1/video/file/{id} で mp4 を受け取ります(詳しくは Video API)。
1 本を投げて受け取るまでを 1 つにした台本もダウンロードできます。標準ライブラリだけで動き、既定は費用の見積もりだけです: wan-flf2v.py
curl -O https://api.aicu.ai/docs/samples/wan-teaser/wan-flf2v.py
python3 wan-flf2v.py --first trophy.jpg --last logo-frame.jpg --out to-logo.mp4 \
--prompt "The crystal trophy glows brighter and dissolves into streams of golden light ..." --apply
2 枚の画像は同じ大きさにそろえておきます。今回はどちらも 1671×941 です。
例 1:ループ素材
同じ画像を両端に渡す
最初と最後に同じ写真を渡し、「動いて、元に戻る」ことをプロンプトに書きます。
The white cloth ripples gently in the breeze and golden caustic light drifts slowly across it,
then everything settles back to exactly where it began. A soft lens flare pulses once at the tip
of the trophy. Fixed camera.

最初のコマと最後のコマはほぼ同じになり、繰り返し再生しても継ぎ目がほとんど分かりません(上の動画はループ再生にしてあります)。
後処理だけで作る方法と比べる
すでにある動画をループにする方法もあります。(1) の 03(固定カメラ・ゆらめく輝き)で試し、最初と最後のコマがどれだけ似ているかを PSNR(数字が大きいほど似ている)で測りました。
| 作り方 | 長さ | 継ぎ目の PSNR | 向いている場面 |
|---|---|---|---|
| (1) の 03 をそのまま繰り返す | 5 秒 | 13.2 dB | 継ぎ目ではっきり飛ぶ |
| クロスフェード(終わりの 1 秒を始まりに重ねる) | 4 秒 | 31.9 dB | 光や水のような、形の決まらない動き |
| ピンポン(順再生のあと逆再生) | 10 秒 | 35.5 dB | ゆっくりした動き。逆再生だと分かる動き(流れる水・歩く人)には向かない |
| FLF2V(両端に同じ画像) | 5 秒 | 41.9 dB | 新しく作るなら、これが一番自然 |
クロスフェードとピンポンは ffmpeg で作れます。
# クロスフェード:1〜5 秒を本体にして、最後の 1 秒で 0〜1 秒に溶かす(4 秒のループになる)
ffmpeg -i 03.mp4 -filter_complex "[0:v]split[a][b];[a]trim=1:5,setpts=PTS-STARTPTS[body];[b]trim=0:1,setpts=PTS-STARTPTS[head];[body][head]xfade=transition=fade:duration=1:offset=3,format=yuv420p[v]" -map "[v]" -an xfade-loop.mp4
# ピンポン:順再生のあとに逆再生をつなぐ(10 秒)
ffmpeg -i 03.mp4 -filter_complex "[0:v]split[f][r];[r]reverse[rv];[f][rv]concat=n=2:v=1[v]" -map "[v]" -an pingpong.mp4
| クロスフェード | ピンポン |
|---|---|
ループ素材として使う
音は外します(上の ffmpeg の -an)。Wan 3.0 は何も指定しなくても音を付けますが((1) 参照)、映像がつながっても音は継ぎ目で途切れます。BGM は会場や配信の側で別に流します。
Web ページの背景に置くなら、muted を付けると自動再生できます。
<video src="loop.mp4" autoplay muted loop playsinline></video>
サイネージやモニターに長尺で渡すなら、必要な長さだけ繰り返した 1 本の mp4 にします。
# 5 秒のループを 60 回 = 5 分の 1 本にする(再エンコードなし)
ffmpeg -stream_loop 59 -i loop.mp4 -c copy loop-5min.mp4
例 2:ロゴへのトランジション
最後のコマはロゴ
最後のコマには、白地の中央にアワードのマークを置いた画像を渡しました。

ロゴを使うときは、持ち主の決まりに従います。国際AIクリエイターアワードのマークの場合は、白地に置く、色・縦横比を変えない、AI に形を変えさせない、の 3 つでした。
The crystal trophy glows brighter and dissolves into streams of golden light. The light swirls
into two glowing orbits around a small figure, and the background fades to clean white as the
emblem settles at the center. The camera slowly pushes in.

トロフィーが光の筋に溶け、二つの軌道の形に集まってマークになります。途中で一瞬、マークが立体的に浮いて影が落ちるコマがありますが、最後は渡した画像にきちんと着地します。
最後のコマは、元の画像に差し替える
着地したといっても、生成された最後のコマは元の画像そのものではありません。左が生成された最後のコマ、右が渡した元の画像です。

形はほぼ同じですが、背景がわずかにクリーム色になり、色も少しずれています(PSNR 37.7 dB)。ロゴは「AI に形を変えさせない」決まりなので、最後の 0.5 秒で元の画像に溶かし、そのまま 2 秒止めます。途中のコマでマークが崩れるのは演出として構いませんが、最後に映るのは元の画像です。
# 生成した 5 秒の最後 0.5 秒で元の画像(動画と同じ 1280x720 にしたもの)に溶かし、2 秒止める
ffmpeg -i to-logo.mp4 -loop 1 -t 2.5 -framerate 24 -i logo-1280x720.png -filter_complex \
"[0:v]fps=24,format=yuv420p,setsar=1[a];[1:v]format=yuv420p,setsar=1[b];[a][b]xfade=transition=fade:duration=0.5:offset=4.5[v];[0:a]apad=pad_dur=2,afade=t=out:st=5:d=2[au]" \
-map "[v]" -map "[au]" -c:v libx264 -pix_fmt yuv420p -c:a aac -shortest to-logo-final.mp4
差し替えたあとの最後のコマは、元の画像と 42.1 dB(残りの差は mp4 の圧縮によるもの)でした。
例 3:ロゴから始まるオープニング
最初と最後を入れ替えると、マークから始まって写真になるオープニングになります。こちらも最初の 1 秒は元の画像を見せてから生成した動画に溶かしています。
The emblem on the white background breaks into soft golden light. The light spreads across the
frame like silk, forming waves of white cloth, green trees appear behind, and the light gathers
into a crystal trophy standing in the sunlight. The camera slowly pulls out.

3 本をつないで 1 本にする
ここまでの 3 本は、端のコマがそろっています。オープニングの終わりも、ループの始まりと終わりも、トランジションの始まりも、同じトロフィーの写真です。だから 0.3 秒のクロスフェードだけで、継ぎ目なくつながります。
ffmpeg -i from-logo-final.mp4 -i loop.mp4 -i to-logo-final.mp4 -filter_complex \
"[0:v]fps=24,format=yuv420p,setsar=1[a];[1:v]fps=24,format=yuv420p,setsar=1[b];[2:v]fps=24,format=yuv420p,setsar=1[c];[a][b]xfade=transition=fade:duration=0.3:offset=5.7[ab];[ab][c]xfade=transition=fade:duration=0.3:offset=10.4[v]" \
-map "[v]" -an chain.mp4
マーク → トロフィー → 光のゆらめき → マーク、の 17 秒です。音は外してあるので、BGM を付けて仕上げます。真ん中のループを何回か繰り返せば、長さも自由に変えられます。
最初と最後のコマを決めておくと、別々に作った動画を部品として組み立てられる。これが FLF2V のいちばん実用的なところでした。
分かったこと
| 結果 | |
|---|---|
| ループ | 両端に同じ画像を渡すのが一番自然(継ぎ目 41.9 dB)。後処理ならピンポン(35.5 dB)かクロスフェード(31.9 dB) |
| ループの音 | 継ぎ目で途切れるので外す。BGM は別に流す |
| ロゴへのトランジション | 最後のコマにはきちんと着地するが、元の画像そのものではない(37.7 dB)。最後は元の画像に差し替える |
| 部品として組み立てる | 端のコマをそろえておけば、短いクロスフェードだけでつながる |
費用のまとめ
| 生成 3 本(720p・5 秒) | 7,000 AP × 3 = 21,000 AP(約 2.1 ドル) |
| 後処理(ffmpeg) | 0 |
(1) の 10 本(77,000 AP)と合わせても 98,000 AP(約 9.8 ドル)です。
⭐︎ 価格は原稿公開時(2026 年 11 月 12 日)の値です。現在の単価は 料金 と GET /v1/models で確かめられます。
関連
- Wan 3.0 でつくるキービジュアル (1) — トロフィー写真 1 枚から、公式プロンプトガイドで 10 通りのティザー
- Wan 3.0 でつくるキービジュアル (3) — 白からロゴ、写真、ループ、白へ:FLF2V をつないで 1 本に
- Video API — 呼び出し方・最初と最後のコマ・キャラクターの指定
- Alibaba Cloud: Text-to-video / image-to-video prompt guide
Special Thanks to Alibaba Wan 3.0
