자연스러운 AI 영상 루프는 끝이 시작으로 이어져야 합니다. 위치, 움직임 방향, 조명, 소리가 연결되어야 합니다. 두 포즈를 맞추는 것만으로는 부족합니다. 저절로 원위치로 돌아오는 작은 동작으로 시작해 짧은 샷을 생성하고 편집기에서 연결 지점을 고르세요. 동작이 자연스럽게 돌아올 수 없다면 복귀 동작을 두 번째 클립으로 생성하거나, 이음새를 블렌딩하거나, 의도적인 정방향·역방향 효과를 사용하세요.
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에서 시험하기
- 이 프롬프트가 입력된 Seedance 2.5 image to video를 여세요. Playground 탭의 Form 보기에서 진행하세요. 실행하려면 잔액이 있는 계정으로 로그인하세요.
- 발코니 레퍼런스를 Input image에 추가하고 같은 파일을 Closing frame에도 넣으세요.
- Duration을 6, Resolution을 첫 확인용으로 480p(최종 채택본은 720p)로 설정하세요. Aspect ratio는 Auto로 두고 Generate audio는 끄며, Advanced parameters에서 Return last frame을 켜세요.
- 예상 가격을 확인하고 실행한 뒤 아래 설명대로 연결 지점을 평가하세요.
같은 설정을 필드 이름으로 표시하면 다음과 같습니다.
| 설정 | 시작값 | 이유 |
|---|---|---|
image_url | 승인한 레퍼런스 | 첫 프레임이 됩니다 |
last_image_url | 같은 레퍼런스 | 비슷한 종료 이미지를 요청하지만 움직임 일치를 보장하지 않습니다 |
duration_seconds | 6 | 고개를 돌리고 돌아올 시간을 줍니다 |
resolution | 720p | 초당 $0.2773 |
aspect_ratio | adaptive | 허용되는 유일한 값이며 입력은 미리 자르세요 |
generate_audio | false | 오디오는 기본으로 켜져 있으며 환경음은 따로 추가하세요 |
return_last_frame | true | 아래의 두 클립 방식에 쓸 마지막 프레임을 제공합니다 |
720p에서 6초는 $1.6638입니다. 720p 실행 전에 480p, 6 s($0.7404)로 미리 보고 움직임을 확인하세요. 긴 샷은 드리프트가 더 커지므로 30초를 생성하기보다 루프 단위를 짧게 유지해 반복하세요.
코드로 실행하기
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 프레임이 아닌 설명도: 고개를 돌렸다가 돌아오는 동작 제안입니다.
고개를 돌린 뒤 돌아오지 않는다면 지시를 더하기보다 살짝 고개를 기울이는 동작으로 단순화하세요. 이미지 전체가 관객 쪽으로 다가오면 영화적인 카메라 표현을 빼고 난간 모서리처럼 명확한 고정 기준점이 있는 레퍼런스를 쓰세요. 같은 시작·종료 이미지는 같은 구도를 유도할 뿐이며, 중간의 머리카락, 소매, 손은 다른 위치에서 끝날 수 있습니다.
한 클립으로 돌아오지 않을 때: 복귀 동작 생성하기
시작과 끝 이미지를 같게 하라는 조언이 일반적이지만 샷 중간은 여전히 달라질 수 있습니다. 더 제어하기 쉬운 방법은 두 클립입니다.
return_last_frame을 켜고 레퍼런스에서 클립 A를 생성하세요.- 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." - A와 B를 연결하세요. A의 마지막 프레임은 B의 첫 프레임이므로 B의 첫 프레임을 삭제하세요.
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두 클립의 비용을 냅니다(6 s, 720p에서 2 x $1.6638 = $3.3276). 두 연결 지점(A에서 B, B의 끝에서 A의 시작)을 아래 설명대로 확인해야 하지만, 두 클립 모두 루프 지점에서 원래 레퍼런스에 고정됩니다.
포즈뿐 아니라 움직임을 보며 연결 지점 찾기
편집기에서 후보 영상 복사본 두 개를 이어 놓고 경계를 정상 속도로 보세요. 다음에는 바깥쪽 어깨 같은 기준점 하나를 따라가며 경계 양쪽 약 다섯 프레임씩 한 프레임씩 살펴보세요. 호환되는 방향으로 계속 움직이나요?
어깨 위치가 같아도 첫 복사본이 왼쪽으로 움직이며 끝나고 두 번째가 오른쪽으로 빠르게 시작하면 튑니다. 되돌아오는 동작은 움직임이 느려지는 편안한 전환점 근처를 연결 지점으로 고르세요. 회전하는 물체처럼 연속적인 움직임도 위치와 방향을 모두 맞추세요.
배경 모서리로 카메라 움직임과 제스처를 구별하세요. 난간과 얼굴의 크기가 모두 바뀐다면 트리밍으로 카메라 전진을 없앨 수 없습니다. 연결 지점에서 눈꺼풀만 바뀐다면 눈을 깜박이는 부분을 피해 자르세요. 드레스 목선이 바뀌면 정상인 구간을 고르거나 다시 생성하세요. 디졸브는 서로 다른 의상 둘을 섞습니다.

Seedance 프레임이 아닌 설명도: 비슷한 포즈가 맞지 않는 움직임을 숨길 수 있습니다.
선택한 구간만 내보내세요. 이 예시는 1~5초를 남깁니다. 직접 고른 경계로 바꾸세요.
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를 반복 단위로 쓰세요.
작은 차이가 남으면 연결 지점 블렌딩하기
짧은 크로스페이드는 작은 밝기나 포즈 차이를 완화합니다. 사라진 물체를 되살리거나 얼굴이 이중으로 겹치는 현상을 막을 수는 없습니다. 아래 명령은 6초, 24 fps 클립의 마지막 0.5초를 처음 0.5초와 블렌딩해 루프의 마지막 프레임이 첫 프레임으로 바로 이어지게 합니다. 결과는 5.5초입니다.
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을 역방향으로 재생합니다. 짧은 정지를 만들 수 있는 중복 끝점 프레임은 제거합니다.
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 필터 문서).
영상이 완성된 뒤 소리 추가하기
무음 프로필 미리보기라면 루프를 음소거하세요. 환경음을 넣으려면 별도의 실내 소음 또는 도시 배경음 트랙을 여러 주기 아래에 깔고, 영상과 독립적으로 환경음 양 끝을 크로스페이드한 뒤 헤드폰으로 반복 구간을 들으세요. 부드러운 연결로 세 배 길이의 배경음을 만들려면 환경음 파일 하나의 복사본들을 크로스페이드하세요(연결할 때마다 결과가 1초 짧아집니다).
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의도한 효과가 아니라면 말을 역재생하거나 매 반복에 뚜렷한 소리 이벤트를 붙이지 마세요.
전달하기 전에 세 주기 파일을 실제 표시 크기로 확인해 카메라 리셋, 의상 튐, 이중 얼굴, 오디오 클릭이 있는지 보세요. 인물은 안정적이지만 배경의 한 부분이 루프되지 않으면 마스크를 쓴 시네마그래프가 대안입니다. 승인한 정지 인물 사진을 유지하고 별도의 커튼이나 빛 영역만 움직이세요. 이는 정적인 피사체 주변을 합성하는 방식이며, 생성한 연기가 끊김 없이 이어지는 것은 아닙니다.






