Banda Ancha EU

Comunidad de usuarios
de fibra, móvil y ADSL

Error en montage de ImageMagick

Serakon

Cuando intento montar una imagen de 25 PNG (24MB cada una) de medidas 3840x2160 cada uno me lanza error. Esta es la parte del script que falla.

montage -geometry +2+2 `ls *.png | sort -n` "$file_name".jpg
mogrify -resize $res "$file_name".jpg

Estas 2 cosas me dicen

Zcapturador.sh: línea 163:  6996 Terminado (killed)      montage -geometry +2+2 `ls *.png | sort -n` "$file_name".jpg
montage: unable to extent pixel cache `No se pudo asignar memoria' @ fatal/cache.c/CacheSignalHandler/3328.
mogrify: unable to open image `Our First Celebrity Hook-Up 2160p.jpg': No existe el fichero o el directorio @ error/blob.c/OpenBlob/2712.
 [OK]
Getting video info...convert: unable to open image `Our First Celebrity Hook-Up 2160p.jpg': No existe el fichero o el directorio @ error/blob.c/OpenBlob/2712.
convert: no images defined `/media/sf_K05/265Vixen/Our First Celebrity Hook-Up 2160p.jpg' @ error/convert.c/ConvertImageCommand/3210.
           [OK]

Según leí por algún lado es de limites de memoria, dado que con imagenes mas pequeñas lo mismo funciona. Pero no encuentro solucion mi equipo tiene 16GB de RAM. y el directorio donde guardo las imagenes es en el /tmp que lo tengo cargado en RAM y no en discos.

montage -limit area 0 -limit memory 0 -limit map 0 -geometry +2+2 `ls *.png | sort -n` "$file_name".jpg
mogrify -limit area 0 -limit memory 0 -limit map 0 -resize $res "$file_name".jpg

montage: unable to extend cache `Our First Celebrity Hook-Up 2160p.jpg': No queda espacio en el dispositivo @ error/cache.c/OpenPixelCache/3682.
montage: unable to write pixel cache `/tmp/magick-642123YSj0YKOKzN': No queda espacio en el dispositivo @ error/cache.c/WritePixelCachePixels/5492.
mogrify: insufficient image data in file `Our First Celebrity Hook-Up 2160p.jpg' @ error/jpeg.c/ReadJPEGImage/1039.
 [OK]
Getting video info...convert: insufficient image data in file `Our First Celebrity Hook-Up 2160p.jpg' @ error/jpeg.c/ReadJPEGImage/1039.
convert: no images defined `/media/sf_K05/265Vixen/Our First Celebrity Hook-Up 2160p.jpg' @ error/convert.c/ConvertImageCommand/3210.
           [OK]

Done

Asi tengo el directorio de temporales donde creo el fichero y tengo los jpg

nano /etc/fstab
tmpfs    /tmp    tmpfs    defaults,noatime,mode=1777,size=8G    0    0
mceds
1

A mí me pasó algo parecido hace unos meses. Imagemagick asigna unos límites predeterminados algo bajos para cachear y cosas similares. Así que, cuando se trabaja con imágenes muy grandes, salta el error. Por si acaso, introduce este comando y pega la salida:

convert -list resource
🗨️ 8
Serakon

convert -list resource
File Area Memory Map Disk Thread Throttle Time
--------------------------------------------------------------------------------
49152 8.39KB 19.07MiB 7.7412GiB unlimited 4 0 unlimited

🗨️ 7
mceds
1

¿Disk "unlimited"? ¿Lo tienes así en /etc/ImageMagick-6/policy.xml ?

De todos modos, incluso con 16 GB puede dar problemas si las imágenes son demasiado grandes. Sí, Imagemagick chupa recursos como una bestia. Prueba a ejecutarlo montando /tmp en el disco.

🗨️ 6
Serakon

Monitorizo el uso de discos y RAM y ni siquiera crece cuando lo uso, lo que detecto es que en el disco SSD donde no escribe NADA, cuando va a acabar antes de dar error lee del disco en plan a 500mb/s un rato...

El debian le tengo en una maquina virtual.

  Define arguments for the memory, map, area, and disk resources with
  SI prefixes (.e.g 100MB).  In addition, resource policies are maximums for
  each instance of ImageMagick (e.g. policy memory limit 1GB, -limit 2GB
  exceeds policy maximum so memory limit is 1GB).
-->
<policymap>
  <!-- <policy domain="resource" name="temporary-path" value="/tmp"/> -->
  <!-- <policy domain="resource" name="memory" value="2GiB"/> -->
  <!-- <policy domain="resource" name="map" value="4GiB"/> -->
  <!-- <policy domain="resource" name="area" value="1GB"/> -->
  <!-- <policy domain="resource" name="disk" value="16EB"/> -->
  <!-- <policy domain="resource" name="file" value="768"/> -->
  <!-- <policy domain="resource" name="thread" value="4"/> -->
  <!-- <policy domain="resource" name="throttle" value="0"/> -->
  <!-- <policy domain="resource" name="time" value="3600"/> -->
  <!-- <policy domain="system" name="precision" value="6"/> -->
  <policy domain="cache" name="shared-secret" value="passphrase"/>
  <policy domain="coder" rights="none" pattern="EPHEMERAL" />
  <policy domain="coder" rights="none" pattern="URL" />
  <policy domain="coder" rights="none" pattern="HTTPS" />
  <policy domain="coder" rights="none" pattern="MVG" />
  <policy domain="coder" rights="none" pattern="MSL" />
  <policy domain="coder" rights="none" pattern="TEXT" />
  <policy domain="coder" rights="none" pattern="SHOW" />
  <policy domain="coder" rights="none" pattern="WIN" />
  <policy domain="coder" rights="none" pattern="PLT" />
  <policy domain="path" rights="none" pattern="@*" />
</policymap>
🗨️ 5
mceds
🗨️ 4
Serakon
🗨️ 3
mceds
🗨️ 2
Serakon
Serakon
Serakon
1

Detecte el problema, la maquina virtual la tenia a un máximo de 4GB aunque luego la partición fuera mas grande para hacer ese montaje requeria de 5GB por lo cual no tenia suficiente espacio, amplié la maquina virtual a un máximo de 8GB y listo.

Gracias @mceds aprendí en esto a donde esta la configuración de eso que lo desconocía.

Y el tiempo de hacerlo en memoria son segundos si lo hago en disco rigido tarda minutos 10-15

🗨️ 4
mceds
1

La verdad es que es una putada que sea así --a mí también me encantan los RAMdisks--, pero los desarrolladores de IM no se cortaron un pelo a la hora de saturar con temporales gigantescos. Y no conozco ninguna alternativa para la edición de imágenes en línea de comandos pura.

🗨️ 3
ToooWuu
2

> Y no conozco ninguna alternativa para la edición de imágenes en línea de comandos ...

¿ Has probado GraphicsMagick ? wikipedia.org/GraphicsMagick
Yo no :) pero lo venden como "el IM mejorado".

🗨️ 1
mceds

¿Un fork? Gracias, será cuestión de ver si tiene los mismos problemas.

Serakon

LA velocidad que dan es bestial y cumple su objetivo lo temporal, aunque hoy día los PCs domésticos pueden tener cantidades elevadas de RAM.

Pero haciendo esto con 16GB me veo justo.

Y si crea un archivo muy grande de inicio y luego lo disminuye rápido.