Перейти к основному контенту

Как сделать петлю ИИ-видео естественной

Планируйте повторяемое движение и стык конца с началом. Исправляйте переходы изображения и звука без заметного обратного проигрывания.

Автор
Lydia
Опубликовано
Время чтения
9 мин чтения
Обновлено
Взрослая женщина в бордовом платье стоит на балконе в сумерках.

Естественная петля ИИ-видео требует, чтобы конец продолжался в начале: положение, направление движения, свет и звук должны совпадать. Двух одинаковых поз недостаточно. Начните с небольшого жеста, который сам возвращается, создайте короткий план и выберите стык в редакторе. Если действие не может естественно вернуться, создайте обратное движение вторым клипом, смешайте стык или намеренно используйте воспроизведение вперёд и назад.

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 и включите Return last frame в Advanced parameters.
  4. Проверьте оценку цены, запустите и оцените стык, как описано ниже.

Те же настройки под названиями полей:

НастройкаНачальное значениеЗачем
image_urlВаш утверждённый референсСтановится первым кадром
last_image_urlТот же референсПросит похожий конечный кадр, но не гарантирует согласованное движение
duration_seconds6Время на поворот и возвращение
resolution720p$0,2773 в секунду
aspect_ratioadaptiveЕдинственное допустимое значение; обрежьте входное изображение заранее
generate_audiofalseЗвук включён по умолчанию; добавьте атмосферу отдельно
return_last_frametrueДаёт последний кадр для метода двух клипов ниже

Шесть секунд при 720p стоят $1,6638. Сделайте предпросмотр при 480p, 6 s ($0,7404), чтобы проверить движение перед запуском в 720p. Длинные планы сильнее дрейфуют, поэтому делайте единицу петли короткой и повторяйте её, вместо генерации 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 показывают цену и спрашивают перед платным запуском.

Три иллюстративных кадра показывают взрослую женщину, сидящую на балконе: она смотрит на город, поворачивается к зрителю и возвращается в начальную позу.

Иллюстрация, не кадр Seedance: предложенное движение с поворотом и возвращением.

Если она поворачивается и не возвращается, упростите действие до лёгкого наклона головы, вместо добавления инструкций. Если всё изображение приближается к зрителю, уберите кинематографические формулировки о камере и используйте референс с явными неподвижными ориентирами, например углами перил. Одинаковые первый и последний кадры лишь поощряют ту же композицию; волосы, рукава и руки между ними всё равно могут закончить в другом месте.

Если один клип не возвращается: создайте обратный путь

Одинаковые начальное и конечное изображения — обычный совет, но середина плана всё равно может отклоняться. Более управляемый путь — два клипа:

  1. Создайте клип A из референса с включённым return_last_frame.
  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 x $1,6638 = $3,3276 при 6 s, 720p) и проверяете оба стыка (A с B и конец B с началом A, как описано ниже), но оба клипа привязаны к исходному референсу в точке петли.

Ищите стык по движению, а не только по позам

Разместите две копии кандидата подряд в редакторе и посмотрите границу на обычной скорости. Затем пройдите покадрово примерно пять кадров с каждой стороны, следя за ориентиром, например внешним краем плеча. Продолжает ли он двигаться в совместимом направлении?

Даже две одинаковые позиции плеча вызывают рывок, если первая копия заканчивает движением влево, а вторая начинает вправо на полной скорости. Для возвращающегося жеста выбирайте стык у спокойной точки разворота, где движение замедляется. Для непрерывного движения, например вращающегося предмета, сопоставляйте и положение, и направление.

Используйте угол фона, чтобы отличить движение камеры от жеста. Если перила и лицо меняют масштаб одновременно, обрезка по времени не уберёт наезд камеры. Если на стыке меняются лишь веки, перенесите обрезку подальше от моргания. Если у платья меняется вырез, выберите неповреждённый фрагмент или сгенерируйте заново; наплыв смешивает два разных костюма.

Совпадающие позы плеча показаны со стрелками противоположного и совместимого движения на стыке петли.

Иллюстрация, не кадр 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

Вторая команда лишь создаёт файл проверки из трёх циклов. -an удаляет звук; добавляйте его после утверждения изображения. Кнопка Repeat или Loop проигрывателя лишь запускает воспроизведение заново и не скрывает заметный стык, поэтому используйте loop.mp4 как повторяемую единицу.

Смешайте стык, если осталось небольшое расхождение

Короткий перекрёстный наплыв может смягчить небольшую разницу яркости или позы. Он не восстановит исчезнувший объект и не предотвратит двойную экспозицию лица. Команда ниже смешивает последние 0,5 секунды клипа длиной 6 секунд при 24 fps с его первыми 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 кадров. Если глаза превращаются в две пары или пальцы оставляют прозрачные следы, сократите перекрытие или откажитесь от смешивания.

Чёткий совмещённый портрет сравнивается с несовмещённым смешиванием, где черты лица и руки двоятся.

Иллюстрация, не кадр Seedance: несовмещённое смешивание удваивает черты лица.

Смешивание подходит для почти неподвижного портрета. Для большого поворота головы, перекрывающихся рук или движения камеры это плохой выбор. Если проблема в небольшой смене экспозиции, выровняйте оба конца перед смешиванием; если меняется геометрия, вернитесь к выбору исходника.

Сделайте намеренный бумеранг, если обратное движение уместно

Петля вперёд-назад подходит для мягкого наклона головы. Не используйте её для речи, ходьбы вперёд, падающих волос, наливания воды или руки, кладущей предмет: обратная причинность заметна.

Команда берёт первые пять секунд при 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

Исходнику нужно не менее пяти секунд видео; выход содержит 238 кадров, около 9.9 секунды. Выбирайте исходник, который медленно движется у крайних точек, иначе смена направления всё ещё выглядит резкой. Фильтр reverse буферизует всё, что обрабатывает, поэтому сначала обрежьте короткий фрагмент (документация фильтров FFmpeg).

Добавляйте звук после готовности изображения

Для беззвучного предпросмотра профиля оставьте петлю без звука. Для атмосферы положите отдельный фон помещения или города под несколько циклов, сделайте наплыв между концами атмосферы независимо от изображения и послушайте переход повтора в наушниках. Чтобы сделать фон втрое длиннее с плавными стыками, соедините наплывом копии одного файла атмосферы (каждый стык сокращает результат на одну секунду):

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

Не воспроизводите речь в обратном порядке и не привязывайте отдельное заметное звуковое событие к каждому повтору, если это не задумано.

Перед передачей проверьте файл из трёх циклов в размере показа: сброс камеры, скачок одежды, двойное лицо или щелчок звука. Если портрет стабилен, но одна деталь фона не зацикливается, альтернатива — синемаграф с маской: сохраните утверждённый неподвижный портрет и анимируйте лишь отдельную область занавески или света. Это композитинг вокруг статичного человека, а не бесшовное сгенерированное исполнение.

Другие языки English · 日本語 · 한국어 · Deutsch · Français · Español · Português (Brasil) · Italiano · Polski