timelapse

15.09.2005., četvrtak

Ubrzavanje Time Lapse videa (3/6)

U prethodnom postu sam objasnio kako snimiti sirovi Time Lapse video. Tako snimljena datoteka sama po sebi nije previše korisna. Kako bi se dobio ekeft očekivan od ovog tipa videa, snimku je potrebno ubrzati.

Ukratko
Postupak je slijedeći:
1. otvoriti snimljeni video
2. podesiti frame rate i decrement (Video->Frame rate)
3. odabrati Direct stream copy
4. spremiti video (File->Save as AVI)

Sve jasno? Nije? Čitajte dalje...

Princip ubrzavanja
Kao što sam u prethodnom postu naveo, ubrzanje videa se temelji na: povećanju framerate-a i izbacivanju frameova.

Originalni video je snimljen pri malom frameratu (0.5 fps), što znači da se novi frame pojavljuje svake dvije sekunde. Još je od vremena braća Lumiere poznato da je potrebno barem 25 fps da bi ljudsko oko dobilo privid animirane slike. Dakle, rezultirajući video mora imati 25fps.

Tip: Prije no što se bacite u čitanje ovog, možda i preopširnog poglavlja, skočite na poglavlje naslovljeno "Framerate za nestrpljive". Tamo se nalazi skraćena verzija ove mudrosti, koju možete odmah i primijeniti.

U VirtualDub-u se ubrzavanje radi u dva koraka: u prvom se se povećava framerate, a u drugom izbacuju frameovi. Imajući na umu ciljanih 25fps, množimo tu vrijednost sa faktorom 6 i dobivamo 150fps. Dakle, u prvom koraku podižemo framerate na 150fps, nakon čega uzimamo samo svaku 6. sličicu, te dobivamo 25fps - ono što nam treba!

Sigurno se pitate zašto koristim faktor 6. Objašnjenje se nalazi u prethodnom postu: kod snimanja je kodek (Indeo) podešen tako da svaki 6. frame bude keyframe. No, ne mora se koristiti samo faktor 6, već i svi njegovi prosti faktori (brojevi s kojima je djeljiv: 2, 3), te svi njegovi višekratnici (12, 18...). Ako se koriste njegovi prosti faktori, ubrzanje će biti manje, a ako kod višekratnika veće.

Sad sam se malo raspisao, ali računica je jednostavna.
Fps (adjustment_fps) i faktor (decrimate) dijeljenja računate na slijedeći način:

1. Početni podaci

ciljani_fps = 25 fps
ciljana_duljina = oko 3 min = 180 sec

original_fps = 0.5 fps
original_duljina = 13h * 60min * 60sec = 46.800 sec
original_br_frameova = 46.800 sec * 0.5 fps = 23.400

2. Međuračun

među_duljina = original_br_frameova / ciljani_fps = 936 sec = 15,6 min
među_decrimate = među_duljina / ciljana_duljina = 5,2

3. Završni račun

decrimate zaokružujemo na najbliži prosti faktor ili višekratnik
broja 6 (učestalost keyframeova - vidi postavke kodeka kod capture)
-> decrimate = 6

adjustment_fps = ciljani_fps * decrimate = 150 fps

Maksimalni fps koji možete postaviti u VirtualDubu je 180. Ukoliko bi željeli video dodatno ubrzati, postupak ubrzavanja možete ponoviti (koristite Video->Direct stream copy).

Framerate za nestrpljive
Nadam se da vas nisam prestrašio sa ovim računom! No, da se ne davite s prva dva koraka, dovoljno je da napravite računicu iz 3. koraka: nasumično odaberete decrement (paziti na učestalost keyframe-ova), pa iz toga izračunate adjustment_fps. Ako je rezultirajući video prebrz, smanjite decrement, pa ponovite postupak. Evo vam nekoliko primjera podešavanja: 25fps/1, 50fps/2, 75fps/3, 150fps/6

Ako kod podstavki snimanja videa umjesto 6 upišete neku drugu vrijednost učestalost keyframe-a, cijeli ovaj račun se mijenja. Na primjer, ako postavite da kodek radi keyframe svakih 4 frame-ova, tada bi mogli odabrati jedno od slijedećih podešavanja: 25fps/1, 50fps/2, 100fps/4

Ovim postavkama se u VirtualDub-u pristupa putem opcije Video->Frame Rate, a postavke izgledaju ovako:



Događaj s ključnim trenutcima
Kod snimanja nekog događaja, može se pojaviti potreba da neki ključne trenutci budu snimljeni detaljnije. Iz takve snimke se rade dva rezultirajuća videa: video cijelog događaja sa većim ubrzanjem vremena, te video ključnog dijela sa manjim ubrzanjem vremena.

Kao primjer mogu navesti svoje snimanje cijelog dana. Osim cijelog dana, neke ključne događaje (dolazak katamarana - redovna linija) sam želio snimiti detaljnije.
Želio bih tih 13 sati svesti na 3 minute. Ako bih kod ubrzavanja samo povećao framerate na 25fps, video bih morao snimati sa 0.1 fps (faktor_ubrzanja = 13h * 3600sec / (3min * 60sec) = 260; 25fps / 260 = oko 0,1 fps). Ključni trenutak koji želim zasebno prikazati je dolazak i odlazak katamarana, koji traje oko 15 minuta. Pokušajmo sada izračunati koliko dugo bi trajala ta sekvenca rezultirajućeg videa: u 15 minuta kamera snimi 90 sličica (15min * 60sec * 0.1 fps). Ubrzavši taj video na 25fps (90/25fps), dobili bi manje od 4 sekunde videa - očito premalo!

Iz tog je razloga video sniman sa 0.5 fps. Time postižemo da rezultirajuća sekvenca dolaska katamarana traje 20sec.

Sad se pojavljuje drugi problem: rezultirajući video cijelog dana je predugačak! 13 sati takvog videa rezultirao je u 23.400 sličica. Ubrzavši ga na 25fps, 13sati videa se svelo na 15 minuta, a to je previše. Želja nam je cijeli dan svesti na 3 minute. Rješenje je u preskakanju frameova, koje je opisano prije.

Uzevši tek svaki 6. frame, dobivamo dodatno ubrzanje s faktorom 6. Rezultirajući video cijelog dana je dugačak 2,5 minuta, što je prihvatljivo.

Izdvajanje ključnih trenutaka
Video snimke ključnih trenutaka izdvajamo iz originalnog videa tako da obrišemo iz videa sve što prethodi keyframe-u kojim taj trenutak počinje, te sve što slijedi nakon keyframe-a na kojem je trenutak završio.

Postupak je slijedeći:
1. pozicioniramo se na početak originalnog videa
2. postavimo oznaku početka selekcije
3. pronađemo mjesto na kojem se nalazi ključni trenutak koji želimo izdvojiti
4. pozicioniramo kursor na keyframe na kojem ključni trenutak počinje
5. postavimo oznaku kraja selekcije
6. obrišemo označeni dio videa (Edit->Delete ili Del tipka)

Birsanje onog što slijedi nakon ključnog trenutka:
1. pozicioniramo kursor na keyframe na kojem trenutak završava
2. postavimo oznaku početka selekcije
3. pozicioniramo se na sam kraj originalnog videa
4. postavimo oznaku kraja selekcije
5. obrišemo označeni dio videa (Edit->Delete ili Del tipka)

Al' ovo ste već sigurno sami skužili!

Direct stream copy
VirtualDub ima nekoliko načina na koji video od dekompresora prosljeđuje kompresoru:
- Direct stream copy - ulazni video se zapisuje u izlaznu datoteku bez ikakve obrade
- Fast recompress - ulazni dekompresor je izravno spojen na izlazni kompresor
- Normal recompress - ulazni se video bez modifikacije prosljeđuje izlaznom kompresoru
- Full processing mode - video se prosljeđuje kompresoru tek nakon obrade

Kod Direct stream copy VirtualDub sličice iz ulaznog videa ne prosljeđuje kompresoru, već ih neizmijenjene izravno zapisuje u izlaznu datoteku. S obzirom da ne dolazi do rekompresije, ovaj način rada je najbrži (značajno!).

U opisanom postupku ubrzanja videa ne dolazi do izmjene slikovnog sadržaja. Jedina izmjena koja se radi je promjena framerate-a i izbacivanje pojedinih frame-ova. Iz tog je razloga ovaj način rada najpogodniji za posao koji želimo obaviti.

Kada smo zadovoljni stvorenim videom, rezultirajući video možemo obraditi filterima, te rekomprimirati radi uštede na diskovnom prostoru. O svemu ovome će biti višegovora u slijedećem postu.

Rezultirajući video
Na webu sam objavio nekoliko najzanimljivijih snimaka zaljeva na otoku Susku, a to su:
- zora - zanimljivi trenutak
- dolazak katamarana - zanimljivi trenutak
- cijeli dan

U slijedećim nastavcima...
- kako korigirati boju, svjetlinu, kako dodati logo
- kako objaviti video na webu
- budući time lapse projekti

<< Arhiva >>