Cómo cambiar la cara en un GIF en local sin subirlo
Un GIF es una animación dentro de un contenedor de imagen, y las herramientas de face swap tratan esas dos cosas de forma distinta. Sabiendo eso, la ruta local es corta y totalmente repetible.

Respuesta rápida: Convierte el GIF a MP4, haz el face swap sobre el vídeo y reconstruye un GIF con el resultado. Todo se queda en tu equipo y los dos pasos de conversión son sendos comandos de ffmpeg. Además, así obtienes un GIF mejor que el que devuelven la mayoría de webs de GIF face swap, porque la paleta y la tasa de fotogramas las decides tú.
Casi todas las guías empiezan por un botón de subida. Lo que realmente decide el resultado son las dos conversiones de los extremos, no el modelo de intercambio.
Qué hace hoy Deep Face Cam con los GIF
Conviene tenerlo claro antes de empezar. El selector de archivos acepta .gif, pero la ruta de imagen lo trata como un fotograma fijo. Los formatos de exportación de imagen son PNG, JPG y BMP; el vídeo se exporta como MP4 o MKV. La importación y exportación de GIF animado no están disponibles en la build actual, así que todavía no hay un modo GIF de un clic. La ruta de abajo es el flujo local fiable hasta que llegue el soporte nativo.
1. Por qué un GIF no es simplemente «un vídeo corto»
Un GIF parece vídeo y se comporta como archivo de imagen. Ese desajuste es justamente la razón de que esto requiera un flujo y no un botón.
- Es un contenedor de imagen. Las herramientas que enrutan por extensión suelen mandar el GIF a su ruta de imagen fija y procesan solo el primer fotograma.
- Su paleta está limitada a 256 colores por fotograma. Ese límite está en el propio formato, y los degradados de piel son lo que peor tolera la cuantización de paleta.
- No tiene pista de audio, así que no se pierde nada al pasar por MP4 y volver.
- Es ineficiente. Un GIF de diez segundos puede pesar varias veces lo que el mismo clip en H.264.
- La duración se fija por fotograma, por lo que un GIF convertido a menudo no tiene una tasa de fotogramas limpia hasta que la estableces.
Nada de esto es un problema una vez que el GIF es temporalmente un MP4. El face swap se comporta entonces como cualquier otro vídeo corto, con el mismo ajuste y la misma revisión descritos en la guía de face swap de vídeo en local.
Usa solo material propio o con permiso claro: los GIF de reacción suelen ser metraje de una persona real identificable. Decide cómo se indicará que el resultado está alterado y no lo uses para suplantación, acoso ni imágenes íntimas no consentidas. Consulta la política de uso responsable.
2. El flujo local con GIF, de principio a fin
Cinco pasos, dos de ellos comandos de ffmpeg de una línea. Deep Face Cam incluye un binario de ffmpeg en sus builds de escritorio para su propia cadena de vídeo; los comandos de abajo ejecutan ffmpeg directamente desde una terminal, así que instálalo aparte si no está ya en tu PATH.
- Convierte el GIF de origen a MP4.
- Carga el MP4 como destino en la aplicación y define la cara de origen.
- Exporta el vídeo con la cara cambiada y revísalo antes de reconvertir.
- Genera una paleta de colores a partir del vídeo resultante.
- Codifica el GIF final con esa paleta.
3. Los comandos exactos
Paso 1 — GIF a MP4. El filtro de escala fuerza dimensiones pares, que es lo que exige H.264 con yuv420p:
ffmpeg -i input.gif -movflags faststart -pix_fmt yuv420p \
-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" input.mp4Paso 2 — face swap. Abre la aplicación, añade tu retrato de origen, pon input.mp4 como destino y exporta. Nada de este paso es específico de GIF; si el clip tiene más de una persona, usa el flujo de asignación de la guía multicara.
Paso 3 — genera una paleta a partir del resultado, para que el GIF reciba colores ajustados a este clip y no una tabla genérica:
ffmpeg -i swapped.mp4 \
-vf "fps=15,scale=480:-1:flags=lanczos,palettegen=stats_mode=diff" \
-y palette.pngPaso 4 — codifica el GIF con esa paleta. Mantén idénticos los valores de fps y scale del paso 3:
ffmpeg -i swapped.mp4 -i palette.png \
-lavfi "fps=15,scale=480:-1:flags=lanczos,paletteuse=dither=bayer:bayer_scale=5:diff_mode=rectangle" \
-y output.gif| Parámetro | Qué controla | Consejo práctico |
|---|---|---|
fps=15 | Tasa de fotogramas del GIF y, por tanto, su número. | El control de tamaño más eficaz. 12–15 suele bastar para un GIF de reacción. |
scale=480:-1 | Anchura de salida; la altura se ajusta sola. | Reducir la anchura a la mitad deja el número de píxeles en un cuarto. |
flags=lanczos | Calidad del remuestreo al escalar. | Déjalo puesto; a tamaño GIF el coste es insignificante. |
palettegen=stats_mode=diff | Pondera la paleta hacia las zonas que cambian entre fotogramas. | Buen valor por defecto para una cara en movimiento sobre fondo fijo. |
dither=bayer:bayer_scale=5 | Intensidad del patrón de tramado ordenado. | Archivos más pequeños y menos ruido entre fotogramas que la difusión de error. |
diff_mode=rectangle | Recodifica solo el rectángulo que cambia en cada fotograma. | Ahorro real cuando el fondo está quieto. |
4. El coste es el número de fotogramas, y lo eliges tú
Un face swap se cobra por fotograma, y el número de fotogramas de un GIF es duración por tasa. Por eso conviene fijar la tasa antes del intercambio y no después:
| Clip | Tasa de fotogramas | Fotogramas a procesar | Inferencias (1 cara, mejora activa) |
|---|---|---|---|
| 3 s | 12 FPS | 36 | 108 |
| 3 s | 15 FPS | 45 | 135 |
| 5 s | 15 FPS | 75 | 225 |
| 5 s | 24 FPS | 120 | 360 |
| 10 s | 15 FPS | 150 | 450 |
| 10 s | 30 FPS | 300 | 900 |
La última columna cuenta una detección, un intercambio y una mejora por fotograma. Añade una segunda persona y las columnas de intercambio y mejora se duplican, tal como se explica en la guía multicara. Como los GIF son cortos esto suele ser rápido, pero también significa que no tiene sentido procesar 300 fotogramas si el GIF final solo mostrará 150.
5. Conseguir un GIF que siga pareciendo una cara
El límite de 256 colores es donde fallan los GIF con cara cambiada, y no tiene nada que ver con el modelo de intercambio. La piel es un degradado suave, y cuantizar un degradado suave produce bandas visibles.
- Genera la paleta del clip ya intercambiado, no del original. Lo que ha cambiado es la cara.
- Recorta más antes de convertir si el fondo es recargado. Menos colores compitiendo significa más paleta dedicada a la cara.
- Mantén la mejora conservadora. Una cara muy alisada pierde la textura que mejor sobrevive a la cuantización: ver la guía de mejora facial.
- No amplíes en la salida. Un GIF de 480px desde un origen de 320px solo añade peso.
- Juzga el GIF, no el MP4. El vídeo intermedio siempre se verá mejor; lo que entregas es el GIF.
6. Por qué hacerlo en local importa más con los GIF
Las herramientas online de GIF face swap exigen una subida, y un GIF rara vez es material neutro. Los GIF de reacción son fragmentos de personas reales, a menudo sacados de cine, televisión o vídeos personales. Enviar eso a un servicio web supone entregar a un tercero tanto el metraje original como el resultado alterado, bajo la política de retención que aplique ese día.
El flujo anterior no sale nunca de tu equipo: ffmpeg se ejecuta en local, el intercambio se ejecuta en local y la salida aterriza en la carpeta que elijas. Los instaladores y las descargas de modelos siguen usando la red; esa distinción se explica en las notas de privacidad y en la guía de tiempo real.
Resolución de problemas
| Síntoma | Causa | Solución |
|---|---|---|
| Solo se procesó el primer fotograma | El GIF entró por la ruta de imagen y no por la de vídeo. | Convierte primero a MP4; no cargues el GIF como destino. |
| La conversión falla por las dimensiones | H.264 con yuv420p necesita anchura y altura pares. | Usa el filtro trunc(iw/2)*2 mostrado arriba. |
| Bandas y manchas en la piel | Cuantización a paleta de 256 colores. | Regenera la paleta desde el clip intercambiado, recorta más, reduce la anchura. |
| El GIF resultante pesa muchísimo | Demasiados fotogramas, demasiada anchura o tramado excesivo. | Baja fps y scale, mantén diff_mode=rectangle. |
| La animación va muy rápida o muy lenta | El GIF original tenía retardos irregulares por fotograma. | Fija un filtro fps explícito en el paso de paleta y en el de codificación. |
| Los colores bailan entre fotogramas | Ruido de tramado sobre una paleta por fotograma. | Usa tramado ordenado (bayer) en lugar de difusión de error. |
| La cara parpadea | Es un problema de calidad del intercambio, no del GIF. | Arréglalo en la fase de vídeo; el GIF solo lo hará más evidente. |
Preguntas frecuentes
¿Deep Face Cam puede procesar un GIF animado directamente?
En la build actual no. El selector acepta .gif, pero la ruta de imagen lo trata como fotograma fijo, y las exportaciones son PNG, JPG o BMP para imagen y MP4 o MKV para vídeo. Usa la ruta GIF → MP4 → intercambio → GIF hasta que llegue el soporte nativo.
¿Pierdo calidad al pasar por MP4?
En la práctica no. H.264 con un ajuste de calidad razonable es mucho más fiel que el GIF de 256 colores del que partes y que aquel con el que terminas. La calidad se decide en el paso de paleta, no en el de MP4.
¿Cómo mantengo el GIF por debajo de un límite de tamaño?
El número de fotogramas, la anchura y el manejo de la paleta, en ese orden. Baja la tasa, recorta el clip, reduce la anchura y mantén el tramado ordenado con diff_mode=rectangle.
¿Puedo cambiar varias caras en un GIF?
Sí. Una vez es MP4, es un trabajo multicara normal. Asigna a cada persona su cara de origen antes de renderizar.
¿Un face swap de GIF es más lento que uno de vídeo?
Suele ser mucho más rápido porque los GIF son cortos. Un GIF de cinco segundos a 15 FPS son 75 fotogramas; un vídeo de un minuto a 30 FPS son 1.800.
Que el GIF, y el original, se queden en tu equipo
Convierte, intercambia y reconstruye en local: sin subidas, y con la tasa de fotogramas y la paleta que realmente deciden cómo se ve el resultado en tus manos.