초대하고 적립

초대 보상 안내

초대 링크를 공유하세요. 친구가 링크로 가입하고 충전하면 이후 충전마다 표시된 보상을 받을 수 있습니다.

Gemini Omni 영상 연장·첫끝 프레임 보간: API 워크플로와 연속성 점검

짧은 클립의 끝을 연장하거나 두 키프레임 사이를 연결한 뒤 납품 전에 시각·음향 연속성을 확인하는 실무 가이드입니다.

목차
Gemini Omni 영상 연장·첫끝 프레임 보간: API 워크플로와 연속성 점검

짧은 영상이 동작 중간에 끊기거나 첫 이미지와 마지막 이미지만 있고 그 사이 움직임이 없다면, gemini-omni-1.1-flash로 끝에 3~10초를 이어 붙이거나 두 경계 이미지 사이를 보간할 수 있습니다. 이 글을 읽고 나면 모드 선택, API 호출, 납품 가능 여부 판단까지 할 수 있습니다.

기존 영상의 움직임·카메라·오디오를 이어 가려면 끝부분 연장, 시작과 끝이 정해져 있고 중간만 비어 있다면 첫·마지막 프레임 보간을 선택하고, MP4가 반환돼도 인물·움직임·접합부·오디오는 별도로 검수하세요.

영상을 연장할까, 두 프레임 사이를 보간할까?

원본 영상이 있으면 끝부분 연장을 먼저 쓰고, 특정 마지막 이미지에 정확히 도달해야 하면 보간을 먼저 쓰세요. 연장은 목표 마지막 프레임을 경계로 삼지 않으므로 잘못 선택하면 생성과 검수를 한 번 더 하게 될 수 있습니다.

작업입력적합한 용도특히 확인할 연속성
끝부분 연장영상 1개, 필요하면 참조 이미지동작·카메라 이동·장면을 몇 초 이어가기접합부의 자세, 속도, 카메라 방향, 조명, 오디오
첫끝 프레임 보간첫 프레임, 마지막 프레임, 전환 설명두 명확한 상태 사이의 움직임 채우기인물 동일성, 공간 관계, 이동 궤적, 목표 프레임 도달

업로드 영상 연장은 짧게 덧붙이는 작업에 맞습니다. 공식 가이드는 한 번에 3~10초, 프롬프트 가이드는 10초 단위로 전체 최대 40초까지 연장하는 흐름을 설명합니다. 업로드 클립은 10초 이하여야 하고 끝에만 추가할 수 있으므로, 앞이나 중간에 장면을 넣으려면 일반 편집기를 사용하세요.

API 호출 전에 네 가지를 먼저 정하세요

생성 전에 모델, 출력 규격, 컷 허용 여부, 비교할 원본을 고정하세요. 하나라도 정하지 않으면 작업을 다시 돌리거나 접합부 변화가 모델 때문인지 원본 때문인지 판단하기 어려워집니다.

정식 model ID를 사용하세요

정식 model ID gemini-omni-1.1-flash를 사용하세요. 이 모델은 2026년 8월 27일 정식 출시됐고, 기존 gemini-omni-flash-preview endpoint는 2026년 9월 30일 지원 종료 예정입니다.

먼저 720p에서 연속성을 확인하세요

첫 테스트는 기본값 720p로 진행해 연속성 문제와 고해상도 전달 문제를 분리하세요. response_format의 resolution은 360p, 720p, 1080p, 4k를 지원하고, 문서는 1080p와 4k를 업스케일 출력으로 설명하며 기본 화면비는 16:9이고 9:16도 요청할 수 있습니다. 4 MB보다 큰 결과, 특히 720p를 넘는 영상은 delivery="uri"를 사용하고 파일이 active가 된 뒤 내려받으세요.

연속 숏인지 의도적인 컷인지 정하세요

한 번에 이어지는 숏인지 의도적인 컷인지 정합니다. 연장 프롬프트에서 0s는 원본의 시작이 아니라 새로 생성되는 구간의 시작입니다. 끊기지 않아야 한다면 “single continuous shot”, “no scene cuts”를 분명히 씁니다. 컷이 필요하면 새 구간의 몇 초 지점인지 지정합니다.

원본 클립과 경계 이미지를 보관하세요

원본 클립과 두 경계 이미지를 보관합니다. 공식 프롬프트 가이드는 Omni가 원본의 마지막 10초를 문맥으로 쓰고 전환을 위해 입력의 마지막 일부 프레임을 수정할 수 있다고 설명합니다. 따라서 원본과 출력 비교는 선택이 아니라 연속성 점검의 일부입니다.

원본 영상이 있다면 끝에서 이어 생성하세요

이미 영상이 있고 동작, 카메라 이동, 장면을 몇 초 더 이어 가려면 끝부분 연장을 사용하세요. 먼저 최소한의 720p 요청을 성공시킨 다음 인물, 움직임, 카메라, 오디오 조건을 좁히세요.

최소 720p 연장 요청부터 실행하세요

아래 Python 예제는 Files API로 클립을 올리고 처리 완료를 기다린 뒤, 영상 URI와 지시를 interactions.create에 전달합니다. 720p로 시작하면 연속성을 먼저 고치고 고해상도 파일 전달은 나중에 처리할 수 있습니다.

import base64
import time
from google import genai

client = genai.Client()
video_file = client.files.upload(file="my_video.mp4")

while video_file.state == "PROCESSING":
    time.sleep(10)
    video_file = client.files.get(name=video_file.name)

if video_file.state == "FAILED":
    raise ValueError(video_file.state)

interaction = client.interactions.create(
    model="gemini-omni-1.1-flash",
    input=[
        {"type": "video", "uri": video_file.uri},
        {
            "type": "text",
            "text": (
                "장면을 끊기지 않는 하나의 롱테이크로 이어 주세요. "
                "같은 인물, 의상, 카메라 방향, 조명, 움직임 속도를 유지하고 장면 전환이나 새 대사를 넣지 마세요."
            ),
        },
    ],
    response_format={"type": "video", "resolution": "720p"},
)

with open("extended.mp4", "wb") as f:
    f.write(base64.b64decode(interaction.output_video.data))

프롬프트를 확인 가능한 조건으로 쓰세요

“장면을 계속해 달라”에서 끝내지 마세요. 인물에서 유지할 요소, 동작의 진행 방향, 카메라 이동, 조명·환경 변화 허용 여부, 컷·새 소리 허용 여부 등 최소 다섯 가지 관찰 가능한 항목을 씁니다. “오른손이 같은 속도로 계속 올라간다”는 검증할 수 있지만 “자연스럽게”는 어렵습니다.

모드가 잘못 선택될 때만 task를 지정하세요

프롬프트만으로 연장 모드가 선택되지 않으면 generation_config 아래 {"video_config": {"task": "extend"}}를 넣을 수 있습니다. 공식 가이드는 task가 더 엄격한 제약을 추가하므로 먼저 프롬프트를 권장합니다. 직전 턴에서 생성한 영상은 previous_interaction_id로 재업로드 없이 연장할 수 있습니다. 상태가 저장돼 있어야 하며, store=false로 만든 결과는 그 ID로 나중에 편집할 수 없습니다.

대사나 지역 제한에 걸리면 계획을 바꾸세요

대사와 지역 제한도 중요합니다. 사람이 이미 말하는 업로드 영상에는 현재 새 대사를 이어 붙일 수 없습니다. 말이 없는 후속 장면이나 새 대사를 요구하지 않는 프롬프트는 가능합니다. 모델 생성 영상을 previous_interaction_id로 여러 턴 연장할 때는 음성 생성이 지원됩니다. 업로드 영상의 편집·연장은 EEA, 스위스, 영국에서 제공되지 않지만 모델 생성 영상의 연장은 지원 지역에서 사용할 수 있습니다.

첫끝 이미지만 있다면 중간 움직임을 생성하세요

시작과 끝은 분명하지만 중간 움직임이 없을 때 첫·마지막 프레임 보간을 사용하세요. 두 이미지를 순서대로 넣고 인물, 카메라, 환경이 첫 상태에서 마지막 상태로 어떻게 이동할지 설명하세요.

두 경계 이미지를 먼저 제출하세요

시작과 끝 상태는 분명하지만 중간 움직임이 없을 때 적합합니다. 두 이미지를 순서대로 input에 넣고 인물, 카메라, 환경이 어떻게 이동할지 설명합니다. 아래 전체 예제는 로컬 JPEG를 Base64로 인코딩하고 720p를 요청합니다.

import base64
from pathlib import Path
from google import genai

client = genai.Client()

first_frame_b64 = base64.b64encode(Path("first.jpg").read_bytes()).decode()
last_frame_b64 = base64.b64encode(Path("last.jpg").read_bytes()).decode()

interaction = client.interactions.create(
    model="gemini-omni-1.1-flash",
    input=[
        {"type": "image", "data": first_frame_b64, "mime_type": "image/jpeg"},
        {"type": "image", "data": last_frame_b64, "mime_type": "image/jpeg"},
        {
            "type": "text",
            "text": (
                "첫 프레임에서 마지막 프레임까지 자연스럽게 전환해 주세요. "
                "인물의 동일성과 카메라 방향을 유지하고 움직임 궤적을 연속적으로 만들며 갑작스러운 컷을 피하세요."
            ),
        },
    ],
    response_format={"type": "video", "resolution": "720p"},
)

with open("interpolation.mp4", "wb") as f:
    f.write(base64.b64decode(interaction.output_video.data))

모드가 계속 잘못되면 image_to_video를 사용하세요

두 이미지를 순서대로 제출한 뒤 첫 번째가 시작이고 두 번째가 끝이라고 명확히 쓰세요. 그래도 모드가 잘못되면 image_to_video를 task 값으로 추가하되, 인물·카메라·움직임 설명을 대신하는 용도로 쓰지는 마세요.

차이가 클수록 변화 순서를 써 주세요

경계 프레임의 인물, 화면비, 카메라 축, 공간 배치가 어느 정도 일치하면 작업 정의가 쉬워집니다. 차이가 크면 “먼저 인물이 돌아서고, 다음에 카메라가 이동하며, 마지막에 조명이 변한다”처럼 순서를 씁니다. 이는 제작 방법이지 결과 보장이 아니므로 출력은 반드시 검수해야 합니다.

납품 가능한가? 접합부·인물·움직임·오디오를 확인하세요

기준은 “비슷해 보인다”가 아니라 결함을 정확히 지적하고 다음 생성 지시로 바꿀 수 있는가입니다. 정상 속도로 전체를 본 뒤 접합부를 저속 또는 프레임 단위로 확인하고, 오디오는 따로 들으세요.

항목확인 내용재생성에 쓸 수 있는 문장
인물얼굴, 머리, 의상, 액세서리, 신체 비율, 손, 소지품“코트 색과 오른손의 물건을 바꾸지 마세요.”
움직임방향, 속도, 균형, 접촉점, 시선, 카메라 궤적“현재 보폭으로 오른쪽 이동을 이어 가고 가속하거나 반전하지 마세요.”
편집·화면점프컷, 노출, 색온도, 심도, 원근, 배경 기하“같은 카메라 축과 초점거리를 유지하고 컷하지 마세요.”
오디오환경음, 음악 박자, 대사, 잔향, 음량, 클릭, 새 잡음“환경음을 이어 가고 대사를 추가하지 말며 박자를 유지하세요.”

연장은 접합부, 보간은 양 끝 도달 여부를 보세요

연장에서는 원본의 마지막 약 1초와 후속 구간의 첫 약 1초를 비교하고, 출력이 원본 끝 프레임을 바꿨는지도 확인합니다. 보간에서는 중간 경로뿐 아니라 시작이 첫 이미지에 대응하고 끝이 두 번째 이미지에 실제로 도달하는지 봅니다. 스타일만 비슷한 것은 충분하지 않습니다.

재생성할 때는 한 번에 한 변수만 강화하세요

재생성할 때는 한 번에 주요 변수 하나만 강화합니다. 인물, 움직임, 카메라, 오디오 순으로 고치면 지시의 효과를 판단하기 쉽습니다. “이음점에서 왼쪽 소매 색이 바뀐다”처럼 쓰고 “더 영화적으로” 같은 모호한 표현은 피합니다.

맞지 않는 작업에 이 endpoint를 억지로 쓰지 마세요

긴 영상 중간에 장면을 넣거나 기존 대사를 이어 가거나 여러 원본 클립을 함께 이해해야 한다면 이 endpoint는 한 번에 끝나는 편집기가 아닙니다. 아래 제한 중 하나라도 해당하면 숏 단위로 나누거나 일반 편집 워크플로로 먼저 전환하세요.

  • 업로드 클립은 끝에서만 연장할 수 있고 10초 이하여야 합니다.
  • 사람이 말하는 업로드 영상에 새 대사를 추가할 수 없으며 음성 편집 자체도 지원되지 않습니다.
  • 오디오 참조는 업로드할 수 없고 영상 참조의 오디오는 무시됩니다.
  • 영상 참조는 최대 3개, 각 3초까지이며 여러 영상을 가로지르는 추론은 지원되지 않습니다.
  • system instruction, temperature, top_p, stop sequence, 별도 negative prompt 필드는 지원되지 않습니다. 금지 사항은 일반 프롬프트에 씁니다.
  • 모든 생성 영상에는 보이지 않는 SynthID가 포함되고 입력·출력은 안전 필터를 거칩니다.
  • 문서는 영어 프롬프트를 완전히 지원한다고 명시하며 다른 언어는 평가되지 않아 결과가 달라질 수 있습니다.

실무에서는 짧은 숏을 따로 생성한 뒤 일반 편집기에서 조립하고 믹싱하는 편이 직접적입니다. 끝부분 연장 기능에 중간 삽입, 대사 연장, 여러 클립 추론까지 반복해서 요구하는 것보다 시간을 아낄 수 있습니다.

납품 전에 이 목록을 확인하세요

API 성공 응답은 품질 승인과 다릅니다. 납품 전에 다음을 확인하세요.

  • 입력 영상, 출력 영상, 두 경계 이미지를 보관했는지;
  • model ID, 해상도, 전체 프롬프트를 기록했는지;
  • 연장 접합부를 프레임 단위로 보고 원본 끝 프레임이 바뀌었는지 확인했는지;
  • 보간이 첫 이미지에서 시작해 실제로 두 번째 이미지에 도달하는지;
  • 오디오를 따로 들어 끊김, 클릭, 새 잡음이 없는지;
  • 지역, 입력 길이, 대사, 참조 미디어 제한을 확인했는지.

설명할 수 없는 항목이 있다면 API 상태만 보고 통과시키지 말고 먼저 수정하세요.

공식 자료

LLM 워크플로를 최적화할 준비가 되셨나요?

하나의 API로 모델을 연결하고 키와 AI 비용을 관리하세요.

무료로 시작하기