本文へスキップ

AI動画のループを自然に見せる方法

繰り返せる動作を計画し、終わりと始まりをつなぎます。露骨な逆再生に頼らず、AI人物動画の映像と音の継ぎ目を修正する方法です。

執筆
Lydia
公開
読了時間
約 11 分
更新
夕暮れのバルコニーに、バーガンディー色のドレスを着た成人女性が立っています。

自然なAI動画ループには、終わりから始まりへ動作がつながることが必要です。位置、動きの方向、照明、音を合わせます。2つのポーズが一致するだけでは不十分です。自然に元へ戻る小さな動作から始め、短いショットを生成し、編集ソフトでつなぎ目を選んでください。自然に戻れない動作なら、戻る動きを別のクリップとして生成する、つなぎ目をブレンドする、または意図的な順再生と逆再生の効果を使います。

Seedance 2.5 image-to-videoはよい出発点です。4〜30秒のショット、480p、720p、1080pに対応し、任意で終了フレームも指定できます。ループの切り替え機能はないため、継ぎ目は自分で調整します。

元に戻れる動作を生成する

バルコニーの手すりにいる、全身を覆うバーガンディー色のドレスを着た架空の成人女性の16:9参照画像を用意します。両肩を見せ、髪の周囲に余白を残し、背景の街は動かさないようにします。最初は力の抜けたポーズにしてください。カップを空にする、服を脱ぐ、誰かが画面に入るなど、場面の状態が変わる動作は避けます。

次の動作プロンプトをコピーしてください。

One continuous six-second medium portrait of this fictional adult woman on the balcony. She slowly turns her gaze from the city toward the viewer, holds a soft smile briefly, then returns her head and eyes to the opening position. Her hands stay where they are. The camera stays at the same position and scale. Stable dusk illumination, a still background, very slight hair movement. No cut, no zoom, no new objects, no dialogue.

Playgroundで試す

  1. このプロンプトを入力済みのSeedance 2.5 image to videoを開きます。PlaygroundタブのForm表示を使い、実行するには残高のあるアカウントでログインしてください。
  2. Input imageにバルコニーの参照画像を追加し、Closing frameにも同じファイルを入れます。
  3. Durationを6、Resolutionを最初の確認用に480p(採用版は720p)にします。Aspect ratioはAutoのままにし、Generate audioをオフ、Advanced parametersのReturn last frameをオンにします。
  4. 見積もりを確認して実行し、以下の方法でつなぎ目を判断します。

同じ設定をフィールド名で示します。

設定初期値理由
image_url確認済みの参照画像最初のフレームになります
last_image_url同じ参照画像似た終了画像を指定しますが、動きの一致は保証しません
duration_seconds6向きを変えて戻る時間を確保します
resolution720p1秒あたり$0.2773
aspect_ratioadaptive受け付ける唯一の値です。入力を先に切り抜いてください
generate_audiofalse既定では音声がオンです。環境音は別に追加します
return_last_frametrue以下の2クリップ方式に使う最終フレームを取得します

720pで6秒の料金は$1.6638です。720pで実行する前に、480p、6 s($0.7404)でプレビューし、動きを確認します。長いショットほどずれやすいため、30秒を生成するより、ループ単位を短くして繰り返してください。

コードから実行する

bash
cat > input.json <<'J'
{
  "prompt": "One continuous six-second medium portrait of this fictional adult woman on the balcony. She slowly turns her gaze from the city toward the viewer, holds a soft smile briefly, then returns her head and eyes to the opening position. Her hands stay where they are. The camera stays at the same position and scale. Stable dusk illumination, a still background, very slight hair movement. No cut, no zoom, no new objects, no dialogue.",
  "image_url": "<your reference image URL>",
  "last_image_url": "<the same reference image URL>",
  "duration_seconds": 6,
  "resolution": "720p",
  "aspect_ratio": "adaptive",
  "generate_audio": false,
  "return_last_frame": true
}
J
spicyapi tasks create --model bytedance/seedance-2.5/image-to-video --input-file input.json --wait

設定、ローカルファイルのアップロード、結果についてはCLIドキュメントを参照してください。

Agentに実行させることもできます。 上記のCLI、MCPサーバー(spicyapi_task_createを呼び出します)、またはSkill(npx skills add spicyapi-ai/spicy-skill)をアシスタントに渡します。CLIとMCPは料金を表示し、有料の実行前に確認を求めます。

説明用の3フレームに、バルコニーに座った成人女性が街を見て、見る人の方を向き、最初のポーズに戻る様子を示しています。

Seedanceのフレームではなく説明図です。向きを変えて戻る動作の案を示しています。

向きを変えて戻らない場合は、指示を増やすより、動作を小さく頭を傾けるだけにします。画像全体が見る人に近づくなら、映画的なカメラ表現を削除し、手すりの角など明確な固定基準のある参照画像を使ってください。最初と最後の画像を同じにしても、同じ構図を促すだけです。途中の髪、袖、手は別の位置で終わることがあります。

1つのクリップで戻らない場合は戻る動作を生成する

最初と最後に同じ画像を使うのが一般的な助言ですが、ショットの途中はずれることがあります。より制御しやすいのは2つのクリップを使う方法です。

  1. return_last_frameをオンにして、参照画像からクリップAを生成します。
  2. Aが返した最終フレームをimage_url、元の参照画像をlast_image_urlにしてクリップBを生成します。戻る動作を、例えば次のように指定します:"Continuing from this frame, she turns her head and eyes back to the opening position, then holds still. Same camera, same lighting, no cut."
  3. AとBをつなぎます。Aの最後はBの最初と同じフレームなので、Bの最初のフレームを削除します。
bash
ffmpeg -i A.mp4 -i B.mp4 -filter_complex "[1:v]trim=start_frame=1,setpts=PTS-STARTPTS[b];[0:v][b]concat=n=2:v=1:a=0" -an AB.mp4

2つのクリップの料金がかかります(6 s、720pで2 x $1.6638 = $3.3276)。両方のつなぎ目(AからB、Bの終わりからAの始まり)を以下の方法で確認する必要がありますが、どちらのクリップもループ地点で元の参照画像を基準にしています。

ポーズだけでなく動きを見てつなぎ目を探す

候補の動画を編集ソフトに2つ続けて置き、通常速度で境目を見ます。その後、肩の外側など1つの目印を追いながら、境目の前後をそれぞれ約5フレームずつコマ送りで確認します。動きはつながる方向に続いていますか。

肩の位置が同じでも、最初のコピーが左へ動きながら終わり、次が全速で右へ動き始めると、がくっと見えます。戻る動作なら、動きが緩やかになる自然な折り返し付近をつなぎ目にします。回転する物など動きが連続する場合も、位置と動きの方向を合わせてください。

背景の角を使って、カメラの動きと人物の動作を区別します。手すりと顔の両方の大きさが変わる場合、尺を切り詰めてもカメラの前進は消せません。つなぎ目でまぶただけが変わるなら、まばたきから離れた位置で切ります。ドレスの襟元が変わるなら、問題のない区間を選ぶか再生成してください。ディゾルブでは違う衣装を混ぜることになります。

ループのつなぎ目で、同じ肩のポーズに逆方向とつながる方向の動きの矢印を組み合わせています。

Seedanceのフレームではなく説明図です。似たポーズでも、動きがつながらない場合があります。

選んだ範囲だけを書き出します。この例は1〜5秒を残します。自分で選んだ境界に置き換えてください。

bash
ffmpeg -i input.mp4 \
  -vf "trim=start=1:end=5,setpts=PTS-STARTPTS" \
  -an -c:v libx264 -crf 18 -pix_fmt yuv420p loop.mp4
ffmpeg -stream_loop 2 -i loop.mp4 -c copy review-three-cycles.mp4

2つ目のコマンドは3周分の確認用ファイルを作るだけです。-anは音声を削除します。映像を確認してから音を追加してください。プレーヤーのRepeatやLoopは再生を最初からやり直すだけで、見えるつなぎ目を隠せません。そのため、loop.mp4を繰り返しの単位にします。

小さなずれが残るときはつなぎ目をブレンドする

短いクロスフェードで、小さな明るさやポーズの差を和らげられます。消えた物を戻したり、顔の二重映りを防いだりはできません。次のコマンドは6秒、24 fpsのクリップの最後の0.5秒を最初の0.5秒に重ね、ループの最終フレームから最初へ直接つながるようにします。結果の長さは5.5秒です。

bash
ffmpeg -i input.mp4 -filter_complex \
"[0:v]split=3[a][b][c];\
[a]trim=start=5.5:end=6,setpts=PTS-STARTPTS[tail];\
[b]trim=start=0:end=0.5,setpts=PTS-STARTPTS[head];\
[c]trim=start=0.5:end=5.5,setpts=PTS-STARTPTS[mid];\
[tail][head]xfade=transition=fade:duration=0.5:offset=0[xf];\
[xf][mid]concat=n=2:v=1:a=0,format=yuv420p[v]" \
-map "[v]" -an -c:v libx264 -crf 18 blended-loop.mp4

別の長さD、重なりXなら、末尾にtrim=start=D-X:end=D、先頭にtrim=start=0:end=X、中間にtrim=start=X:end=D-Xを使い、duration=Xをxfadeで指定します。計算した数値をコマンドに書き込んでください。最初は8〜12フレームの重なりにします。目が2組に分かれたり、指に透明な残像が出たりするなら、重なりを短くするかブレンドをやめます。

位置の合った鮮明なポートレートと、顔のパーツや手が二重になった位置ずれのあるブレンドを比較しています。

Seedanceのフレームではなく説明図です。位置がずれたブレンドでは顔のパーツが二重になります。

ブレンドはほぼ静止したポートレートに向いています。大きく頭を向ける、手が重なる、カメラが動く場面には不向きです。小さな露出差が問題なら、ブレンド前に両端をそろえます。形状が変わっているなら、元動画の選び直しに戻ってください。

逆再生が合うときは意図的なブーメランにする

順再生と逆再生のループは、ゆっくり頭を傾ける動作に使えます。発話、前へ歩く動作、落ちる髪、水を注ぐ動作、手で物を置く動作には使わないでください。因果関係の逆転が目立ちます。

このコマンドは最初の5秒を24 fpsで取り出し、フレーム0〜119を順再生、その後118〜1を逆再生します。短い停止を生む端点の重複フレームは除きます。

bash
ffmpeg -i input.mp4 -filter_complex \
"[0:v]fps=24,trim=start_frame=0:end_frame=120,setpts=PTS-STARTPTS,split[f][r];[r]reverse,trim=start_frame=1:end_frame=119,setpts=PTS-STARTPTS[back];[f][back]concat=n=2:v=1:a=0,format=yuv420p[v]" \
-map "[v]" -an -c:v libx264 -crf 18 boomerang.mp4

元動画には少なくとも5秒が必要です。出力は238フレーム、約9.9秒になります。両端で動きが遅い動画を選んでください。そうしないと方向転換が急に見えます。reverseフィルターは処理するすべてをメモリに保持するため、先に短い区間を切り出します(FFmpegフィルターのドキュメント)。

映像が整ってから音を追加する

無音のプロフィールプレビューなら、ループはミュートのままにします。環境音を付けるなら、室内の環境音や街の音を別トラックで数周にわたって敷き、映像とは独立して音の両端をクロスフェードし、ヘッドホンで繰り返し地点を聞きます。滑らかなつなぎ目で3倍の長さの音の土台を作るには、1つの環境音ファイルのコピーをクロスフェードします(つなぐたびに結果は1秒短くなります)。

bash
ffmpeg -i bed.wav -i bed.wav -i bed.wav -filter_complex "[0][1]acrossfade=d=1[x];[x][2]acrossfade=d=1" bed3.wav

意図した効果でない限り、発話を逆再生したり、毎回の繰り返しに目立つ音のイベントを付けたりしないでください。

納品前に、3周分のファイルを実際の表示サイズで確認し、カメラのリセット、服の急変、顔の二重映り、音のクリックがないかを見ます。ポートレートは安定していても背景の一部だけループしないなら、マスク付きのシネマグラフが代案です。確認済みの静止ポートレートを残し、別のカーテンや光の領域だけを動かします。これは静止した被写体の周囲を合成する方法で、生成した演技が継ぎ目なく続くものではありません。

他の言語 English · 한국어 · Deutsch · Français · Español · Português (Brasil) · Русский · Italiano · Polski

実際に試してみる

支払いは実行した分だけ。プランもサブスクリプションもありません。

使用モデル:MiniMax H3 · ByteDance Seedance 2.0 Fast