Archive for Linux

HD video loomine

Täna sai mul valmis esimene omatehtud HD video. Tegemist oli lihtsalt katsetusega, et suurem hulk kõvakettale kogunenud pilte videoks teha. Pean tunnistama, et ma väga osav videotöötleja ei ole. Seetõttu läks õppimiseks, juhendite otsimiseks ning lugemiseks päris palju aega. Samuti tuli mul arvutile veidi tarkust juurde tõmmata, et video tegemine ikka hästi õnnestuks. Täna aga sai see proovitöö valmis ja seekord tulemus mind juba rahuldas. Kui keegi veel peaks sellist tööd tegema, siis siinkohal minu kogemused: ehk on sellest abi.

Algne olukord: kataloogis hunnik pilte, mis tehtud perioodilise ajavahemiku järel. Pildid nagu pildid ikka, sellised nagu nad kaamerast tulevad: 3246x2448px. Piltide nimed olid stiilis IMGP2353.JPG – pange tähele, kaamerad panevad piltidele sageli nimed SUURTE TÄHTEDEGA. Minule see ei meeldi, mina muudan piltide nimed ära väiketähelisteks. Kuna ma sageli pean asju üles panema veebi, ja kuna enamasti veebiserverid on mingid Linux’id või BSD’d, siis tasub teada, et seal tehakse suurtel ja väikestel tähtedel rangelt vahet. Ja et mitte meeles pidada, kas pildi nimi tuli nüüd suurte või väikeste tähtedega kirjutada, siis muudan ma alati KÕIK failide nimed ära väiketähelisteks.

Nii et esimese asjana nimetasin failid omale sobivalt ümber:

find -name ‘*.JPG’ | gawk ‘BEGIN{ a=0 }{ printf “mv %s img_%06d.jpg\n”, $0, a++ }’ | bash

Selle käsu tulemusel said mu failid nimeks img_000000.jpg, img_000001.jpg, img_000002.jpg jne kuni viimaseni. Selle käsu andmise juures on oluline, et ei oleks alamkatalooge (sest käsk “find” otsib rekursiivselt ka alamkataloogidest). Ja “%06d” määrab, mitu numbrikohta failide nimetamisel kasutatakse – minul oli siis kuus umbrikohta. Vajalik numbrikohtade arv sõltub sellest, kui palju pilte on vaja järjekorras ümber nimetada. kui on vaja 1000 pilt, siis peaks see olema “%05d”, kui aga on kümme pilti, siis piisab ka “%03d”. Mulle meeldib, et alati jääb alles alguse 0 – seepärast on mul alati numbrikohtade arv ühe võrra vajalikust suurem.

HD video on külgede suhtega 16:9, laiuseks on 1920px ja kõrguseks 1080px. See tähendab, et algsed pildid sellisel kujul video tegemiseks ei sobi, kuna külgede suhe on hoopis 3:4 ja ka mõõtmed pikslites on liiga suured. Niisiis esmalt peaks pildid viima õigesse mõõtu selliselt, et pildil olevate objektide proportsioonid jääks ikka paika. See tähendab, et ei saa lihtsalt näiteks pildi kõrgust vähendada, kuna sel juhul muutuksid kõik piltidel olevad objektid madalaks ja laiaks. Inimesed oleks siis lühikesed ja paksud – aga kes see ikka tahab lühike ja paks olla? Teiselt poolt tahaks kaadrist maha võtta nii vähe kui võimalik, mis seab omad piirid piltide lõikamisele.

Et leida kaadrist õiget kohta, kasutasin programmi Gimp, mille abil määrasin piltide hulgitöötlemiseks vajalikud lõikamise parameetrid. Parameetriteks on kaadri suurus ja lõikamise ülemise vasaku nurga asukoht. Õigete parameetrite leidmist näitas see juhend: https://www.auroralinux.net/cropping-multiple-images-the-same-way-short-tutorial/ (kahjuks on see leht maha võetud: Tarmo märkus 9. sept. 2022) – see juhend oli küll inglisekeelne.

Nüüd, kui õige kaadrist lõigatav osa on leitud, on aeg asuda pilte töötlema. Minu proovitöös oli 54 pilti, aga pilte võib olla ka 54000 näiteks… Piltide arvust sõltub loomulikult ka töötlemise aeg. Aga töötlemise aeg sõltub ka arvuti võimekusest. Igal juhul tasub suure piltide hulga korral arvestada, et töötlemine võib kesta tunde.

Mina kasutasin piltide lõikamiseks käsku “mogrify”, mis on Linux masinas olemas, kui on installeeritud pakett ImageMagick. Minul oli vajalik selline käsk:

mogrify -crop 3264×1836+0+343 *.jpg

Nagu näha, laiuse jätsin samaks, aga ülevalt lõikasin 323px välja ja uueks kõrguseks sai 1836px. Tulemusena tekkinud pildid olid aga ikka veel liiga suured: 3264x1836pg, aga vaja oli ju 1920x1080px.

Nüüd järgnes piltide skaleerimine. Määrata on vaja vaid laius, kõrgus skaleeritakse automaatselt proportsioone säilitades:

mogrify -resize 1920 *.jpg

Arvestada tuleb, et “mogrify -resize” käsk võtab kõige kauem aega. Nüüd olid mul valmis pildid ilusasti nimede järjekorras ja õiges mõõdus HD video jaoks.

Nüüd polnud enam vaja muud, kui leida õige käsk video tekitamiseks. Mina leidsin endale sobiva olevat sellise käsu:

ffmpeg -f image2 -i “img_%06d.jpg” -r 25 -s 1920×1080 -qscale 12 -an “output4.mov”

Siin ka programmile ffmpeg lisatud mõnede võtmete selgitused:
-i “img_%06d.jpg” – mllised pildid on programmi sisendiks
-r 25 – etteantud kaadrisagedus (25 kaadrit sekundis)
-s 1920×1080 – tulemueks saadava video laius ja kõrgus pikslites
-qscale 12 – siin kasutatakse inglise keeles terminit “quantization scale” – mida ma ei oska hästi eesti keeles väljendada. Sellest sõltub oluliselt saadava videopildi tihedus ja samuti ka tulemusfaili maht. Mida väiksem on see skaala, seda suurem on fail ja parem video.

Programmil ffmpeg on võtmeid palju. Kes inglise keelt loeb, siis pärism hea juhendi piltidest video tegemiseks leiab siit: http://en.wikibooks.org/wiki/FFMPEG_An_Intermediate_Guide/image_sequence
Sobivaid võtmeid ja väärtusi kasutades saab ilmselt üsna igasuguseid videosid teha, ka koos audiorajaga, kui vaja. Põhjalikku juhendit ffmpeg kohta saab lugeda siit: http://ffmpeg.org/ffmpeg.html

Mina sain palju targemaks. Ja et meelest ei läheks, sai see nüüd siia ka kirja pandud. Kui kellelegi sellest kasu on, siis on veel topelt hea. Ah ja, lõpuks võib veel nimetada, et proovitöös olnud 54-st pildist mahuga kokku 48MB sai HD video, mille maht oli 6,5MB ja pikkus ca 2 sekundit.