Extraer fotogramas
Convierta un video en una secuencia de imágenes fijas sin abrir ningún editor: defina un intervalo, una cantidad de fotogramas o marcas de tiempo exactas, y reciba justo las imágenes que necesita. Está pensado para quien necesita miniaturas, muestras para un dataset o evidencia visual a escala, no un video a la vez de forma manual.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Por qué extraer fotogramas de forma programática
Los equipos que generan miniaturas para un catálogo de videos, arman datos de entrenamiento para un modelo de visión por computadora o necesitan un índice visual rápido de horas de grabación chocan siempre con el mismo límite: hacerlo a mano en un programa de edición no escala más allá de unos pocos archivos. El endpoint de api extraer fotogramas de video reemplaza ese trabajo manual con una sola llamada que devuelve exactamente las imágenes pedidas, en el orden solicitado.
Cómo se comporta una solicitud
Se llama a POST /video/frames con un enlace al video de origen y la regla de extracción: un intervalo fijo en segundos, una cantidad total de fotogramas repartidos de forma pareja a lo largo de la duración, o una lista de marcas de tiempo explícitas. La tarea entra en cola, se procesa de manera asíncrona y devuelve un task_id de inmediato; los fotogramas llegan después mediante un enlace firmado o, si prefiere no consultar el estado manualmente, mediante un webhook firmado en cuanto termina el trabajo.
Qué se recibe al final
Cada fotograma extraído llega como un archivo de imagen estándar, nombrado y ordenado para que pueda asociarlo directamente con su marca de tiempo en el video original. No se fuerza ningún redimensionamiento ni se agrega marca de agua; recibe los píxeles tal como existían en ese instante, listos para alimentar una grilla de miniaturas, un flujo de etiquetado o una cola de moderación.
Una breve nota sobre cómo funciona el muestreo de video
Un video no es más que una secuencia de fotogramas codificados que se muestran a suficiente velocidad como para parecer continuos; extraer un fotograma fijo implica decodificar hasta el punto más cercano solicitado, por lo que una solicitud basada en intervalo (por ejemplo, cada 2 segundos) suele ser más rápida y predecible que pedir cientos de marcas de tiempo arbitrarias dispersas en un archivo largo.
Dónde encaja dentro de un flujo automatizado
Como la llamada es asíncrona y se cobra únicamente si el trabajo tiene éxito, encaja sin fricción en una automatización más grande: un script que sube videos nuevos, llama a este endpoint, espera el webhook y entrega los fotogramas al siguiente paso, ya sea un selector de miniaturas, un detector de objetos o un panel de revisión manual.
Qué puede hacer con ella
Miniaturas generadas automáticamente
Una plataforma de video pide un fotograma cada 10 segundos por cada archivo nuevo y deja que una herramienta interna elija el más nítido como imagen de portada.
Datos de entrenamiento para visión por computadora
Un equipo que construye un modelo de detección de defectos extrae un fotograma cada 0.5 segundos de grabaciones de planta para armar un dataset de imágenes etiquetadas.
Captura de evidencia con marca de tiempo
Un flujo de cumplimiento extrae fotogramas en las marcas exactas señaladas por una transcripción de audio, para documentar qué se veía en pantalla cuando se dijo algo.
Vistas previas para storyboard
Un equipo de marketing extrae 12 fotogramas repartidos de forma pareja de un corte preliminar para armar un storyboard visual rápido para revisión del cliente, sin necesidad de software de edición.
Preguntas frecuentes
¿Cómo extraigo fotogramas de un video usando la API?
Envíe una solicitud POST a /video/frames con el origen del video y una regla de extracción (intervalo, cantidad de fotogramas o marcas de tiempo); recibe un task_id de inmediato y los fotogramas después por webhook o enlace firmado.
¿Hay un plan gratuito para probar la extracción de fotogramas?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿En qué formato de imagen recibo los fotogramas?
Los fotogramas se entregan como archivos PNG o JPG estándar en la resolución nativa del video de origen, salvo que se indique otra cosa.
¿Puedo extraer fotogramas en marcas de tiempo exactas en vez de un intervalo fijo?
Sí, puede enviar una lista de marcas de tiempo explícitas en la solicitud y el endpoint devolverá un fotograma por cada una.
¿Cómo se cobra la extracción?
Cuesta $0.077 por solicitud más $0.0045 por minuto de video procesado, publicado de antemano y sin sistema de créditos inventado.
¿Qué pasa si mi tarea falla?
Las tareas fallidas se reintentan automáticamente hasta tres veces; si aun así falla, recibe un error claro y nunca se cobra un trabajo fallido.
¿Cuánto tiempo tengo para descargar los resultados?
El enlace firmado es válido por 24 horas, y los archivos de origen y salida se eliminan tras el período de retención; nada se usa para entrenar modelos.
¿Este endpoint ya está disponible?
Está en despliegue final y todavía no acepta trabajos; estará disponible muy pronto bajo el mismo endpoint y el precio descritos aquí.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/video/frames \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"audio":"https://ejemplo.com/audio.mp3"}'const res = await fetch("https://api.kit.forhosting.com/video/frames", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"audio": "https://ejemplo.com/audio.mp3"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/frames",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"audio": "https://ejemplo.com/audio.mp3"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/frames", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"audio":"https://ejemplo.com/audio.mp3"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"audio":"https://ejemplo.com/audio.mp3"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/frames", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"audio": "https://ejemplo.com/audio.mp3"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.frames",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |