windows - sonido - programa para hacer gif con fotos
Crea gifs animados a partir de un conjunto de imágenes jpeg. (6)
Basándome en las respuestas de Simon P Stevens y dwurf, se me ocurrió esta solución simplificada:
ffmpeg -f image2 -framerate 1 -i image%d.jpg video.gif
Esto resulta en una tasa de 1 segundo por imagen. Ajuste el valor de la framerate
acuerdo a sus necesidades.
Necesito algo que se pueda escribir en Windows 7. Esta imagen se usará en banners.
Con ImageMagick:
convert *.png a.gif
El ffmpeg a .avi y .avi a .gif funcionaron, pero lo único que se debe tener en cuenta es que las imágenes deben nombrarse en perfecto orden numérico creciente para que funcionen, sin espacios. Preparé una secuencia de comandos de Python rápida para cambiar el nombre de todas mis imágenes en consecuencia para que esta receta de ffmpeg funcione:
import os
files = [ f for f in os.listdir(''.'') if os.path.isfile(os.path.join(''.'',f)) and f.endswith(''.jpg'') ]
for i, file in enumerate(sorted(files)):
os.rename(file, ''image%03d.jpg'' % i)
Y luego me topé con un enfoque mucho más simple que ffmpeg para hacer la conversión, que simplemente está usando la herramienta de conversión de línea de comandos de ImageMagick como esta.
convert image%03d.jpg[0-198] animated_gif.gif
No se pone mucho más simple que esa gente.
Gist aquí: https://gist.github.com/3289840
Puedes hacerlo con ffmpeg
Primero convierte las imágenes a un video:
ffmpeg -f image2 -i image%d.jpg video.avi
(Esto convertirá las imágenes del directorio actual (llamado image1.jpg, image2.jpg ...) a un archivo de video llamado video.avi.)
Luego convierte el avi en un gif:
ffmpeg -i video.avi -pix_fmt rgb24 -loop_output 0 out.gif
Puedes obtener los binarios de Windows para ffmpeg aquí .
También puedes hacer algo similar con mplayer . Ver Codificación de múltiples archivos de imagen de entrada .
Creo que la línea de comando sería algo como:
mplayer mf://*.jpg -mf w=800:h=600:type=jpg -vf scale=160:120 -vo gif89a:fps=3:output=out.gif
(Donde 800 y 600 son su ancho y alto de origen y 160 y 120 son el ancho y alto de destino. Out.gif es su nombre de archivo de destino)
Acabo de probar ambos y ambos funcionan bien. Sin embargo obtuve resultados mucho mejores de mplayer ya que pude especificar la resolución y la tasa de cuadros. Su kilometraje puede variar y estoy seguro de que podría encontrar más opciones para ffmpeg si mirara.
Solo me gustaría agregar a la respuesta de dwurf , que esto generará un gif con la paleta estándar de 256 colores, que no se ve muy agradable visualmente.
He encontrado two blog-posts he adaptado a mis necesidades para mejorar la calidad visual mediante el uso de una paleta personalizada para tu animación:
Genera la paleta de colores:
ffmpeg -f image2 -i image%d.jpg -vf scale=900:-1:sws_dither=ed,palettegen palette.png
Convierta las imágenes en un video regular con la tasa de cuadros deseada, porque el tercer comando solo funcionó con un video de entrada único y no con un montón de imágenes
ffmpeg.exe -f image2 -framerate 1.2 -i image%d.jpg video.flv
Ahora convierta el video generado con la paleta generada en un gif más hermoso:
ffmpeg.exe -i video.flv -i palette.png -filter_complex "fps=1.2,scale=900:-1:flags=lanczos[x];[x][1:v]paletteuse" video.gif
La respuesta de Simon P Stevens casi me lleva allí:
ffmpeg -f image2 -i image%d.jpg video.avi
ffmpeg -i video.avi -pix_fmt rgb24 -loop_output 0 out.gif
A ver si podemos mejorar esto.
Pasar por un avi no es necesario. Un -pix_fmt
de rgb24
no es válido, y la opción -loop_output
evita el bucle, lo que no quiero. Obtenemos:
ffmpeg -f image2 -i image%d.jpg out.gif
Mis imágenes de entrada están etiquetadas con un número de 3 dígitos sin relleno y tengo 30 de ellas (image_001.jpg, image_002.jpg, ...), así que necesito corregir el especificador de formato
ffmpeg -f image2 -i image_%003d.jpg out.gif
Mis imágenes de entrada son de la cámara de mi teléfono, ¡son demasiado grandes! Necesito reducirlos.
ffmpeg -f image2 -i image_%003d.jpg -vf scale=531x299 out.gif
También necesito rotarlos 90 grados hacia la derecha
ffmpeg -f image2 -i image_%003d.jpg -vf scale=531x299,transpose=1 out.gif
Este gif jugará con cero demora entre fotogramas, que probablemente no sea lo que queremos. Especifique la tasa de cuadros de las imágenes de entrada.
ffmpeg -f image2 -framerate 9 -i image_%003d.jpg -vf scale=531x299,transpose=1 out.gif
La imagen es solo un poco demasiado grande, así que recortaré 100 píxeles del cielo. La transposición hace que esto sea difícil, yo uso los valores x y y post-rotados:
ffmpeg -f image2 -framerate 9 -i image_%003d.jpg -vf scale=531x299,transpose=1,crop=299,431,0,100 out.gif
El resultado final: puedo compartir la increíble expresión facial de mi compañero con el mundo: