Veo 3.1 Fast vs Veo 3.1
Qual usar e quando
Mesma geração e mesma ficha técnica - 720p/1080p, 4/6/8 s a 24 fps, até duas imagens-guia, áudio nativo - então a diferença é puramente a tarifa: a variante fast cobra $0.15 por segundo de saída com áudio e $0.1 no silencioso, contra $0.4 e $0.2, cerca de 2.7x e 2x menos. As duas expõem a tarifa silenciosa, o caminho mais barato se você pretende sonorizar por conta própria. Com essa paridade de especificações, a variante fast é a escolha padrão.
Benchmarks
Veo 3.1 Fast: o provedor não publicou resultados de benchmark.
Veo 3.1: 12 publicados, mas nenhum benchmark em comum com modelos suficientes para comparar.
Publicado pelos provedores: ByteDance
Preços
| Veo 3.1 Fast | Veo 3.1 | Δ | |
|---|---|---|---|
| Por segundo de saída (com áudio) | $0.15 | $0.4 | 0.37× |
| Por segundo de saída (sem áudio) | $0.1 | $0.2 | 0.5× |
Tarifas do catálogo em tempo real, lidas no momento do build; a página de cada modelo traz a tabela de preços atual.
Onde cada um fica: preço por segundo de saída entre os 7 modelos de geração de vídeo com esta unidade de cobrança (escala logarítmica)
Capacidades
| Veo 3.1 Fast | Veo 3.1 | |
|---|---|---|
| Áudio nativo | sim | sim |
Especificações
| Veo 3.1 Fast | Veo 3.1 | |
|---|---|---|
| Modalidades de entrada | texto imagem | texto imagem |
| Modalidades de saída | vídeo | vídeo |
| Lançamento | 2025-10 | 2025-10 |
| Resolução | 720p / 1080p (conjunto fixo) | 720p / 1080p (conjunto fixo) |
| Duração do clipe | 4 / 6 / 8 s (conjunto fixo) | 4 / 6 / 8 s (conjunto fixo) |
| Taxa de quadros | 24 fps | 24 fps |
| Proporções de tela |
|
|
| Modos de entrada |
|
|
| Formato | .mp4 | .mp4 |
As especificações são transcritas da documentação de cada provedor; quando um provedor não publica um dado, a linha é omitida, e não inferida. Fontes completas: Veo 3.1 Fast · Veo 3.1
Um prompt, os dois modelos, medidos pelo gateway
Retornado pelo modelo 1280×720 Duração 8s latência 63 s
Retornado pelo modelo 1280×720 Duração 8s latência 63 s
Um prompt, uma requisição por modelo, sem novas tentativas e sem escolher o melhor resultado: é o primeiro que cada modelo retornou. Nem o tamanho nem a duração foram fixados; cada modelo usou seu próprio padrão, porque uma requisição ajustada para servir a todos não mostraria o melhor de nenhum. Os arquivos foram recodificados para a web, então avalie a composição e a aderência ao prompt, e não a compressão.
Troque de um para o outro mudando uma linha
Os dois ids estão em todas as abas abaixo; o par de linhas destacado é a única alteração. O endpoint, a chave e o formato da requisição são os mesmos.
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-fast-generate-001",
# "model": "veo-3.1-generate-001", # descomente esta linha, comente a linha acima
"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-fast-generate-001",
// model: "veo-3.1-generate-001", // descomente esta linha, comente a linha acima
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-fast-generate-001",
# "model": "veo-3.1-generate-001", # descomente esta linha, comente a linha acima
"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-fast-generate-001",
// "model": "veo-3.1-generate-001", // descomente esta linha, comente a linha acima
"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-fast-generate-001",
// {"model": "veo-3.1-generate-001", // descomente esta linha, comente a linha acima
"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).Perguntas frequentes
Qual é mais barato, Veo 3.1 Fast ou Veo 3.1?
Veo 3.1 Fast sai mais barato na linha “Por segundo de saída (com áudio)” ($0.15 contra $0.4, 2.7× de diferença). Outras linhas podem pender para o outro lado: a tabela acima mostra todos os preços, e o custo real depende do seu mix de uso.
Posso fazer um teste A/B de Veo 3.1 Fast contra Veo 3.1 sem duas integrações?
Sim. Os dois são servidos pelo mesmo endpoint compatível com OpenAI, com uma única chave de API. Para trocar, basta mudar uma linha, a string do modelo; assim você pode direcionar uma parte do tráfego para cada um e comparar as contas diretamente.
Quais durações de clipe e resoluções eles suportam?
A tabela de especificações acima traz as resoluções e durações de clipe publicadas de cada modelo e indica se um valor é um conjunto fixo de opções ou um intervalo contínuo. Os dois parecem iguais, mas pesam de forma diferente no preço, já que a cobrança por segundo é multiplicada pela duração.