Kaamera GoPro Hero 5 Black

Allikas: Tipikate Rattamatkaklubi teabebaas
Jump to navigation Jump to search

Sissejuhatus

Tegemist on seikluskaameraga, mida kasutas Harri 2017. aasta Tipikate Rattamatka metsaradade kaardistamiseks jalgratta peal. Kaameral on endal olemas ka sisse ehitatud GPS, kuid esialgu tundus, et meil sellest infost erilist kasu ei ole. Nimelt ei leidnud me tarkvara, mis kaamera poolt talletatud MP4 failidest asukohainfo kätte saaks ning seda kaardil näidata oskaks. Ainsa viite sellele, et asukohainfo seal failides kuidagi üldse talletatud on, andis 2017. aastal racerender tarkvara, mis oskas kuvada rajajoone video peale overlay kihina, mitte aga eraldi kaardil näidata.

Nagu selgus 2018. aasta aprillis, siis ei olnud probleem tingitud siiski sellest, et GoPro oma GPS info kuidagi eriliselt ära peitnud oleks. Asi on lihtsalt selles, et videofailidesse GPS info lisamine ei ole kuidagi standardiseeritud ning igal tootjal on selleks oma protokoll. GoPro poolt tehtud MP4 failidesse integreeritud asukohainfo õnnestus 2018. aasta aprillis saada kätte ExifTool utiliidiga ning seda on täpsemalt kirjeldatud allpool.

Et GoPro-ga filmitud materjali juba 2017. aastal videokaardistamiseks kasutada saaks, sai tol korral GPS seadmega talletatud ka eraldi rajalogi ning see hiljem videopildiga kokku viidud. See oli kokkuvõttes aga ebamõistlikult suur pingitus (mida on samuti kirjeldatud allpool).

NB! Nagu selgus, siis ei toimi selle GoPro GPS autos sees ja seda vaatamata sellele, et kaamerat hoiti ühe teelõigu sõitmisel filmimiseks esiakna juures. Seega tasub autos kindlasti ka GPS seadme või nutitelefoniga lisaks rajalogi talletada!

Andmete järeltöötlus

Sissejuhatus

Käesolev peatükk käsitleb andmetöötlust, mis on vajalik, et teha selle kaameraga filmitud materjal kasutatavaks videokaardistamise võtmes. Allpool toodud käsitlus eeldab, et kaamera suutis GPS signaali kogu aeg mõistlikult kätte saada, ehk siis me saame kasutada otse MP4 failidesse talletatud rajalogisid ning siduda need üks-ühele vastavate videofailidega. Seni on täpsemalt läbi uurimata aga teema, kuidas soovi korral välist rajalogi automaatselt sünkroniseerida. Seniste katsete puhul tundub, et MP4 failist eksporditud GPX failis olev esimene ajatempel ja MP4 faili sees EXIF infos olev Create Date väli on omavahel veidi nihkes.

Rajalogide eksport videofailidest

Rajalogid oskab MP4 failidest eksportida ExifTool. Kuigi see tarkvara on olemas nii Windowsile kui Linuxile, siis on järgnev skript koostatud ja testitud Ubuntu peal. Lisaks kasutab skript ka GPSBabel utiliiti, et eemaldada rajalogist meie jaoks ebavajalik info (huvipunktid, marsruudid, ilma ajatemplita rajapunktid) - elu on näidanud, et neid võib sekka sattuda.

#!/bin/bash

EXTENSION="MP4"

while IFS= read -r -d '' -u 9
do
    exiftool -p /usr/local/share/exiftool/gpx.fmt -ee "$REPLY" | \
        gpsbabel -t -i gpx -f - \
        -x nuketypes,waypoints,routes -x track,start=2000 \
        -o gpx -F $(basename "$REPLY" .$EXTENSION).gpx
done 9< <( find . -type f -iname "*.$EXTENSION" -print0 )

Selle tulemusena tekkinud MP4 ja GPX failipaarid on piisavad, et need oleks võimalik mugavalt RegistratorViewer-iga avada. Tasub ka mainida, et MP4 failist rajalogi eemaldamine pole antud hetkel oluline - kuna RegistratorViewer seda lugeda ei suuda, siis kasutatakse niikuinii eraldi GPX faili (ning rakendus toimib seetõttu normaalselt ka rohkete failide korral).

Ajatemplite võltsimine

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.

NB! Kui on soov 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.

Vajalikest tööriistadest tasub lisaks eelpool juba nimetatud asjadele paigaldada ka csvtool:

sudo apt-get install csvtool

Eeldusel, et eelmises peatükis toodud GPX eksport on tehtud, siis võltsitud ajatemplitega GPX failid tekitab järgmine skript:

#!/bin/bash

# Expects video files and corresponding GPX files in current
# directory. Creates GPX files with faked timestamps to
# ./output, one output file per video file.

EXTENSION="gpx"
OUTPUT_DIR="output"
OUTPUT_TMPFILE="$OUTPUT_DIR/_tslist.txt"
OUTPUT_TMPFILE_SORTED="$OUTPUT_DIR/_tslist_sorted.txt"

rm -rf "$OUTPUT_DIR"
mkdir -p "$OUTPUT_DIR"

while IFS= read -r -d '' -u 9
do
    CSV=`gpsbabel -t -i gpx -f "$REPLY" \
        -x nuketypes,waypoints,routes -x track,start=2000 \
        -o unicsv -F - | csvtool namedcol Date,Time -`

    DATESTRFIRST=`echo "$CSV" | awk 'NR==2' | tr ',' ' '`
    CREATEDATE=`date --utc --date="$DATESTRFIRST" +"%s"`
    BASENAME="$(basename "$REPLY" .$EXTENSION)"
    echo "$CREATEDATE $BASENAME" >> $OUTPUT_TMPFILE
done 9< <( find . -type f -iname "*.$EXTENSION" -print0 )

sort -n "$OUTPUT_TMPFILE" > "$OUTPUT_TMPFILE_SORTED"

while IFS='' read -r line || [[ -n "$line" ]]; do
    CREATEDATE=`echo "$line" | cut -d ' ' -f 1`
    BASENAME=`echo "$line" | cut -d ' ' -f 2`

    VIDEOFILE="$BASENAME.MOV"
    if [ ! -f "$VIDEOFILE" ]; then
        VIDEOFILE="$BASENAME.MP4"
    fi

    DURATION=`exiftool -S -s -n -trackduration "$VIDEOFILE"`

    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=$CREATEDATE
    fi

    FAKE_TIMESTAMP_START=`echo "scale=0; ($FAKE_TIMESTAMP_PRECISE + 0.5)/1" | bc`
    MOVE=$(($FAKE_TIMESTAMP_START-$CREATEDATE))
    gpsbabel -t -i gpx -f "$BASENAME.$EXTENSION" \
        -x nuketypes,waypoints,routes \
        -x track,merge,start=2000 -x track,move=${MOVE}s \
        -o gpx -F "$OUTPUT_DIR/$BASENAME.$EXTENSION"

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

Rajalogide töötlemine Garmin Virb Edit tarbeks

Käesoleva peatüki peamine mõte on demonstreerida, et lahendus, mis 2017. aastal võttis terve nädalavahetuse jagu käsitsi häkkimist, on võimalik praeguste teadmiste juures teha ära peaaegu-et-ühe enter klahvi vajutusega.

Skript eeldab, et eelnevalt on loodud videofailidele vastavad võltsitud ajatemplitega GPX failid.

#!/bin/bash

OUT_NAME=faked_timestamps.gpx

rm -f "$OUT_NAME"

gf=""
for f in *.gpx
do 
    gf="$gf -f $f"
done

gpsbabel -t -i gpx $gf -x nuketypes,waypoints,routes \
    -x track,merge,start=2000 -o gpx,gpxver=1.1 -F "$OUT_NAME"

Tasub mainida, et Garmin Virb Edit sööb ainult GPX versioon 1.1 faile, mitte aga 1.0. Seetõttu ülal ka "gpxver=1.1" parameeter lisatud.

Ajaloolised märkmed

Siin peatükis toodud jutt ei ole tõenäoliselt enam oluline, kuid igaks juhuks saagu siiski praegu veel talletatud. Nimelt kui 2017. aastal esimest korda seda kaamerat videokaardistamiseks kasutatud sai, siis oli puudu nii kogemustest kui võib-olla ka utiliitide toest, et andmeid oleks saanud automatiseeritult töödelda. Lahendust, mille abil MP4 videofailidest rajalogid mõistlikul kujul kätte saaks, me tol korral leida ei suutnud, samuti polnud veel välja töötatud lahendust, mis välise rajalogi videofailidega automaatselt ära seoks.

Tol korral tundus reaalsem see lahendus, et saada sünkroniseerimine käima Garmin Virb Edit tarkvaras, aga mitte RegistratorViewer-is. Samas oli Virb Edit tarkvaras bugi, mille tõttu oli vajalik kõik klipid üheks kokku monteerida ning seejärel tekitada ka võltsitud ajatemplitega GPX fail, mis sellele videole täpselt vastaks.

Märkmed selle kohta, kuidas need kaks faili (MP4 ja GPX) tekitada, olid järgmised:

  1. HandBrake tarkvara abil said Full HD (60 kaadrit sekundis) videod konverteeritud 720x480 pikslit (30 kaadrit sekundis) videodeks.
  2. Avidemux tarkvara abil said kõik videod üheks pikaks kokku monteeritud. Eelnevalt sai proovitud selleks tarbeks ka Mp4Joiner tarkvara, aga seal oli video peale 7. tundi vigane (samas monteerimisel ühtegi veateadet ei antud). Ja VLC Player ei suutnud monteerimisel üldse midagi tarka toota, kippus kokku jooksma ja muidu rumalusi tegema.
  3. Sai tehtud GPX fail, mis sisaldab feigitud ajatempleid - nii et kogu video tegevus oleks nagu järjest toimunud.

See viimane oli siinkohal kõige keerulisem osa. Mõned tähelepanekud:

  • Kui GPS ja video mõlemad käima panna, siis algust tuleb korrigeerida ainult GPX esimese punkti osas (võib teha käsitsi) - see on selleks, et sünkida käima panemise hetkede erinevus. Kui on näha, et GPS jookseb pildist ees, siis tuleb esimest GPX ajatemplit nihutada tagasi.
  • Kui GPS logi on ühtne, aga videos on katkestused, siis tuleb nihutada kõiki ajatempleid tagapool olevates GPX failides. Seda saab teha näiteks GPSBabel nimelise utiliidiga. Algul tasub umbmääraselt eelmise video pikkuse järgi paika kruttida, seejärel finetuunimine. Kui on näha, et GPS on videost ees, siis tuleb finetuunimisel nihutada ajatempleid edasi.