Comando

ffmpeg -i entrada.gif -filter_complex \
"[0:v]split=5[s1][s2][s3][s4][s5]; \
 [s1]crop=iw/5:ih:0:0,split[s1a][s1b];[s1a]palettegen[p1];[s1b][p1]paletteuse[v1]; \
 [s2]crop=iw/5:ih:iw/5:0,split[s2a][s2b];[s2a]palettegen[p2];[s2b][p2]paletteuse[v2]; \
 [s3]crop=iw/5:ih:2*iw/5:0,split[s3a][s3b];[s3a]palettegen[p3];[s3b][p3]paletteuse[v3]; \
 [s4]crop=iw/5:ih:3*iw/5:0,split[s4a][s4b];[s4a]palettegen[p4];[s4b][p4]paletteuse[v4]; \
 [s5]crop=iw/5:ih:4*iw/5:0,split[s5a][s5b];[s5a]palettegen[p5];[s5b][p5]paletteuse[v5]" \
 -map "[v1]" p1.gif -map "[v2]" p2.gif -map "[v3]" p3.gif -map "[v4]" p4.gif -map "[v5]" p5.gif

Explicación del comando

1. Entrada e inicialización del filtro

  • ffmpeg -i entrada.gif: Invoca el binario y define el archivo de entrada.
  • -filter_complex: Habilita el uso de un grafo de filtros avanzados, necesario cuando hay múltiples entradas, múltiples salidas o ramificaciones no lineales en el procesamiento.

2. Ramificación principal

  • "[0:v]split=5[s1][s2][s3][s4][s5];"
    • [0:v]: Selecciona la primera pista de video (v) del primer archivo de entrada (índice 0).
    • split=5: Duplica la pista original en 5 copias idénticas en memoria.
    • [s1]...[s5]: Asigna una etiqueta identificatoria a cada copia para referenciarlas en las siguientes etapas. El punto y coma (;) indica el fin de esta cadena de filtros.

3. Lógica de recorte y corrección de color (Por segmento)

El comando procesa cada una de las 5 partes mediante la misma secuencia lógica. Tomando como ejemplo la primera línea de procesamiento:

[s1]crop=iw/5:ih:0:0,split[s1a][s1b];[s1a]palettegen[p1];[s1b][p1]paletteuse[v1];

Esta línea se divide en tres operaciones:

  1. Recorte y sub-ramificación:
    • [s1]crop=iw/5:ih:0:0: Toma el primer flujo duplicado ([s1]). Corta el ancho a una quinta parte del ancho original (iw/5 - input width), mantiene la altura original (ih - input height), y establece las coordenadas de origen (esquina superior izquierda).
    • ,split[s1a][s1b]: Inmediatamente después del recorte, esta sección se divide en dos nuevos flujos idénticos ([s1a] y [s1b]).
  2. Generación de la paleta:
    • [s1a]palettegen[p1]: Analiza todos los cuadros del flujo [s1a] para calcular una paleta óptima de 256 colores específica para ese recorte. La salida (solo los datos de la paleta) se etiqueta como [p1].
  3. Aplicación de la paleta:
    • [s1b][p1]paletteuse[v1]: Toma el flujo de video recortado ([s1b]) y los datos de la paleta ([p1]), y los combina. Asigna los colores correctos a los píxeles, eliminando las transparencias erróneas y los artefactos visuales. El resultado final, listo para exportar, se etiqueta como [v1].

4. Desplazamiento de coordenadas

Las siguientes cuatro líneas replican la lógica anterior para [s2], [s3], [s4] y [s5], pero modifican la coordenada en el filtro crop para avanzar secuencialmente a lo ancho de la imagen:

  • Tramo 2: iw/5:0 (Desplaza el inicio un 20% a la derecha).
  • Tramo 3: 2*iw/5:0 (Desplaza el inicio un 40%).
  • Tramo 4: 3*iw/5:0 (Desplaza el inicio un 60%).
  • Tramo 5: 4*iw/5:0 (Desplaza el inicio un 80%).

5. Asignación de flujos a archivos físicos

  • -map "[v1]" p1.gif: La bandera -map extrae un flujo específico del grafo interno de FFmpeg y lo dirige hacia un archivo de salida. Aquí extrae [v1] y lo compila en p1.gif.
  • Esto se repite con -map "[v2]" p2.gif, etc., generando de forma concurrente los 5 archivos independientes.