<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mogrify on LinuxmanR4</title><link>https://linuxmanr4.com/tags/mogrify/</link><description>Recent content in Mogrify on LinuxmanR4</description><generator>Hugo -- gohugo.io</generator><language>es</language><copyright>LinuxmanR4</copyright><lastBuildDate>Fri, 21 Jan 2022 21:18:18 +0000</lastBuildDate><atom:link href="https://linuxmanr4.com/tags/mogrify/index.xml" rel="self" type="application/rss+xml"/><item><title>Convertir todas las imágenes de una carpeta a Webp</title><link>https://linuxmanr4.com/2022/01/21/convertir-todas-las-imagenes-de-una-carpeta-a-webp/</link><pubDate>Fri, 21 Jan 2022 21:18:18 +0000</pubDate><guid>https://linuxmanr4.com/2022/01/21/convertir-todas-las-imagenes-de-una-carpeta-a-webp/</guid><description>&lt;img src="https://linuxmanr4.com/wp-content/uploads/2022/01/convertir_webp.jpg" alt="Featured image of post Convertir todas las imágenes de una carpeta a Webp" />&lt;p>Hace poco me di a la tarea de averiguar cómo convertir todas las imágenes de una carpeta a Webp como optimización final antes de subirlas a este blog.&lt;/p>
&lt;p>Estos comandos y scripts son muy útiles para automatizar la conversión de los archivos y ahorrar tiempo.&lt;/p>
&lt;h2 id="mogrify">Mogrify
&lt;/h2>&lt;p>Al principio me fui con la vieja confiable de &lt;a class="link" href="https://imagemagick.org/script/mogrify.php" target="_blank" rel="noopener"
>mogrify&lt;/a>
&lt;span style="white-space: nowrap;">&lt;svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
&lt;path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
&lt;/svg>&lt;/span>
de ImageMagick.&lt;/p>
&lt;p>Por ejemplo, convertir todos los archivos &lt;em>jpg&lt;/em> de una carpeta es tan sencillo como hacer.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mogrify -format webp *.jpg
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Y con eso se soluciona todo &amp;hellip; peeeeeerooooo&amp;hellip; quise investigar si había algunas opciones para optimizar aún más el tamaño de las imágenes.&lt;/p>
&lt;h2 id="cwebp">cwebp
&lt;/h2>&lt;p>En esas andaba cuando me encontré con la herramienta de conversión de Google &lt;a class="link" href="https://developers.google.com/speed/webp/docs/cwebp" target="_blank" rel="noopener"
>cwebp&lt;/a>
&lt;span style="white-space: nowrap;">&lt;svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
&lt;path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
&lt;/svg>&lt;/span>
que funciona excelente. Pero que hasta donde tengo entendido, no puedo &lt;a class="link" href="https://linuxmanr4.com/2012/06/11/convertir-todas-las-imagenes-de-un-directorio-a-pdf-en-linux/" >convertir carpetas completas de imágenes&lt;/a>
.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">cwebp -m &lt;span class="m">6&lt;/span> -q &lt;span class="m">80&lt;/span> -mt -af -progress test1.png -o test1.webp
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>O para simplificar un poco, hice un alias que agregué al archivo &lt;strong>.zshrc&lt;/strong>&lt;/p>
&lt;p>Tuve que programar una función para que aceptara un par de parámetros, el nombre del archivo jpg y el nombre del archivo resultante webp.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">jpg2webp&lt;span class="o">(){&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="nv">$#&lt;/span> -lt &lt;span class="m">2&lt;/span> &lt;span class="o">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;Faltan parámetros. Ejemplo: cjw imagen.jpg imagen.webp&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> cwebp -m &lt;span class="m">6&lt;/span> -q &lt;span class="m">80&lt;/span> -mt -af -progress &lt;span class="nv">$1&lt;/span> -o &lt;span class="nv">$2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">cjw&lt;/span>&lt;span class="o">=&lt;/span>jpg2webp
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Este alias funciona muy bien si lo que quieres hacer es convertir un solo archivo, pero cuando es una carpeta con muchas imágenes es mejor otro enfoque.&lt;/p>
&lt;p>Otra vez pensé hacer un script estilo &lt;em>bash | zsh&lt;/em> que tomara todos los archivos de la carpeta e hiciera la conversión. Pero luego me acordé de un viejo amigo que ya he utilizado anteriormente &lt;a class="link" href="https://linuxmanr4.com/tags/parallel/" >parallel&lt;/a>
.&lt;/p>
&lt;h2 id="parallel">Parallel
&lt;/h2>&lt;p>Con &lt;a class="link" href="https://linuxmanr4.com/2014/02/20/rsync-parallel-bash/" >parallel tengo la ventaja de aplicar el mismo proceso a todos los archivos&lt;/a>
de una carpeta y asignar el número de procesadores que voy a utilizar para hacer las conversiones.&lt;/p>
&lt;p>Dicho esto la instrucción queda más o menos así&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">parallel -j 3 --eta cwebp -m 6 -q 80 -mt -af -progress &amp;#39;{}&amp;#39; -o &amp;#39;{.}.webp&amp;#39; ::: *.jpg
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Con eso logro convertir todas las imágenes &lt;strong>jpg&lt;/strong> a &lt;strong>webp&lt;/strong> de una carpeta. Con algunas pequeñas modificaciones hago lo mismo para convertir los &lt;a class="link" href="https://linuxmanr4.com/2013/03/29/optimizar-archivos-png-jpg/" >archivos png&lt;/a>
.&lt;/p>
&lt;h2 id="automatiza-y-avanza">Automatiza y avanza
&lt;/h2>&lt;p>Ya como cereza del pastel, agregué algunos &lt;a class="link" href="https://linuxmanr4.com/2021/07/23/manjaro-pamac-yay/" >alias&lt;/a>
para hacerme la vida más sencilla.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Conversión de imágenes a webp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">j2w&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;parallel -j 3 --eta cwebp -m 6 -q 80 -mt -af -progress &amp;#39;{}&amp;#39; -o &amp;#39;{.}.webp&amp;#39; ::: *.jpg&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">p2w&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;parallel -j 3 --eta cwebp -m 6 -q 80 -mt -af -lossless -progress &amp;#39;{}&amp;#39; -o &amp;#39;{.}.webp&amp;#39; ::: *.png&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">i2w&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;j2w; p2w&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;a class="link" href="https://youtu.be/WKK8uax2m5k" target="_blank" rel="noopener"
>https://youtu.be/WKK8uax2m5k&lt;/a>
&lt;span style="white-space: nowrap;">&lt;svg width=".7em"
height=".7em" viewBox="0 0 21 21" xmlns="http://www.w3.org/2000/svg">
&lt;path d="m13 3l3.293 3.293l-7 7l1.414 1.414l7-7L21 11V3z" fill="currentColor" />
&lt;path d="M19 19H5V5h7l-2-2H5c-1.103 0-2 .897-2 2v14c0 1.103.897 2 2 2h14c1.103 0 2-.897 2-2v-5l-2-2v7z"
fill="currentColor">
&lt;/svg>&lt;/span>
&lt;/p>
&lt;h2 id="actualización-un-alias-con-bash">Actualización: Un alias con bash
&lt;/h2>&lt;p>Algo pasó con una actualización de Manjaro que parallel dejó de funcionar :(&lt;/p>
&lt;p>Al ejecutar el alias aparece un mensaje de error:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Undefined subroutine &amp;amp;amp;SSHLogin::slurp_or_exit called at /usr/bin/parallel line 8401.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Tuve que buscar una opción más tradicional con Bash.&lt;/p>
&lt;p>Así quedaron los alias correspondientes.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">j2w&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;for file in *.jpg; do if [ -f &amp;#34;$file&amp;#34; ]; then cwebp -q 90 $file -o &amp;#34;${file%.*}.webp&amp;#34; ; fi; done&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">p2w&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;for file in *.png; do if [ -f &amp;#34;$file&amp;#34; ]; then cwebp -q 90 -lossless $file -o &amp;#34;${file%.*}.webp&amp;#34; ; fi; done&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">i2w&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;j2w; p2w&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Un alias para &lt;a class="link" href="https://linuxmanr4.com/2020/07/30/convertir-archivos-jpg-a-webp-con-python/" >convertir archivos &lt;strong>jpg&lt;/strong>&lt;/a>
, otro para &lt;strong>png&lt;/strong> y uno más para ambos.&lt;/p>
&lt;p>Hay otra variante si decide elegir varios tipos de archivos en un ciclo for. Intenté varias recomendaciones y la única que funcionó es con un &lt;strong>OR&lt;/strong> al momento de elegir las extensiones, no es lo más elegante, pero sirve:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="nb">alias&lt;/span> &lt;span class="nv">i2w&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;for file in *.jpg or file in *.jpeg or file in *.png; do if [ -f &amp;#34;$file&amp;#34; ]; then cwebp -q 90 $file -o &amp;#34;${file%.*}.webp&amp;#34; ; fi; done&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Y con eso tengo más que suficiente para optimizar todas las imágenes de cada artículo que publico en este espacio.&lt;/p>
&lt;p>Espero que algo de esta información les sea de utilidad.&lt;/p></description></item></channel></rss>