Quiero hacer una .gif
imagen animada de un conjunto dado de .jpg
imágenes.
Preferiría hacerlo desde la línea de comandos, por lo que las herramientas de línea de comandos serían muy bienvenidas.
command-line
image-processing
gif
Maythux
fuente
fuente
Respuestas:
Puede usar el paquete ImageMagick . Instálelo usando el comando:
Ahora puede crear un
gif
número de imágenes (jpg
) usando:fuente
-resize 50%
.-deconstruct
. También descubrí que ImageMagick tiene mucha memoria, consulte los puntos de referencia: askubuntu.com/a/1102183/52975convert -delay 0 -loop 0 *.tif myanimated.gif
funcionó bien, en 720 archivos tifPara completar la respuesta de @Maythux:
Para evitar generar un archivo muy grande, puede usar la
-resize
opción:En mi caso, tengo imágenes de 4608x3456 y el gif generado fue de más de 300M para 32 imágenes
o
Cuida * .jpg
*.jpg
apesta un poco cuando se trata de valores numéricos, puede generar un gif con fotos sin clasificar.Como las tomas se tomaron muy rápidamente (10 / s), todas tienen el mismo tiempo de modificación y no se puede engañar usando,
ls -t
por ejemplo. En ubuntu puedes usarls -v
algo como:Sin embargo, ordenar numéricamente es bastante complicado en Mac OS X, creo que necesitarás crear un script personalizado.
fuente
find
,sort
expansión de llaves, etc. Lals
herramienta es notoriamente inadecuada para este tipo de cosas. Utilizarfind
. Hay una pequeña curva de aprendizaje, pero vale la pena.No tengo suficiente reputación para comentar, pero en lugar de modificar los nombres de archivo, puede usar globbing para obtener su shell para expandir los nombres de archivo
fuente
CAÑUTILLO
Puede hacer esto fácilmente con GIMP. Primero instálelo si ya no está instalado con
Creando el gif
Desde GIMP, vaya a Archivo -> Abrir como capas para abrir todos los png en su propia capa.
Desde aquí puede realizar ediciones en las capas y, una vez hecho, vaya a Archivo -> Exportar como . Desde el cuadro de diálogo, asegúrese de establecer el tipo de archivo en GIF.
Desde allí, irá a las opciones de exportación de GIF. Marque la opción ' Como animación ' y configure los parámetros según sea necesario.
fuente
Solución ffmeg + datos de prueba
A partir de Ubuntu 18.10, ffpmeg 4.0.2-2, ImageMagick 6.9.10-8, he descubierto que ffmpeg es mucho más rápido y usa mucha menos memoria .
El comando de conversión más simple es:
Puede obtener mis datos de prueba con:
Los datos de la prueba se generaron con: https://stackoverflow.com/questions/3191978/how-to-use-glut-opengl-to-render-to-a-file/14324292#14324292 y contiene 256 imágenes 1024x1024 PNG.
¡Y aquí hay otros datos de prueba que puede generar directamente en su navegador ahora mismo! https://stackoverflow.com/questions/19235286/convert-html5-canvas-sequence-to-a-video-file/57153718#57153718
Las
ffmpeg
opciones importantes que quiero resaltar son:-pattern_type glob
: forma conveniente de seleccionar imágenes-framerate 60
: asume 60 FPS en las imágenes de entrada y genera el mismo FPS.ffmpeg
No puedo saber lo contrario, ya que no hay datos de FPS en las imágenes como en formatos de video.Los 256 cuadros de entrada tardan unos 4 segundos en finalizar.
-r 15
: Opcional. Elija una cada 4 imágenes, así que reduzca el tamaño (4 == 60 / 15
).Con él,
identify out.gif
dice que el GIF contiene solo 64 cuadros.Todavía toma 4 segundos para jugar, por lo que el retraso se altera para que las cosas coincidan.
-vf scale=512:-1
: Opcional. Establezca el ancho, la altura de la escala proporcionalmente, generalmente para reducir el tamaño y ahorrar espacio.Para que ImageMagick funcione, primero tuve que modificar sus límites de disco y memoria
/etc/ImageMagick-6/policy.xml
como se explica en: https://superuser.com/questions/1178666/imagemagick-convert-quits-after-some-pagesVer también:
ImageMagick vs ffmpeg benchmark
Comparé los comandos:
Los comandos se construyeron para producir salidas lo más cercanas posible para que la comparación sea válida:
/usr/bin/time -v
: se utiliza para encontrar el uso máximo de memoria como se explica en: https://stackoverflow.com/questions/774556/peak-memory-usage-of-a-linux-unix-process-deconstruct
: Las imágenes GIF pueden contener solo el rectángulo mínimo modificado del fotograma anterior para que el GIF sea más pequeño.ffmpeg
calcula esas diferencias por defecto, pero ImageMagick no, a menos que-deconstruct
se use.Básicamente querrás usar esa opción cada vez con ImageMagick.
Podemos observar la diferencia con:
Con la versión comprimida, todos los marcos tienen tamaños más pequeños que el inicial, por ejemplo:
En este ejemplo, el segundo cuadro es solo en
516x516
lugar del 1024x1024 completo, y se coloca en un desplazamiento de252+257
. Por lo tanto, contiene solo el triángulo del medio.Ver también: ¿cómo puedo cambiar el tamaño de un archivo GIF animado usando ImageMagick?
-delay
: valor que coincide con los 60FPS deffmpeg
. No debería importar el rendimiento de conversión, pero no quiero arriesgarlo.Los GIF de salida tienen aproximadamente el mismo tamaño y se ven visualmente idénticos.
Obtenemos para ImageMagick:
y para ffmpeg:
de donde vemos que:
Hardware de prueba: computadora portátil Lenovo ThinkPad P51 , Intel Core i7-7820HQ, 32 GB (16 + 16) DDR4 2400MHz SODIMM, 512GB SSD PCIe TLC OPAL2.
fuente
-r
ni-v
comandos, aún así el gif de salida es de una calidad mucho menor que los archivos png originales. ¿Cómo mantener la misma calidad de gif que los archivos png dados?-framerate 60 -r 60
. Inspeccione el GIF generado y las imágenes de entrada con las herramientas de ImageMagickidentify
para tratar de descubrir qué está sucediendo.Puede usar un programa llamado convertir incluido en el paquete imagemagick. Se maneja por línea de comandos, pero es muy fácil de usar. Instálelo a través del centro de software o vaya a un símbolo del sistema y escriba
Ahora para crear el .gif.
* Tenga en cuenta que el ejemplo anterior es directamente de los ejemplos de Image Magick
fuente
convert -delay 20 -loop 0 *.png out.gif
un GIF en bucle.