Att skapa video från stillbilder

Uppdaterad 25.8.2013 kl. 10.15.

Jag övervakar mitt växthus med hjälp av en Raspberry Pi dator som kör en helt normal Linux. Om allt går som beräknat bör jag under växtperioden samla in ungefär 1500 separata bilder i jpeg format. Bilderna tas automatiskt med 30 minuters intervall.

För att man enkelt skall kunna följa med hur växterna växer måste jpeg bilderna kombineras så att man får en normal videosekvens. Hur man gör detta med hjälp av Linux beskrivs nedan.

Jag har då den här artikeln skrivs ungefär 130 jpeg-bilder från det att jag ursprungligen sådde tills idag, tre dagar senare. Bildmängden är inte ännu ofantlig så det kan vara bra att i det här skedet se hur processeringen skall göras.

Det första steget är att installera ImageMagick på min bordsdator … som är betydligt snabbare än RaspberryPi. All bildbehandling görs alltså på min ”stora” dator eftersom den är åtminstone 2 – 3 ggr. snabbare än RPi. I princip skulle det inte finnas några hinder för att all bildbehandling skulle ske direkt på RPi.

Det visade sig att den andra komponenten jag behöver d.v.s. ffmpeg redan var installerad.

All bildbehandling sker direkt från kommandoraden. Innan man sätter igång är det skäl att skapa en katalog med kopior av alla bilderna eftersom bildbehandlingen är destruktiv … vi vill inte förstöra orginalen. Jag skapade en ny katalog för bilderna ~/Dokument/still_till_video och kopierade alla bilder jag till idag har samlat in:

lasse@deNeb:~/Dokument/still_till_video$ cp /media/lasse/80C5-90E6/*.jpg .
test0.jpg test11.jpg test22.jpg test42.jpg test62.jpg test82.jpg
test100.jpg test120.jpg test23.jpg test43.jpg test63.jpg test83.jpg
test101.jpg test121.jpg test24.jpg test44.jpg test64.jpg test84.jpg
test102.jpg test122.jpg test25.jpg test45.jpg test65.jpg test85.jpg
test103.jpg test123.jpg test26.jpg test46.jpg test66.jpg test86.jpg
test104.jpg test124.jpg test27.jpg test47.jpg test67.jpg test87.jpg
test105.jpg test125.jpg test28.jpg test48.jpg test68.jpg test88.jpg
test106.jpg test126.jpg test29.jpg test49.jpg test69.jpg test89.jpg
test107.jpg test127.jpg test2.jpg test4.jpg test6.jpg test8.jpg
test108.jpg test128.jpg test30.jpg test50.jpg test70.jpg test90.jpg
test109.jpg test129.jpg test31.jpg test51.jpg test71.jpg test91.jpg
test10.jpg test12.jpg test32.jpg test52.jpg test72.jpg test92.jpg
test110.jpg test13.jpg test33.jpg test53.jpg test73.jpg test93.jpg
test111.jpg test14.jpg test34.jpg test54.jpg test74.jpg test94.jpg
test112.jpg test15.jpg test35.jpg test55.jpg test75.jpg test95.jpg
test113.jpg test16.jpg test36.jpg test56.jpg test76.jpg test96.jpg
test114.jpg test17.jpg test37.jpg test57.jpg test77.jpg test97.jpg
test115.jpg test18.jpg test38.jpg test58.jpg test78.jpg test98.jpg
test116.jpg test19.jpg test39.jpg test59.jpg test79.jpg test99.jpg
test117.jpg test1.jpg test3.jpg test5.jpg test7.jpg test9.jpg
test118.jpg test20.jpg test40.jpg test60.jpg test80.jpg
test119.jpg test21.jpg test41.jpg test61.jpg test81.jpg

Orginalen finns kvar på minnepinnen vilket betyder att om jag klantar mig vid bildbehandlingen är det bara att börja om från början.

Jag börjar processen med att skala om bilderna med programmet mogrify som är en del av ImageMagick programpaketet.

mogrify -resize 1024×768 *.jpg

Det lagringsutrymme vi behöver minskar rätt drastiskt genom att bilderna blir mindre …
Utrymmesbehovet sjönk från ca. 2 MByte till 0.5 MByte räknat per delbild.

Följande skede är att knyta ihop delbilder så att vi skapar mellanliggande bilder som är ”medeltal” av bilderna på vardera sidan. Vi får på detta sätt en video som kör mjukare. Jag låter programmet skapa två mellanliggande bilder mellan varje bildpar.

convert *.jpg -delay 10 -morph 2 %05d.morph.jpg

Resultatet blev en serie på 387 bilder som vi nu skall knyta ihop till en video och omforma så att videon kan spelas med vanliga videospelare.

Resultatet blev en mp4 video som kör utan problem. Storleken är 13.8 MByte.
Hela processen kan automatiseras geom att lägga kommandona i ett skript (kommandofil).

Det visade sig att videon blev fel eftersom sorteringen av bildfilerna inte stämde. Problemet löstes genom att lägga till ett lämpligt antal förnollor före nummern i bildfilerna. Mina råa bildfiler heter test0.jpg , test1.jpg … test10.jpg … test99.jpg , test100.jpg osv. Problemet är att datorn uppfattar att filernas ordningsföljd utan förnollor borde vara test0.jpg, test1.jpg, test10.jpg … test2.jpg etc. Problemet löstes genom att automatiskt döpa om filerna till test0001.jpg, test0002.jpg etc. vilket nu sorteras korrekt.

#!/bin/bash
# Script to copy pictures from the flsh drive and process
# these pictures into a mp4 video.
date
rm *.jpg
rm *.mp4
cp /media/lasse/80C5-90E6/*.jpg .
# Change numbering to sort correctly by adding suitable number of zeros before numbers
prename ‘s/test/test0/’ test?.jpg
prename ‘s/test/test0/’ test??.jpg
prename ‘s/test/test0/’ test???.jpg
mogrify -resize 1024×768 *.jpg
convert *.jpg -delay 10 -morph 2 %05d.morph.jpg
ffmpeg -r 25 -qscale 1 -i %05d.morph.jpg output.mp4
# Remove temporary files not needed anymore…
rm *.jpg
echo ”Done!”
date

Totaltiden för hela processen var ungefär två minuter av vilken största delen gick till kopiering av bilddata från RPi till minnepinnen och från minnefinnen till min dator.

307_20130825

Fig. 1  Situationen den 25.8 d.v.s. en vecka efter sådd. Det kraftiga rödsticket i bilden beror på LED-belysningen som innehåller endast röda och blå våglängder. Orsaken till att det går att urskilja andra färger är att jag separat belyser plantorna med en 4 W vit LED-lampa. Det vita ljuset gör att det speciella växtljuset blir mindre irriterande för ögonen.

 

 

 

 

 

 

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s


%d bloggare gillar detta: