CamOnRoad: erinevus redaktsioonide vahel
| 8. rida: | 8. rida: | ||
Selleks, et videokaardistamise tarbeks talletatud materjali oleks võimalik normaalselt kasutada, on vajalik videofailide ja GPS logi omavaheline seostamine. Nagu ülal juba öeldud, siis otseselt selle rakenduse poolt ei tundunud rajalogi talletuvat. Kuna videoga paralleelselt sai 2016. aastal talletatud siiski ka OruxMaps rakendusega rajalogi, siis sai 2018. aasta mais tehtud katse neid kokku siduda. | Selleks, et videokaardistamise tarbeks talletatud materjali oleks võimalik normaalselt kasutada, on vajalik videofailide ja GPS logi omavaheline seostamine. Nagu ülal juba öeldud, siis otseselt selle rakenduse poolt ei tundunud rajalogi talletuvat. Kuna videoga paralleelselt sai 2016. aastal talletatud siiski ka OruxMaps rakendusega rajalogi, siis sai 2018. aasta mais tehtud katse neid kokku siduda. | ||
Kokku sidumisel on | Kokku sidumisel on oluline aga see, kui täpselt on võimalik videofailidest hiljem ajatemplid kätte saada - ehk siis saada aru, mis hetkel täpselt video algas või lõppes. Et vältida üleliigset käsitööd, siis on eelistatud kindlasti skriptitav lahendus. | ||
Selgus, et: | Selgus, et: | ||
Redaktsioon: 26. mai 2018, kell 17:55
Sissejuhatus
Tegemist on Android rakendusega, mis peaks imiteerima autokaamera funktsionaalsust nutitelefonil. Konkreetsemalt sai seda rakendust proovitud 2016. aasta Tipikate Rattamatka korraldusel, kus osad läbi jalutatud metsarajad sellega üles filmitud said. Ja kuigi esialgu tunnetuslikult tundus, et rakendus võiks talletada ka GPS info, siis reaalselt seda seost leida pole suutnud. Ka katse 2018. aasta mais exiftool nimelise utiliidiga andis tulemuseks tühjad GPX failid.
Rakendus talletab videfailid MP4 kujul, mingit eraldi rajalogi kuskilt välja ei paista.
Andmete järeltöötlus
Sissejuhatus
Selleks, et videokaardistamise tarbeks talletatud materjali oleks võimalik normaalselt kasutada, on vajalik videofailide ja GPS logi omavaheline seostamine. Nagu ülal juba öeldud, siis otseselt selle rakenduse poolt ei tundunud rajalogi talletuvat. Kuna videoga paralleelselt sai 2016. aastal talletatud siiski ka OruxMaps rakendusega rajalogi, siis sai 2018. aasta mais tehtud katse neid kokku siduda.
Kokku sidumisel on oluline aga see, kui täpselt on võimalik videofailidest hiljem ajatemplid kätte saada - ehk siis saada aru, mis hetkel täpselt video algas või lõppes. Et vältida üleliigset käsitööd, siis on eelistatud kindlasti skriptitav lahendus.
Selgus, et:
- Video alguse ajatempel talletatakse failinimesse, arvestades ajavööndi aega. Faili nimi on kujul VID_DD.MM.YYYY_HH_MM_SS.mp4.
- Faili sisse Create Date väljale kirjutatakse video lõpu aeg. Siiski on CamOnRoad tarkvaras ilmselt väike viga, sest see aeg kirjutatakse UTC ajana kohta, kust hiljem tõlgendatakse seda vööndiajana.
Kui täpselt alguse ja lõpu ajatemplid tegeliku kellaga kokku lähevad, pole teada. OruxMaps talletab vaikimisi rajapunkte selliselt, et üksteisele liiga lähedale kahte punkti ei pane. Sellisel juhul ei ole aga hiljem interpoleerimise teel võimalik saada teada lõplikku tõde, kus punktis mingil kellaajal ikkagi oldi - kui inimene mingis punktid veidi aega seisis, siis tegelikult sünteesitakse sinna sujuv liikumine eelmisest punktist kuni järgmise punktini. Kui CamOnRoad ka edaspidi kasutust peaks leidma, siis tasuks rajalogi talletada kas OruxMaps parema seadistusega, päris GPS seadmega ja/või filmida referentsi saamiseks täpset kella.
Kui liita ülalkirjeldatud video algusajale video pikkus, siis see ei kattu päris 100% video lõpu ajatempliga, vaid lõpp võib olla ka kuni paar sekundit hiljem. Kumb neist õigem referents on, pole hetkel teada. Hetkel on allpool toodud näidetes eeldatud, et video tegelik algus on hoopis 3 sekundit enne faili nimes olevat ajatemplit - sellisena tundus subjektiivselt rada ja video paremini kokku minevat kui ilma selle lahutustehteta.
Rajalogi töötlemine
Käesolev peatükk eeldab, et paralleelselt videoga talletati eraldi nutirakenduse (nt OruxMaps) või GPS seadmega ka rajalogi, see katab ära kogu filmitud aja (võib katta ka rohkem) ning seal olevad ajatemplid on talletunud ja korrektsed.
Allpool on rajalogi töötlemiseks kasutatud GPSBabel nimelist utiliiti, mille kohta võib rohkem lugeda siit. Kuigi GPSBabel ise on olemas nii Windowsile kui Linuxile, siis allpool toodud skript on tehtud ja proovitud Ubuntu peal.
Kui kasutajal on olemas GPX fail, kus on kaetud kogu filmitud periood, siis tuleks sellele esmalt väike eeltöötlus teha. Selleks tuleb anda järgmine käsk:
gpsbabel -t -i gpx -f all.gpx -x nuketypes,waypoints,routes -x track,pack,start=2000 -x interpolate,time=1 -o gpx -F all_interpolated.gpx
See teeb järgmist:
- Sisend võetakse failist all.gpx ja väljund kirjutatakse faili all_interpolated.gpx.
- Käsk viskab välja huvipunktid ja marsruudid, jättes alles ainult rajalogi.
- Ühendab kõik rajasegmendid üheks segmendiks kokku. Eeldus on, et kattuvaid ajatempleid ei ole ning ajatemplid jooksevad alati suurenevas järjekorras. Kui see nii ei ole, võib pack asemel kasutada merge, kuid probleemide vältimiseks tasub sel juhul ka manuaalselt uurida, miks rajalogis korduvaid või ebakorrapäraseid punkte üldse leidub.
- Viskab välja rajapunktid, mille ajatempel on varasem kui aasta 2000. Selle punkti suurem mõte on visata välja ilma ajatemplita rajapunktid.
- Interpoleerib rajapunkte juurde, nii et kogu ajavahemik oleks 1-sekundise intervalliga kaetud.
Nüüd saab rajalogi tükeldada vastavalt videofailidele:
#!/bin/bash
EXTENSION="mp4"
while IFS= read -r -d '' -u 9
do
DATESTR=(${REPLY//[._]/ })
CREATEDATE=`date --date="${DATESTR[3]}-${DATESTR[2]}-${DATESTR[1]} ${DATESTR[4]}:${DATESTR[5]}:${DATESTR[6]}" +"%s"`
DURATION=`exiftool -S -s -n -trackduration "$REPLY" | cut -d'.' -f1`
STARTDATE=$(($CREATEDATE))
ENDDATE=$(($CREATEDATE + $DURATION))
STARTSTR=`date -u -d @"$STARTDATE" +"%Y%m%d%H%M%S"`
ENDSTR=`date -u -d @"$ENDDATE" +"%Y%m%d%H%M%S"`
gpsbabel -t -i gpx -f all_interpolated.gpx -x track,start=$STARTSTR,stop=$ENDSTR -o gpx -F "$(basename "$REPLY" .$EXTENSION)".gpx
done 9< <( find . -type f -iname "*.$EXTENSION" -print0 )
Video töötlemine
2016. aastal said videod talletatud portrait režiimis, mis pole kindlasti kõige sobivam valik. Selgus, et füüsiliselt talletatakse pilt ikkagi landscape režiimis, lihtsalt EXIF infosse lisatakse Rotation=90. Tulemuseks on see, et osad meediapleierid näitavad videot õigesti, osad mitte. VLC Player näitab õigesti, RegistratorViewer aga pööratult. Kõige lihtsam viis video ümber kodeerimiseks on ffmpeg, mille uuemad (2015+) versioonid teevad pildi automaatset pööramist lausa vaikimisi. Ehk siis pilt kodeeritakse ringi vastavalt EXIF info rotation väljale ning rotation väli ise keeratakse nulli. Kõik kaustas olevad MP4 videod keerab õigeks järgmine skript:
#!/bin/bash
EXTENSION="mp4"
mkdir -f out
while IFS= read -r -d '' -u 9
do
ffmpeg -i "$REPLY" -c:a copy "out/$REPLY"
done 9< <( find . -type f -iname "*.$EXTENSION" -print0 )
Tundub, et see pole RegistratorViewer-i jaoks küll hädavajalik, aga videofailide sees olevad ajatemplid saab korda seada järgmise skriptiga:
#!/bin/bash
EXTENSION="mp4"
while IFS= read -r -d '' -u 9
do
DATESTR=(${REPLY//[._]/ })
DATESTR2="${DATESTR[3]}:${DATESTR[2]}:${DATESTR[1]} ${DATESTR[4]}:${DATESTR[5]}:${DATESTR[6]}"
exiftool "-CreateDate=$DATESTR2" $REPLY
done 9< <( find . -type f -iname "*.$EXTENSION" -print0 )
Nagu ülal öeldud, siis vaikimisi olid CamOnRoad poolt tehtud failides nendel väljadel video lõpu ajad (või isegi sekund-paar peale video lõppu) ning lisaks nullis video pööramine need päris ära.