Ir al contenido
OneKitly

Sacar fotogramas fijos de un vídeo — y por qué se ven más blandos que el vídeo

Publicado el 10/8/2026 · 12 min de lectura · Herramientas de archivos

Daniel Okonkwo

Daniel OkonkwoDesarrollador front-end y redactor de Tecnología en OneKitly

Rendimiento web · Formatos de archivo

Verificado con 4 fuentes

Ver perfil
En resumen

El extractor de fotogramas ejecuta ffmpeg dentro de tu navegador y construye una de tres órdenes. Un fotograma: -ss <segundos> -i <archivo> -frames:v 1 -q:v 2. El salto va antes de la entrada, así que ffmpeg va al fotograma clave anterior más cercano y decodifica hacia delante hasta tu instante. Un número fijo de fotogramas: -i <archivo> -vf fps=<número dividido entre la duración> -frames:v <número>, que los reparte de forma regular por todo el clip. Un fotograma cada N segundos: -i <archivo> -vf fps=<1 dividido entre N> -frames:v <número>. El JPG se escribe con -q:v 2, el segundo mejor peldaño de la escala MJPEG que va de 2 a 31; el PNG no lleva ningún indicador de calidad, porque es sin pérdida. Elijas el modo que elijas, la herramienta se detiene en 60 fotogramas y lo dice en pantalla antes de empezar. Dos cosas antes de fiarte de la imagen. Primera: un fotograma no es una fotografía. El vídeo guarda una imagen completa solo en los fotogramas clave, normalmente uno cada uno a diez segundos, y reconstruye todo lo demás a partir de listas de diferencias. Saca un fotograma de en medio de esa serie y obtienes la reconstrucción del decodificador, más blanda y más cuadriculada que una foto a la misma resolución; los fotogramas clave son la excepción y sí son nítidos. Segunda: los botones de anchura son topes, no objetivos. Se convierten en scale=w='min(W,iw)':h=-2, así que un botón significa «como mucho esta anchura»: pide menos que el original y lo obtienes, pide más y el fotograma vuelve a su propio tamaño. Un clip vertical de 1080x1920 al que se le piden 1280 sale en 1080x1920, intacto, porque ampliar un fotograma no inventa nada y solo engorda el archivo.

Tres órdenes se esconden tras tres botones: un fotograma en un instante dado, un número fijo repartido por el clip, o uno cada N segundos. Aquí están los argumentos exactos, el techo de 60 fotogramas y la razón de que un fotograma sacado del medio de un clip comprimido nunca sea tan nítido como un fotograma clave.

Tres botones, tres órdenes de ffmpeg distintas

La interfaz ofrece un número de fotogramas, un intervalo o un único instante, y cada uno arma una orden distinta. «Un número de fotogramas» divide la cifra que escribiste entre la duración del clip y pasa el resultado al filtro fps: pide 12 fotogramas de un clip de 6 segundos y el filtro queda en fps=2.000000, con -frames:v 12 para detenerlo ahí. «A intervalo regular» invierte el intervalo — un fotograma cada 5 segundos da fps=0.200000 — y calcula la cifra a partir de la duración. «Un solo fotograma» se salta el filtro por completo y usa -ss antes de la entrada con -frames:v 1.

Esa colocación importa más de lo que parece. Poner -ss antes de -i permite a ffmpeg saltar directamente a un punto de búsqueda en vez de decodificar todo el archivo hasta tu instante, y eso es la diferencia entre una fracción de segundo y una espera larga en un clip grande. Un consejo antiguo dice que un salto de entrada solo es preciso al fotograma clave; dejó de ser cierto hace años, y esta versión salta con precisión por defecto cuando transcodifica: decodifica el tramo corto entre el punto de búsqueda y tu instante y lo tira. El fotograma que ves en el deslizador de vista previa es el que obtienes.

Un fotograma no es una fotografía

Todo códec de vídeo moderno guarda imágenes completas solo de vez en cuando. Son los fotogramas clave, y todo lo que hay entre ellos se escribe como instrucciones: este bloque se movió cuatro píxeles a la izquierda, esa zona es igual que antes, este trozo cambió en estas cantidades pequeñas. Una grabación de una hora a 30 fotogramas por segundo contiene 108 000 fotogramas pero quizá solo unos miles de imágenes completas. Cuando pides el fotograma de los 47,3 segundos, el decodificador busca el último fotograma clave anterior y reproduce todas las instrucciones desde ahí para reconstruir lo que debería verse.

La reconstrucción es lo bastante fiel para verse y decepcionante al congelarla. Como el codificador gastó sus bits en lo que cambia, un fondo quieto que lleva dos segundos sin refrescarse carga con dos segundos de aproximación acumulada. Un desenfoque de movimiento que se lee como movimiento a 30 fotogramas por segundo se lee como un borrón cuando te paras en él. Y cualquier bloque que el codificador decidió que nadie miraría de cerca — zonas oscuras, zonas desenfocadas, barridos rápidos — es justo donde el cuantificador ahorró. Por eso un fotograma sacado de un clip muy comprimido se ve más blando que una fotografía de la misma escena con el mismo recuento de píxeles.

Los fotogramas clave son la excepción y vale la pena buscarlos. Si la imagen importa — una matrícula, una cara, un marcador — extrae varios fotogramas alrededor del instante en vez de uno. En una tanda de diez fotogramas seguidos, uno suele ser un fotograma clave o estar cerca, y se verá claramente más limpio que sus vecinos. Los modos de intervalo y de número lo facilitan: nunca te dejan señalar un fotograma clave directamente, pero un muestreo bastante denso acaba cayendo en uno.

Los botones de anchura son topes, no objetivos

Cuatro botones ofrecen Original, 640, 1280 y 1920. Elige uno y la cadena de filtros recibe scale=w='min(W,iw)':h=-2, que limita la anchura a ese número y deja que ffmpeg calcule una altura que conserve la forma, redondeada al par más cercano. La palabra que importa es «limita». En un clip de 1920x1080 el botón 1280 da 1280x720, justo lo que esperas. En un clip vertical de 1080x1920 el mismo botón da 1080x1920 — el original, intacto — porque 1280 es más ancho que el clip y la herramienta se queda con el menor de los dos.

Ese tope merece la pena porque ampliar un fotograma no aporta nada. El escalado no puede inventar detalle: interpola, así que la imagen se vuelve más grande y más pesada sin volverse más nítida — más blanda, de hecho, porque la interpolación alisa el poco detalle que sobrevivió a la compresión de vídeo. Sin el tope los botones se leen como objetivos, y un clip vertical al que se le pedían 1920 salía en 1920x3414: más del triple de píxeles que el original, todos adivinados. Si quieres una imagen mayor de la que el clip contiene, la respuesta no está aquí — está en una fuente grabada a más resolución.

Sesenta fotogramas — y el techo no significa lo mismo en los dos modos

La herramienta no produce más de 60 fotogramas por tanda, y lo dice antes de empezar: pide 500 y la línea bajo los botones de modo pasa a 60 y añade un aviso. Hasta ahí, honesto. Lo que el aviso no dice es que el techo se comporta distinto en los dos modos por lotes, y esa diferencia decide si obtienes un repaso de todo el vídeo o solo de su comienzo.

En modo «número», la tasa de muestreo sale de la duración: 60 fotogramas de una grabación de veinte minutos da fps=0.050000, así que caen cada veinte segundos de principio a fin. En modo «intervalo», la tasa sale de tu intervalo y el número es solo una señal de parada: un fotograma por segundo en esa misma grabación de veinte minutos da fps=1.000000 con -frames:v 60, y ffmpeg se detiene tras sesenta segundos de metraje. Obtienes el primer minuto del vídeo, sesenta veces, y nada de los diecinueve restantes. La cifra en pantalla dice la verdad sobre cuántos archivos tendrás; no dice nada sobre de dónde salen. Si quieres cobertura, usa el modo «número».

Una cosa más que la interfaz cuenta mal de sí misma. La nota bajo los botones afirma que cada fotograma es una descarga aparte y que no hay archivo comprimido para agruparlos. Sí lo hay: el botón «Descargar todo» reúne los fotogramas en images-video.zip siempre que haya más de uno, y pide permiso al navegador una sola vez. Los botones de descarga individuales bajo cada miniatura están para cuando quieres dos fotogramas de sesenta, no porque la herramienta no sepa comprimir.

Para qué sirven de verdad los fotogramas

Tres usos cubren casi todo aquello para lo que la gente extrae fotogramas. La hoja de contactos: de doce a veinticuatro fotogramas repartidos por todo el clip, impresos pequeños, es la forma más rápida de encontrar dónde pasa algo en una hora de metraje sin ir arrastrando. El modo «número» con la anchura en 640 está hecho para eso. La miniatura: las plataformas juzgan un vídeo por su primera imagen fija, y la elección automática casi siempre es peor que la tuya. Usa el modo de un solo fotograma, arrastra el deslizador hasta que la vista previa muestre el fotograma que quieres, y extrae con la anchura Original. Y la prueba: un instante que hay que enseñar a alguien que no va a ver el vídeo.

Para ese tercer uso, elige PNG y no toques la anchura. Un JPG a -q:v 2 es muy bueno, pero es una segunda generación con pérdida encima de la compresión del propio vídeo, y quien examine la imagen de cerca estará mirando artefactos de dos codificadores en vez de uno. El PNG guarda exactamente lo que produjo el decodificador, los archivos pesan de cinco a quince veces más, y no se añade nada. La imagen seguirá siendo una reconstrucción y no una fotografía — ningún formato arregla eso — pero al menos esa reconstrucción será la única aproximación que contenga.

Lo que hace cada botón de anchura con tres formatos de origen habituales (scale=w='min(W,iw)':h=-2, altura redondeada al par más cercano)
Botón de anchuraDesde 1080×1920 (móvil, vertical)Desde 1920×1080 (apaisado)Desde 3840×2160
Original1080×1920 sin cambios1920×1080 sin cambios3840×2160 sin cambios
640 px640×1138 — 65 % menos píxeles640×360 — 89 % menos píxeles640×360 — 97 % menos píxeles
1280 px1080×1920 sin cambios — limitado1280×720 — 56 % menos píxeles1280×720 — 89 % menos píxeles
1920 px1080×1920 sin cambios — limitado1920×1080 sin cambios1920×1080 — 75 % menos píxeles
Extraer fotogramas de un vídeoExtrae imágenes fijas de un vídeo: una elegida con el deslizador y vista antes de extraer, un número fijo, o una cada pocos segundos.Probar la herramienta

Preguntas frecuentes

¿Elijo JPG o PNG?
JPG para todo lo que vayas a mirar, compartir o pegar en un documento: la herramienta lo escribe a -q:v 2, el segundo mejor ajuste de una escala que va de 2 a 31, y los artefactos que añade son mucho más discretos que los que ya trae el vídeo. PNG para todo lo que se vaya a examinar, ampliar o discutir, porque no añade nada: guarda la salida del decodificador byte a byte. Cuenta con archivos PNG de cinco a quince veces el tamaño del JPG equivalente. No hay control de calidad para ninguno de los dos: el nivel JPG está fijado en el código y el PNG no tiene nivel que ajustar.
¿Por qué mi fotograma sale más borroso de lo que se veía el vídeo?
Porque el movimiento esconde la compresión y la quietud la revela. A 30 fotogramas por segundo, tu ojo integra treinta aproximaciones por segundo y lee el resultado como una escena nítida; párate en una de ellas y solo queda la aproximación. Además, el fotograma que elegiste probablemente no sea un fotograma clave: es una reconstrucción levantada sobre una cadena de instrucciones de diferencia. Prueba a extraer una ráfaga corta alrededor del mismo instante y compara: uno será claramente más limpio, y ese está en un fotograma clave o muy cerca.
¿Puedo sacar absolutamente todos los fotogramas del vídeo?
En una tanda no: el techo son 60 fotogramas, algo más de dos segundos de metraje a 25 fotogramas por segundo. Ese techo no es arbitrario: sesenta imágenes a plena resolución ya suponen decenas o cientos de megabytes retenidos a la vez en la memoria del navegador, y una pestaña tiene mucho menos sitio que un programa de escritorio. Si de verdad necesitas todos los fotogramas de un pasaje corto, recorta primero el clip a los segundos que te importan y luego usa el modo de intervalo con un intervalo igual a la duración de un fotograma — uno dividido entre la frecuencia del clip, o sea 0,04 para un clip a 25 fotogramas por segundo. Pedir menos no aporta nada: el filtro fps no tiene fotogramas de sobra que dar y se limita a repetir los que tiene. Seguirás parando en sesenta, pero serán sesenta fotogramas seguidos y no una muestra.
¿Se sube mi vídeo a alguna parte?
No. El decodificador es ffmpeg compilado a WebAssembly y servido por este mismo sitio en lugar de por una red de distribución, y funciona dentro de la pestaña. Tu archivo se lee en la memoria de la propia página, se procesa ahí, y los fotogramas resultantes se te devuelven como descargas. Nada sale de la máquina, y por eso también un clip largo lleva su tiempo: un único hilo del navegador hace un trabajo que un ordenador de escritorio repartiría entre todos sus núcleos.
¿Por qué un fotograma por segundo solo me da el principio de un vídeo largo?
Porque el modo de intervalo fija la tasa de muestreo y luego se detiene en el techo de 60 fotogramas. Un fotograma por segundo es fps=1.000000, y -frames:v 60 detiene ffmpeg tras el sexagésimo fotograma de salida, es decir a los sesenta segundos del original. Todo lo posterior al primer minuto no se alcanza nunca. El modo «número» no se comporta así: deduce la tasa de la duración total, así que 60 fotogramas de una grabación de dos horas dan fps=0.008333 y caen cada dos minutos de principio a fin. Usa el modo «número» siempre que quieras ver el vídeo entero, y el de intervalo solo para el comienzo o para un clip ya recortado.

Artículos que podrían interesarte

Todas las guías
GuíaPor qué un GIF de tres segundos pesa más que el vídeo del que salióUn GIF no tiene compresión de vídeo de verdad: cada fotograma es una imagen entera, con un tope de 256 colores. Eso te da una aritmética que puedes hacer de cabeza — ancho por alto por número de fotogramas — y tres palancas que mover cuando la casilla de subida dice que el archivo pesa demasiado.GuíaQué resolución de vídeo elegir, y lo que cada peldaño cuesta en megabytesPasar de 1080p a 720p no parte la imagen por la mitad: quita el 56 % de los píxeles, y bastante menos que eso del archivo. Aquí está la escala con recuentos de píxeles reales, bitrates honestos y lo que pesan tres minutos en cada peldaño, más la razón de que una fuente de bitrate bajo apenas encoja.TutorialPoner un vídeo por debajo del límite de subida sin adivinarEl deslizador de calidad no sabe apuntar a un tamaño de archivo: no es su función. Pero el límite y la duración de tu clip ya fijan el bitrate que puedes gastar, y una división te dice si la resolución que usas puede siquiera caber.ExplicaciónRotar un vídeo 90° o 180°: el indicador o los píxelesHay dos maneras completamente distintas de girar un vídeo, y solo una toca la imagen. Esta herramienta toma la vía lenta, con pérdida y universal — y hay buenas probabilidades de que tu clip de móvil tumbado no la necesite en absoluto.ExplicaciónDe MOV a MP4: por qué el vídeo del iPhone no se abre en WindowsLa extensión casi nunca es el problema real. Un .mov y un .mp4 son primos de la misma familia de formatos, y lo que de verdad detiene el vídeo es el códec sellado dentro — casi siempre HEVC. Aquí está cómo distinguir los dos fallos, y cuándo basta con cambiar la caja.ExplicaciónPor qué tu corte de vídeo cae dos segundos antesPediste 1:23 y obtuviste 1:21. Nada está roto: un corte que no recodifica solo puede caer en un fotograma clave, y a qué distancia está el más cercano depende por completo de qué grabó el vídeo. Aquí está cómo saber cuál tienes y cuándo aceptar el desfase.

Herramientas relacionadas

Estas cuatro herramientas ejecutan ffmpeg en tu navegador: no se sube nada, y nada de esto depende de que un servidor siga en pie. El comportamiento descrito se leyó en el código de cada componente y luego se confirmó ejecutando los mismos arreglos de argumentos contra la compilación de ffmpeg que el sitio incorpora, así que vale para la versión que hoy está en línea, no para ffmpeg en general. Los tamaños y las cifras de sonoridad salen de archivos de prueba sintéticos y cortos; tu propio material dará otros números con las mismas órdenes. Donde el texto en pantalla de una herramienta y su código se contradicen, este artículo sigue al código.

Fuentes

¿Has detectado un error en este artículo?