Convertir vídeo a GIF sin pérdida de calidad. Entrada super breve con un par de comandos que he descubierto recientemente para convertir video a GIF sin pérdida calidad.
El caso es que últimamente estoy generando algunos GIFs a partir de capturas de pantalla del ordenador generadas con Quicktime. Videos en .MOV o .MP4 que luego quiero convertir en GIF para compartir en Twitter, sin pérdida de calidad, sin tirones, preservando los colores, etc.
Convertir vídeo a GIF sin pérdida de calidad
Yo estoy usando ffmpeg sobre MacOS (instalado con macports), aunque si no me equivoco está disponible para cualquier sistema operativo.
Para conseguir la mayor calidad posible, hay que generar el GIF utilizando una paleta de color que sea representativo del vídeo que queremos convertir.
ffmpeg permite crear una paleta de color del vídeo con este comando:
Terminal: ~
$
|
|
Donde input.mp4 es el vídeo del que queremos obtener la paleta.
Lo importante aquí son los parámetros -ss (start second) y -t (duración en segundos del fragmento) que nos permiten seleccionar la porción del vídeo que mejor representa los colores que va a tener el GIF final.
Si por el contrario queremos generar la paleta a partir de todo el contenido del vídeo, no utilizar dichos parámetros (-ss y -t).
Una vez tenemos generada la paleta, entonces generamos el GIF con el siguiente comando:
"ffmpeg -i input.mp4 -i palette.png -filter_complex "fps=50,scale=640:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif"
Donde input.mp4 es el vídeo que queremos convertir a GIF sin pérdidas y palette.png es la paleta que hemos obtenido con el comando anterior.
Importante: algunas plataformas (como Twitter) tienen un límite en cuanto al tamaño de los GIFs que puedes publicar (15MB en el caso de Twitter), así que para reducir el tamaño del GIF hay dos opciones, jugar con la duración del mismo, reducir el frame rate (normalmente con 20 o 30 frames por segundo debería ser suficiente) o reducir el tamaño en píxeles del GIF.









Desde el punto de vista de la eficiencia, lo ideal es integrar estos comandos en un pequeño script (incluso vía PHP con shell_exec) para procesar archivos por lotes sin intervención manual. Esto permite mantener la calidad «top» sin perder tiempo repitiendo los comandos en la terminal cada vez. BASH Guión: v2gif.sh
#!/bin/bash# Script para convertir video a GIF con alta calidad (Optimizando paleta de colores)
# Diseñado para un entorno ligero: sin dependencias pesadas, solo FFmpeg.
# Comprobar si se ha pasado el archivo de entrada
if [ -z "$1" ]; then
echo "Uso: ./v2gif.sh archivo_entrada.mp4 [ancho_en_px]"
exit 1
fi
ENTRADA="$1"
ANCHO="${2:-480}" # Ancho por defecto 480px si no se especifica
SALIDA="${ENTRADA%.*}.gif"
PALETA="/tmp/paleta_temp.png"
# Configuración de FPS y escalado (usando filtro Lanczos para máxima nitidez)
FILTROS="fps=15,scale=$ANCHO:-1:flags=lanczos"
echo "Procesando: $ENTRADA..."
# 1. Generar una paleta de colores optimizada para este video específico
# Esto evita el ruido visual y los gradientes de baja calidad.
ffmpeg -v warning -i "$ENTRADA" -vf "$FILTROS,palettegen" -y "$PALETA"
# 2. Generar el archivo GIF final aplicando la paleta
ffmpeg -v warning -i "$ENTRADA" -i "$PALETA" -filter_complex "$FILTROS [x]; [x][1:v] paletteuse" -y "$SALIDA"
# 3. Limpieza de archivos temporales
rm "$PALETA"
# Opcional: optimización extra si tienes gifsicle instalado
# gifsicle -O3 "$SALIDA" -o "$SALIDA"
echo "¡Listo! El GIF ha sido creado: $SALIDA"