I created OGV videos with the gtk-recordmydesktop screencasting program, trying to tackle this problem here with bruteforce over X. I can view the videos with VLC.

Now, the task is to find some ways to convert OGV videos into GIF animations so I can display them on SE. How can I do that?

take a look at this: https://askubuntu.com/questions/107726/how-to-create-animated-gif-images-of-a-screencast/107735#107735

..... After the Desktop Recorder has saved the recording into an OGV video, MPlayer will be used to capture JPEG screenshots, saving them into the 'output' directory.

On a terminal:

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

Use ImageMagick to convert the screenshots into an animated gifs.

convert output/* output.gif

you can optimize the screenshots this way:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
  • 1
    For a large number of images, I had to add -limit map 1 to convert (got a "Killed" otherwise). – Ax3l Sep 8 '14 at 15:12
  • With a 30 second ogv video, the convert command took all my cpu and was going for over 10 minutes before i stopped it. adding -limit map 1 to the command did not fix it. – max pleaner Oct 21 '15 at 21:19
  • 1
    Try this for converting ffmpeg -i output/00000%03d.jpg output.gif unix.stackexchange.com/questions/24014/… – Dawid Drozd Jul 13 '16 at 16:07
  • It bears mention that direct convert output/* -fuzz 10% -layers Optimize optimised.gif is possible as well, and noticeably faster than the two-command path. Also, mplayer readily creates png screenshots as well, which may be preferred for captures of websites or GUIs. – Raphael Oct 4 '17 at 10:09

Simple script with good quality

Script:

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

Code from: https://superuser.com/a/556031/295664

Without palette: (231 KB)

enter image description here

With palette:(573 KB)

enter image description here

This one-liner is working for me:

ffmpeg -i video.ogv video.gif
  • 2
    Is this essentially different from the existing answers that use ffmpeg? How? – ilkkachu Dec 8 '17 at 15:12
  • 1
    @ilkkachu I was looking for a very quick, simple and easy-to-remember solution. The other answers are much more complicated and not so easy to understand at first glance (probably resulting in higher quality results, though). – luator Dec 8 '17 at 22:53
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!'
  • 1
    Suggest converting to PNG, not JPEG, larger but reduces re-compression artifacts. – ideasman42 Mar 30 '14 at 6:50

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.