Skapa animerade GIF-bilder i UNIX

Här har ni en kort guide om hur man skapar animerade GIF-bilder från filmsekvenser i UNIX. Jag använder convert från ImageMagick och mplayer för detta, på FreeBSD men dessa verktyg finns tillgängliga för många andra system som t.ex. Linux.

MPlayer har en video drivrutin som heter gif89a och kan dumpa sekvenser till färdiga animerade gif-bilder med hjälp av -vo argumentet. Den producerar dock bilder av dålig färgkvalitet och detta framgår om ni läser manualen för mplayer. Därför använder vi oss endast av mplayer för att dumpa en viss sekvens av en videofil till png bilder, sedan använder vi convert verktygen för att sätta ihop dom till en animerad gif-bild. Mycket enklare och smidigare än att sitta och manuellt göra det i Gimp.

Titta på er videofil med mplayer och tryck på o för att visa en timer i hörnet av skärmen. Välj ut vilken sekvens av filmen ni ska ha och skriv ner tidsmarkeringen. Sedan kör ni mplayer för att dumpa den utvalda sekvensen i den katalog nu står i.

 mkdir gif
 cd gif
 mplayer -ss 00:45:00 -endpos 00:00:15 -vo png:z=6 ../data/video.avi

Nu kommer mplayer dumpa 15 sekunder av video från en position 45 minuter in i spelningen. Tänk på att när ni anger en startposition med -ss argumentet så måste ni ange en slutposition (-endpos) räknat från den tidigare angivna startpositionen.

Värdet jag anger för png drivrutinen (-vo png:z=6) betyder att komprimeringsnivån av png-bilderna är 6, av 9. Man kan ange 0 till 9, läs mer om detta i manualen för mplayer. Första argumentet -ss 00:45:00 anger var videofilen ska börja spelas medan andra argumentet -endpos 00:00:15 anger när den ska sluta.

Kom ihåg att ni kan använda display för att visa bilderna, ibland måste man finjustera lite och ta bort enstaka ramar eller korta ner hela sekvensen. Oavsett vilka bilder ni tar bort så kommer alla resterande png-bilder i katalogen användas i den resulterande gif-animationen.

MPlayer tycker om att dumpa den första ramen i videofilen även om man angett var den ska starta, så ni kommer antagligen få ta bort den första bilden vid de flesta tillfällen.

 rm 00000001.png

Nu behöver vi bara köra ett convert kommando för att skapa vår animerade GIF-bild.

 convert *.png -mattecolor '#000' -frame 1% -delay 30 -resize 50% resultat.gif

Nu har jag lagt till lite argument som jag tänkte förklara för att lära er lite om convert och vad ni kan göra med detta underbara verktyg. För det första anger jag en färg med -mattecolor '#000' och ni som känner till hexadecimala färgkoder vet att det är svart, detta argumentet tar färgvärden precis likadant som svg och påminner därför mycket om HTML. Nästa argument, -frame 1%, lägger till en ram runt bilden som är 1% av bildens storlek i tjocklek. Vi anger fördröjningen för visningen av varje bild med -delay 30 i ticks och med -resize 50% kan vi samtidigt ändra storlek på bilden så den inte blir för stor.

Ni kan experimentera lite själva med detta, läs manualen för convert så hittar ni en länk till deras webbsida där alla argument förklaras mer djupgående.