CamOnRoad
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 siinkohal aga oluliseks asjaoluks 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. Tundub, et see võib olla ka veel aeg kuni paar sekundit peale video lõppu. Lisaks kirjutatakse see aeg UTC ajana, kuid seda tõlgendatakse vööndiajana.
Eelnevast lähtudes tasub nende videode puhul lugeda ajatempel pigem faili nimest.
Rajalogi töötlemine
Selleks, et lõigata OruxMaps rajalogi vastavalt videofailidele, tuleks esmalt 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:
- Viskab välja huvipunktid ja marsruudid, jättes alles ainult rajalogi.
- Ühendab kõik rajasegmendid üheks segmendiks kokku.
- 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 + 1))
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.