CamOnRoad: erinevus redaktsioonide vahel

Allikas: Tipikate Rattamatkaklubi teabebaas
Mine navigeerimisribale Mine otsikasti
124. rida: 124. rida:
</pre>
</pre>


Tundub, et see pole ''RegistratorViewer''-i jaoks küll hädavajalik, aga videofailide sees olevad ajatemplid saab korda seada järgmise skriptiga:
=== Muud skriptid ===
==== Sissejuhatus ====
Siin alajaotuses olevad skriptid '''ei ole''' vajalikud selleks, et CamOnRoad rakendusega talletatud video teha vaadatavaks ''RegistratorViewer''-is. Tegemist on skriptidega, mida sai kasutatud teema uurimise käigus ning mis võivad uuesti päevakorda kerkida, kui on soov teemat edasi arendada. Näiteks:
* Uuring selles osas, kuidas video filmimise aeg täpsemalt teada saada.
* Uuring selles osas, kuidas video ja rajalogi mõne muu rakenduse jaoks töödeldavaks teha.
 
==== Videofailides oleva Create Date välja seadistamine ====
Allpool toodud skript loeb faili nimest välja tema loomise aja ning kirjutab selle faili sisse Create Date väljale:


<pre>
<pre>
139. rida: 146. rida:
</pre>
</pre>


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.
== Video vaatamine ==
Praegune parim soovitus CamOnRoad rakendusega talletatud videode vaatamiseks on [[RegistratorViewer]]. Tuleb lihtsalt avada kõik töödeldud (pööratud) videofailid ning kui kaustas on kaasas ka samanimelised GPX failid, siis avaneb kõik iseenesest. Kui GPX failidena on kasutatud võltsitud ajatemplitega versioone, siis toimub kogu videologi kokku grupeerimine peale avamist automaatselt, muidu tuleb käsitsi teha (''Group with...'').


[[Category:Videokaardistamine]]
[[Category:Videokaardistamine]]

Redaktsioon: 26. mai 2018, kell 20:47

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. Näiteks, kui inimene mingis punktid veidi aega seisis, siis hiljem 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 lisaks mingil hetkel ka 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

Sissejuhatus

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. 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.

Rajalogi tükeldamine reaalsete ajatemplitega

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 - 3))
    ENDDATE=$(($STARTDATE + $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 )

Tulemuseks on see, et igale mp4 failile vastab samanimeline, kuid gpx laiendiga rajalogi fail.

Rajalogi tükeldamine korrigeeritud ajatemplitega

Selleks, et lihtsustada videofailide vaatamist näiteks RegistratorViewer-is, võib tekkida soov ajatempleid võltsida - ehk siis liigutada GPX ajatemplid üksteise järgi nii, nagu kõik klipid oleks filmitud järjest.

Ajatemplite võltsimist võib olla vajalik kasutada ka näiteks juhul, kui videot soovitakse vaadata näiteks Garmin Virb Edit tarkvaras - sealse bugi tõttu rohkem kui ühte klippi korraga kaardile kanda ei saa. Küll aga tähendab see, et võltsitud ajatemplitega rajalogi tuleb üheks GPX failiks kokku monteerida (st mitte igale videofailile oma), samuti tuleb videod kõik üheks pikaks filmiks kokku monteerida. Hetkel siinkohal seda lähenemist ei kajasta.

NB! Kui on soov CamOnRoad abil filmitud klippe vaadata veel koos mingite muude klippidega, siis tuleks ajatemplite võltsimine jätta viimaseks sammuks ning teha ära kõigile üheskoos vaadatavatele videodele korraga - sel juhul säilib nende loogiline järjekord ajas. Seega siin toodud skripti on mõtet kasutada ainult juhul, kui selle tulemusena pannaksegi kokku lõplik kompott, mida koos vaadata soovitakse ning muid asju hiljem enam ei lisandu.

Võltsitud ajatemplitega GPX failid tekitab järgmine skript:

#!/bin/bash

# Expects video files and all_interpolated.gpx in this dir. Creates a GPX files
# for every video with faked timestamps.

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"`
    CUT_START=$(($CREATEDATE-3))
    DURATION=`exiftool -S -s -n -trackduration "$REPLY"`

    if [[ -z "$FAKE_TIMESTAMP_PRECISE" ]]; then
        # The starting point for GPX file with faked timestamps is the starting
        # moment of the first video. Initialize this here.
        FAKE_TIMESTAMP_PRECISE=$CUT_START
        FAKE_TIMESTAMP_START=$CUT_START
    fi

    # Get the next boundary on the faked timeline.
    FAKE_TIMESTAMP_PRECISE=`echo "$FAKE_TIMESTAMP_PRECISE+$DURATION" | bc`

    # Round the end timestamp for cutting, but subtract 1 second from the result.
    FAKE_TIMESTAMP_END=`echo "scale=0; ($FAKE_TIMESTAMP_PRECISE - 0.5)/1" | bc`

    CUT_DURATION=$(($FAKE_TIMESTAMP_END-$FAKE_TIMESTAMP_START))
    CUT_END=$(($CUT_START+$CUT_DURATION))
    MOVE=$(($FAKE_TIMESTAMP_START-$CUT_START))
    STARTSTR=`date -u -d @"$CUT_START" +"%Y%m%d%H%M%S"`
    ENDSTR=`date -u -d @"$CUT_END" +"%Y%m%d%H%M%S"`

    gpsbabel -t -i gpx -f all_interpolated.gpx \
        -x nuketypes,waypoints,routes \
        -x track,start=$STARTSTR,stop=$ENDSTR -x track,move=${MOVE}s \
        -o gpx -F "$(basename "$REPLY" .$EXTENSION)".gpx
    FAKE_TIMESTAMP_START=$(($FAKE_TIMESTAMP_END+1))
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 )

Muud skriptid

Sissejuhatus

Siin alajaotuses olevad skriptid ei ole vajalikud selleks, et CamOnRoad rakendusega talletatud video teha vaadatavaks RegistratorViewer-is. Tegemist on skriptidega, mida sai kasutatud teema uurimise käigus ning mis võivad uuesti päevakorda kerkida, kui on soov teemat edasi arendada. Näiteks:

  • Uuring selles osas, kuidas video filmimise aeg täpsemalt teada saada.
  • Uuring selles osas, kuidas video ja rajalogi mõne muu rakenduse jaoks töödeldavaks teha.

Videofailides oleva Create Date välja seadistamine

Allpool toodud skript loeb faili nimest välja tema loomise aja ning kirjutab selle faili sisse Create Date väljale:

#!/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 )

Video vaatamine

Praegune parim soovitus CamOnRoad rakendusega talletatud videode vaatamiseks on RegistratorViewer. Tuleb lihtsalt avada kõik töödeldud (pööratud) videofailid ning kui kaustas on kaasas ka samanimelised GPX failid, siis avaneb kõik iseenesest. Kui GPX failidena on kasutatud võltsitud ajatemplitega versioone, siis toimub kogu videologi kokku grupeerimine peale avamist automaatselt, muidu tuleb käsitsi teha (Group with...).