Veo 3.1은 Google의 현행 플래그십 영상 생성 모델로, Veo 라인의 최신 버전입니다.
- 입력
- 텍스트 이미지
- 출력
- 동영상
- 가격
- $0.4/s
벤치마크
Veo 3.1: 12개가 공개됐지만, 비교할 수 있을 만큼 여러 모델이 함께 측정한 벤치마크가 없습니다.
공급자 공개 자료: ByteDance
가격 수준 비교
같은 종류의 모델 5개 중 가격 위치
이 막대는 Synthorai에 있는 같은 종류의 모델 가운데 이 모델의 가격이 어디쯤인지 보여 줍니다. 양쪽 끝에는 가장 싼 모델과 가장 비싼 모델의 이름이 있습니다. 기본 요율 기준이며 배치·리전·캐시 쓰기 할인은 가격 페이지에 있습니다.
사양 및 제한
동영상
| 해상도 | 720p / 1080p 고정된 선택지이며 범위가 아닙니다. |
|---|---|
| 길이 | 4 / 6 / 8 s 고정된 선택지이며 범위가 아닙니다. |
| 프레임 레이트 | 24 fps |
| 화면 비율 | 16:9 · 9:16 |
| 동영상 입력 | 텍스트 기반 영상 생성 · 첫 프레임 및 첫/마지막 프레임 이미지 기반 영상 생성(가이드 이미지 최대 2장) |
| 네이티브 오디오 | 지원, 사운드까지 생성 |
| 포맷 | .mp4 |
모델
| 모달리티 | 텍스트 + 이미지 → 동영상 |
|---|
- Veo 라인의 현행 플래그십인 Google의 Veo 3.1 영상 모델: 텍스트 기반 영상 생성, 첫 프레임 이미지 기반 영상 생성, 첫
- 마지막 프레임 보간(가이드 이미지 최대 2장) 모두 네이티브 동기화 오디오(대사, 환경음, 음악)와 함께 지원
- 720p/1080p, 24 fps, 4/6/8초, 16:9 및 9:16
- generateAudio 스위치로 사운드 온과 무음 출력을 선택합니다. Veo 3.1은 Veo 3보다 오디오-비주얼 동기화와 참조 이미지 충실도를 끌어올렸습니다. Synthorai는 비동기 /v1/videos 작업 API로 제공하며(작업을 생성한 뒤 폴링하거나 Prefer: wait로 요청을 열어 둔 채 서명된 영상 URL이 준비될 때까지 기다립니다), 사운드 온과 무음에 각각 다른 요율로 출력 초 단위 과금합니다
출처: Google 공식 문서 ↗
프롬프트 하나, 게이트웨이를 거쳐 측정
Veo 3.1
모델이 반환한 크기 1280×720 길이 8s 지연 시간 63 s
프롬프트 하나에 모델당 요청 한 번, 재시도도 골라내기도 없이 각 모델이 처음 반환한 결과입니다. 크기와 길이는 고정하지 않고 모델마다 기본값을 그대로 썼습니다. 모든 모델에 맞춘 요청은 어느 모델의 장점도 살리지 못하기 때문입니다. 여기 있는 파일은 웹용으로 다시 인코딩한 것이므로, 압축 품질이 아니라 구도와 프롬프트 반영 정도를 보고 판단하세요.
30초 만에 Veo 3.1 사용하기
비동기 작업 API입니다. 작업을 만든 뒤 폴링하거나, Prefer: wait로 연결을 유지한 채 완료를 기다립니다. POST /v1/videos
import time
import requests
BASE = "https://synthorai.io/v1"
HEADERS = {"Authorization": "Bearer sk-syn-..."}
# 1) create the video generation job (POST /v1/videos)
task = requests.post(
f"{BASE}/videos",
headers=HEADERS,
json={
"model": "veo-3.1-generate-001",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5,
},
).json()
# 2) poll the job until it reaches a terminal state
while task["status"] in ("queued", "in_progress"):
time.sleep(5)
task = requests.get(f"{BASE}/videos/{task['id']}", headers=HEADERS).json()
# 3) completed → signed video URL (valid ~24h - download and store it promptly)
if task["status"] == "completed":
print(task["data"][0]["url"])
else:
print(task["error"])const HEADERS = {
Authorization: "Bearer sk-syn-...",
"Content-Type": "application/json",
};
interface VideoTask {
id: string;
status: "queued" | "in_progress" | "completed" | "failed" | "cancelled";
data?: Array<{ url: string }>;
error?: { code: string; message: string };
}
// 1) create the video generation job (POST /v1/videos)
const created = await fetch("https://synthorai.io/v1/videos", {
method: "POST",
headers: HEADERS,
body: JSON.stringify({
model: "veo-3.1-generate-001",
prompt: "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
resolution: "720p",
duration: 5,
}),
});
let task = (await created.json()) as VideoTask;
// 2) poll the job until it reaches a terminal state
while (task.status === "queued" || task.status === "in_progress") {
await new Promise((r) => setTimeout(r, 5000));
const res = await fetch(`https://synthorai.io/v1/videos/${task.id}`, { headers: HEADERS });
task = (await res.json()) as VideoTask;
}
// 3) completed → signed video URL (valid ~24h — download and store it promptly)
if (task.status === "completed") console.log(task.data?.[0]?.url);
else console.error(task.error);# Create the job; "Prefer: wait" holds the request up to 60s and returns the
# completed task when generation finishes in time (else the queued task).
curl https://synthorai.io/v1/videos \
-H "Authorization: Bearer sk-syn-..." \
-H "Content-Type: application/json" \
-H "Prefer: wait=60" \
-d '{
"model": "veo-3.1-generate-001",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5
}'
# Still queued / in_progress? Poll until completed → data[0].url (valid ~24h).
curl https://synthorai.io/v1/videos/vid_9f2e8c1a4b7d \
-H "Authorization: Bearer sk-syn-..."package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
const base = "https://synthorai.io/v1"
type videoTask struct {
ID string `json:"id"`
Status string `json:"status"`
Data []struct {
URL string `json:"url"`
} `json:"data"`
}
func call(method, url string, body []byte) (t videoTask) {
req, _ := http.NewRequest(method, url, bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer sk-syn-...")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
json.NewDecoder(resp.Body).Decode(&t)
return t
}
func main() {
// 1) create the video generation job (POST /v1/videos)
payload, _ := json.Marshal(map[string]any{
"model": "veo-3.1-generate-001",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5,
})
task := call("POST", base+"/videos", payload)
// 2) poll the job until it reaches a terminal state
for task.Status == "queued" || task.Status == "in_progress" {
time.Sleep(5 * time.Second)
task = call("GET", base+"/videos/"+task.ID, nil)
}
// 3) completed → signed video URL (valid ~24h — download and store promptly)
if task.Status == "completed" {
fmt.Println(task.Data[0].URL)
}
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
// JDK built-in HttpClient — no extra dependency needed.
HttpClient http = HttpClient.newHttpClient();
// 1) create the job; "Prefer: wait=60" holds the request up to 60s and
// returns the completed task when generation finishes in time
HttpRequest create = HttpRequest.newBuilder(URI.create("https://synthorai.io/v1/videos"))
.header("Authorization", "Bearer sk-syn-...")
.header("Content-Type", "application/json")
.header("Prefer", "wait=60")
.POST(HttpRequest.BodyPublishers.ofString("""
{"model": "veo-3.1-generate-001",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p", "duration": 5}"""))
.build();
String task = http.send(create, HttpResponse.BodyHandlers.ofString()).body();
System.out.println(task); // {"id":"vid_…","status":…} — completed → data[0].url
// 2) still queued / in_progress? Poll GET https://synthorai.io/v1/videos/{id} until the
// status turns completed, then download data[0].url (valid ~24h).Veo 3.1 소개
- 텍스트 프롬프트에서, 첫 프레임 이미지에서, 또는 두 장의 가이드 이미지 사이의 첫/마지막 프레임 보간으로 .mp4 클립을 생성하며, 모두 네이티브 동기화 오디오, 즉 립싱크가 맞는 대사, 환경음, 음악을 포함합니다.
- 출력은 720p, 1080p 또는 4K, 24 fps, 4·6·8초 길이, 16:9 또는 9:16이고, generateAudio 스위치로 사운드 온과 무음 출력을 선택합니다.
- Veo 3를 넘어, 캐릭터나 제품, 장소를 여러 컷에 걸쳐 이어 가기 위한 에셋 참조 이미지를 최대 3장까지 더했고(참조 기반 클립은 8초로 고정됩니다), 1-30초 길이의 기존 클립을 호출당 7초씩 이어 가는 영상 확장을 추가해 더 긴 시퀀스는 한 번에 길게 생성하는 대신 이어 붙여 만듭니다.
- Google은 이 세대에서 요청 쿼터도 5배 올렸습니다.
- 요청은 호출당 최대 4개 영상, 시드, 네거티브 프롬프트, 카메라 모션 선택, 최적화 또는 무손실 압축을 받으며 출력에는 Content Credentials가 삽입됩니다.
- Synthorai는 비동기 /v1/videos 작업 API로 이 모델을 서빙하며 사운드 온과 무음 생성에 대해 별도 단가로 출력 초 단위로 과금합니다.
- 작업을 생성한 뒤 서명된 영상 URL이 준비될 때까지 폴링하거나 Prefer: wait로 요청을 열어 두면 됩니다.
자주 묻는 질문
Veo 3.1 API는 무료로 사용해 볼 수 있나요?
네. 신규 계정에는 체험 호출 10회와 최대 $1의 무료 크레딧을 드리며, 카드 등록은 필요 없습니다. 결제 수단을 추가하기 전에 실제 워크로드로 Veo 3.1을 충분히 시험해 볼 수 있는 양입니다.
Veo 3.1은 어떤 작업에 가장 강한가요?
네이티브 오디오를 갖춘 현행 Veo 플래그십, 첫/마지막 프레임 이미지 기반 영상 생성, 가이드 최대 두 장, 사운드·무음 출력을 별도 단가로. 자세한 내용은 공급자의 공식 릴리스 노트를 바탕으로 정리한 소개 섹션에서 확인하세요.
Veo 3.1 가격은 얼마인가요?
Synthorai에서 Veo 3.1 가격은 생성한 동영상 1초당 $0.4입니다. 생성에 성공한 경우에만 과금됩니다. 종량제이며 플랫폼 마진도, 구독도 없습니다.
Veo 3.1 API로 동영상을 어떻게 생성하나요?
Synthorai의 /v1/videos로 POST 요청(model="veo-3.1-generate-001")을 보내 비동기 작업을 만듭니다. 그런 다음 작업을 폴링하거나, Prefer: wait 헤더로 연결을 유지한 채 기다리면 동영상 URL을 받을 수 있습니다. 공급자 SDK는 필요 없습니다.
Veo 3.1은 어떻게 이용하나요?
쓰던 OpenAI SDK에서 base_url="https://synthorai.io/v1", model="veo-3.1-generate-001"만 지정하면 됩니다. API 키 하나로 게이트웨이의 모든 모델을 쓸 수 있습니다.
관련 모델
비교
이 페이지의 모든 값은 공급자 공식 문서(위 링크)에서 그대로 옮겨 적었으며, 확인한 날짜를 함께 표기합니다. 가격은 카탈로그 전체와 비교해 보여 주지만, 공급자마다 정의가 다른 사양 값은 차이만 밝히고 차트로 비교하지 않습니다. 저희가 직접 측정한 수치는 없고, 점수도 매기지 않습니다.