martes, 26 de marzo de 2024

Conversión masiva de imagenes jpeg a avif

En este post trataremos como convertir de forma máxima archivos de fotos en formato jpg a avif. El mótivo es que me he encontrado fotos antiguas que tenía guardadas en CDs y quiero guardarlas en la nube. Pero para ello quiero reducir su tamaño sin perder calidad por lo que he escogido el formato avif. 

Este formato permite suber las fotos a google Fotos y verlas en el móvil sin tener que usar ningún codec nuevo. En windows 10 si que tuve que instalar el codec de avif (AV1 video extension) que se puede obtener en la tienda de windows de forma gratuita para poder ver luego las imagenes convertidas.

Comencemos. 

Intalando los paquetes necesarios.

En Ubuntu, que es la distribución que uso, instalamos los paquetes siguientes.

Para poder usar el formato avif.

sudo apt-get install libavif-bin

Para poder usar el procesamiento en paralelo de los archivos a través de comando del shell.

sudo apt-get install parallel


Procesando los archivos.

Voy a colocar todo el directorio de imágenes a convertir tal cual están en el cd, en el directorio ~/Imágenes/imagenes. 

directorio de las imagenes


A continuación abrimos una sesión de terminal en este directorio y ejecutamos la siguiente instrucción:

/Imágenes/imagenes$ find ~/Imágenes/imagenes -type f -name "*.jpg" | parallel --bar --eta avifenc {} {.}.avif

Vamos a descomponer el comando para que sea más comprensible su funcionamiento.
  1. 1.- find ~/Imágenes/imagenes -type f -name "*.jpg": Este comando busca en el directorio ~/Imágenes/imagenes y todos sus subdirectorios (-type f) archivos con la extensión ".jpg" (-name "*.png"). Básicamente, busca todos los archivos jpg en esa ubicación.

2.- |: El símbolo de tubería (pipe) | se utiliza para pasar la salida de un comando como entrada a otro. En este caso todos los archivos encontrados se pasarán al siguiente comando.


3.- parallel --bar --eta avifenc {} {.}.avif: Este comando utiliza parallel para procesar las conversiones en paralelo. --bar muestra una barra de progreso, y --eta muestra una estimación de tiempo restante. Avifenc es el comando para convertir imágenes de un formato a otro, codificará los archivos jpg como archivos avif. {} es un marcador que será reemplazado por los nombres de archivo jpg encontrados, mientras que {.} representa el nombre de archivo sin la extensión. Así que, en resumen, este comando convierte cada archivo jpg encontrado en un archivo avif correspondiente en el mismo directorio.

Al darle al intro, el comando empezará a funcionar y realizar la conversión en paralelo de los archivos. El tiempo dependerá de la potencia de vuestro ordenador y del número de archivos a convertir.

Para que veáis el grado de compresión dejo en la siguiente imagen la comparación entre un archivo en formato jpg y otro en formato avif.


Una vez que ha terminado, yo quería eliminar todos los archivo con extensión .jpg para asi quedarme solamente con los archivos convertidos y poder subirlos a la nube. Esto es relativamente sencillo ya que solo tenemos que usar el comando find que nos proporciona linux. 

Para borrar todos los archivos con la extensión ".jpg" dentro de un directorio y sus subdirectorios en Debian Linux, puedes usar el comando find junto con la opción delete. Aquí tienes cómo hacerlo:

find /ruta/al/directorio -type f -name "*.jpg" -delete

Donde:

  • /ruta/al/directorio es la ruta al directorio donde quieres eliminar los archivos JPG.
  • -type f especifica que solo se eliminarán archivos regulares (no directorios).
  • -name "*.jpg" especifica que solo se buscarán archivos con extensión ".jpg".
  • -delete indica que los archivos encontrados serán eliminados.

Por ejemplo, yo quiero borrar todos los archivos JPG en el directorio ~/Imágenes/imagenes y sus subdirectorios, por lo que usaré:

find ~/Imágenes/imagenes -type f -name "*.jpg" -delete


¡OJO! La utilización del comando find con la opción -delete es irreversible, una vez ejecutado se borran y no hay vuelta atrás.






No hay comentarios:

Publicar un comentario