Quiero hacer una animación .gif
de un .mp4
video. Preferiría hacerlo desde la línea de comandos, así que solo enumere las herramientas de línea de comandos.
command-line
mp4
gif
Maythux
fuente
fuente
Respuestas:
ffmpeg
3.4.4 puede hacerlo directamente en Ubuntu 18.04Es probable que desee usar algo como:
Pruebe el procedimiento de generación de datos descrito en esta publicación .
Un más directo:
también funciona, pero el GIF de salida sería mucho más grande que el video de entrada, porque los formatos de video se comprimen de manera inteligente a través de los cuadros.
Desglose de argumentos:
ulimit -Sv 1000000
: establece un tamaño de memoria máximo de 1 Gb para el programa.Principalmente me aseguro de que el comando no esté usando memoria ilimitada como ciertos intentos anteriores.
500 Mb hace que ffmpeg no pueda cargar las bibliotecas compartidas ... ¿es hora de actualizar su RAM?
-ss 00:00:03 -to 00:00:06
: hora de inicio y finalización para cortar el video.No, los GIF no son la mejor manera de
pirateardistribuir videos en línea.Ver también: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
-vf scale=512:-1
: crea los512
píxeles de salida en altura y ajusta el ancho para mantener la relación de aspecto.Este es un caso de uso común para imágenes para la web, que tienden a tener una resolución mucho menor que el video.
Si elimina esta opción, el GIF de salida tiene la misma altura que el video de entrada.
La altura del video original se puede encontrar, por ejemplo, con
ffprobe
: https://superuser.com/questions/595177/how-to-retrieve-video-file-information-from-command-line-under-linux/1035178#1035178 y es 1024 x 1024 en nuestro caso.-r 15
: muestreo de FPS.Por ejemplo, el video original era de 30 FPS, lo
-r 15
que significa queffmpeg
elegirá un cuadro por cada 2 (= 30 / 15
).Sin embargo, el FPS de salida percibido se ajusta para que coincida con la entrada, por lo que no notará una aceleración, solo una mayor granularidad.
El FPS de entrada se puede encontrar con
ffprobe
, y el número total de cuadros de entrada se puede encontrarmediainfo
como se explica en: https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames -en-a-video-on-the-linux-command-line / 1044894 # 1044894Recomiendo esta opción porque los formatos de video generalmente tienen una velocidad de fotogramas más alta debido a la mayor resolución. Con GIF más pequeños, la velocidad de fotogramas más baja es menos notable, por lo que podemos omitir algunos fotogramas y hacer GIF más pequeños.
Antes de 18.04 anterior:
ffmpeg
+convert
one-liner sin archivos intermediosffmpeg
No se pudo manejar GIF anteriormente. Lo mejor que tuve fue algo:Explicación de algunos de los argumentos:
-loop 0
: agregue el campo de recuento de bucles de la extensión Netscape Gif a la salida. 0 significa bucle infinito como se describe en: http://www.vurdalakov.net/misc/gif/netscape-looping-application-extensioneog
,firefox
y el cromo todos los bucles infinitos por defecto, incluso sin él, así que no estoy seguro de lo necesario es más.-delay 5
: tiempo esperado antes de mostrar el siguiente cuadro, en centésimas de segundo, como se describe en: https://en.wikipedia.org/wiki/GIF#Animated_GIF byte 324. Entonces100
significa 1 FPS,5
significa1 / 0.5 == 20FPS
.Incluso si reduce la altura y la velocidad de fotogramas, el GIF de salida aún puede ser más grande que el video, ya que los formatos de video "reales" que no son GIF se comprimen en fotogramas, mientras que GIF solo comprime fotogramas individuales.
Directo:
funcionó, pero casi mato mi computadora debido al desbordamiento de memoria, y produjo una salida 100 veces más grande para mi archivo de entrada de 2M 1Mb. Tal vez algún día ImageMagick se pondrá al día.
Ver también: https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality
Probado en Ubuntu 17.10.
fuente
scale=320:-1
-r 10
devolverá el GIF a la velocidad normal.Dos pasos:
Extraer imágenes del video
Cree un directorio llamado marcos en el mismo directorio con su
.mp4
archivo. Usar comando:fuente
Convertir imágenes a gif
Documentos: convertir opciones de gif
Terminará con un archivo bastante grande, eche un vistazo a la guía de imágenes mágicas para optimizar las opciones de gif que puede agregar al comando del segundo paso para obtener un archivo más pequeño.
fuente
frames
carpeta debe existir para que el primer comando funcione.-layers Optimize
el últimoconvert
comando, antes*.jpg
. Sin embargo, verifique la salida, podría verse afectada. Para mí, redujo el tamaño de gif de 5 MB a 700 KB sin ninguna pérdida perceptible en calidad :)ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.png'
.gifify es una utilidad todo en uno basada en nodos que simplifica la conversión. Depende
nodejs
,npm
,ffmpeg
, yimagemagick
que están disponibles en los repositorios.Una vez que lo haya
npm
instalado, puede instalarlogifify
globalmente con:Un video se puede convertir a .GIF con:
También puede establecer opcionalmente una posición de inicio y finalización en el video y agregar un título de texto:
❗️ La conversión puede tardar varios minutos en completarse incluso con videos más pequeños.
fuente
gifsicle
, pero luego ocurre otro problema: github.com/vvo/gifify/issues/95 Además, ¿le importaría decirnos a los novatos de npm en qué directorio ejecutarnpm install
y si ejecutarlo como root o no? ¡Gracias!