Convertir video OGV a animación GIF?

40

Creé videos OGV con el gtk-recordmydesktopprograma de screencasting, tratando de abordar este problema aquí con bruteforce sobre X. Puedo ver los videos con VLC.

Ahora, la tarea es encontrar algunas formas de convertir videos OGV en animaciones GIF para poder mostrarlos en SE. ¿Cómo puedo hacer eso?

Matthias Braun
fuente

Respuestas:

38

Eche un vistazo a esto: https://askubuntu.com/questions/107726/how-to-create-animated-gif-images-of-a-screencast/107735#107735

..... Después de que Desktop Recorder haya guardado la grabación en un video OGV , MPlayer se usará para capturar capturas de pantalla JPEG , guardándolas en el directorio 'salida' .

En una terminal:

mplayer -ao null <video file name> -vo jpeg:outdir=output

Usa ImageMagick para convertir las capturas de pantalla en gifs animados.

convert output/* output.gif

puedes optimizar las capturas de pantalla de esta manera:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
maniat1k
fuente
1
Para una gran cantidad de imágenes, tuve que agregar -limit map 1para convertir (obtuve un "Killed" de lo contrario).
Ax3l
Con un video ogv de 30 segundos, el comando de conversión tomó toda mi CPU y estuvo funcionando durante más de 10 minutos antes de que lo detuviera. agregar -limit map 1al comando no lo solucionó.
máximo demandante
1
Pruebe esto para convertir ffmpeg -i output/00000%03d.jpg output.gif unix.stackexchange.com/questions/24014/…
Dawid Drozd
Cabe mencionar que directo también convert output/* -fuzz 10% -layers Optimize optimised.gifes posible, y notablemente más rápido que la ruta de dos comandos. Además, también mplayercrea pngcapturas de pantalla fácilmente , que pueden ser preferidas para capturas de sitios web o GUI.
Raphael
21

Guión simple con buena calidad.

Guión:

inputFile=$1

FPS=15
WIDTH=320

#Generate palette for better quality
ffmpeg -i $inputFile -vf fps=$FPS,scale=$WIDTH:-1:flags=lanczos,palettegen tmp_palette.png

#Generate gif using palette
ffmpeg -i $inputFile -i tmp_palette.png -loop 0 -filter_complex "fps=$FPS,scale=$WIDTH:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif

rm tmp_palette.png

Código de: https://superuser.com/a/556031/295664

Sin paleta: (231 KB)

ingrese la descripción de la imagen aquí

Con paleta: (573 KB)

ingrese la descripción de la imagen aquí

Dawid Drozd
fuente
4

Esta frase está trabajando para mí:

ffmpeg -i video.ogv video.gif
luator
fuente
2
¿Es esto esencialmente diferente de las respuestas existentes que usan ffmpeg? ¿Cómo?
ilkkachu
1
@ilkkachu Estaba buscando una solución muy rápida, simple y fácil de recordar. Las otras respuestas son mucho más complicadas y no tan fáciles de entender a primera vista (sin embargo, probablemente resulten en resultados de mayor calidad).
luator
2
ifile=~/test.ogv

echo '# Determine input WxH and FPS' 
eval "$(ffmpeg -i "$ifile" 2>&1 |sed -nr 's/.*Stream.*Video.* ([0-9]+x[0-9]+),.*[^[0-9.]([0-9.]+).*tbr,.*/WxH=\1;FPS=\2/p')"

echo '# Output multiple images from the input video'
ffmpeg -i "$ifile" -r $FPS -s $WxH -f image2 -vframes 100 -y ~/test-%03d.jpg 2>/dev/null

echo '# use ImageMagic "convert" to generate the animated .gif' 
convert -delay 20 ~/test-[0-9][0-9][0-9].jpg  ~/test.gif 

echo '# remove temp image files'    
rm -f  ~/test-[0-9][0-9][0-9].jpg

echo 'Done!'
Peter.O
fuente
1
Sugiera convertir a PNG, no a JPEG, más grande pero reduce los artefactos de compresión.
ideasman42