Today I’m going to show you a very small script that allows you to convert any video (as long as it is supported by mplayer) to a GIF.
mplayer is popular media player available for multiple operating systems that support a wide range of video formats. The convert tool is an utility that lets you convert between multiple image formats among other definitions. Since the mplayer takes screenshots using jpeg format, we need to use the convert tool to do the convertion to aGIF format.
Copy the following code, save it to a file and change its permissions (chmod a+x) and you are ready to roll 🙂
#!/bin/sh TMPDIR=/tmp/animated shopt -s nocaseglob if [ ! -d "$TMPDIR" ] then mkdir $TMPDIR fi \rm $TMPDIR/* &> /dev/null if [ $# -lt 3 ] then echo -e "Usage: $0 \nExample:\n$0 00:15:11 10 myvideo.avi 320:240" exit 1 fi if [ -n "$4" ] then SCALE="scale=$4" fi echo "Generating screenshots. Please be patitent..." mplayer -ao null -ss $1 -endpos $2 $3 -vo jpeg:outdir=$TMPDIR/ -vf $SCALE &> /dev/null if [ -f $TMPDIR/00000001.jpg ] then echo "Finished generating frames. Assembling the animated GIF..." convert -delay 5 $TMPDIR/*.jpg $TMPDIR/output.gif echo "Done! Please check the $TMPDIR/output.gif" exit 0 else echo -e "Oops\! Something went wrong and the frames were not generated. Check your parameters\!" exit 1 fi
Just try it and let me know 😉
Doesn’t work I’m afraid. Errors:-
/home/garf/bin/anigif: 3: /home/garf/bin/anigif: shopt: not found
/home/garf/bin/anigif: 9: /home/garf/bin/anigif: Syntax error: “&” unexpected
Interestingly shell options *does* work on our machines when shopt command is executed separately. And I’m sure line 9 is definitely wrong – the bit that reads “&>”
About the “shopt” error I can’t understand why is it happening to you. I already tried this script on several computers and it worked in all of them flawlessly.
About the second error, you are right but that was due to wordpress parsing html entities. You should really use &> (just to ignore stderr) instead of & and < entities.
Anyway, I already fixed that. Thanks for the tip 😉
I Remembered another thing.
I’m assuming that /bin/sh is your current shell but this could be a symlink to a shell other than the a one you are using by default.
Find out which shell are you using by default ( type this on your console “env | grep SHELL” and check the output) and edit the header of this script to match your current shell.
shopt is a bash builtin: http://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
just change /bin/sh to /bin/bash and it will work even in distros where bash isn’t default shell
of course, it needs to be installed 🙂