Video zu geogetaggten Bildern mit Powershell

Video zu geogetaggten Bildern mit Powershell

Ich habe eine MP4 von einer GoPro mit GPS-Track. Jetzt versuche ich, aus diesem Video eine geogetaggte Bildsequenz zu extrahieren. Dafür verwende ich derzeit FFmpeg und Exiftool; ich bin offen für bessere Lösungen.

Ich habe weder FFmpeg noch Exiftool zuvor verwendet und bin ein Anfänger im Umgang mit Powershell, daher ist dies das Skript, das ich selbst von GPT aus aufgerufen habe:

$skriptFolder = Split-Path $MyInvocation.MyCommand.Path
$framerate = Read-Host "Enter framerate"
foreach ($video in (Get-ChildItem -Path $skriptFolder -Filter *.mp4)) {
    $videoName = $video.BaseName
    $outputFolder = Join-Path $skriptFolder $videoName
    if (-not (Test-Path -Path $outputFolder)) {
        New-Item -ItemType Directory -Path $outputFolder | Out-Null
    }
    ffmpeg -i $($video.FullName) -vf fps=$framerate $outputFolder\$videoName-%04d.png
    exiftool -p C:\Windows\gpx.fmt -ee3 $video.FullName -w .gpx

    exiftool -tagsfromfile $video.FullName -XMP:DateTimeOriginal<CreateDate $outputFolder
    exiftool -geotag "$videoName.gpx" "-Geotime=XMP:DateTimeOriginal+=0:0:${filesequence;$_*=1/$framerate}" $outputFolder\*.png
}
Read-Host "Press enter to exit"

Ich kann die Bilder und die GPX-Datei erfolgreich erstellen. Aber dann stecke ich fest, wenn ich die GPS-Daten mit den Bildern abgleichen will. Das Problem ist meiner Meinung nach, dass die Daten DateTimeOriginalnicht aus der Original-Videodatei kopiert werden. Außerdem bin ich mir nicht sicher, ob ich die Dateireihenfolge richtig implementiert habe.

Dies ist meine Fehlermeldung, die ich immer noch erhalte:

Warnung: Ungültiges Datum/ungültige Uhrzeit (verwenden Sie JJJJ:mm:tt HH:MM:SS[.ss][+/-HH:MM|Z]) in Datei:Geotime (ValueConvInv)

Antwort1

Ich kann Ihre Frage nicht vollständig beantworten, aber hier sind die mit Exiftool verbundenen Probleme.

AW: UTF16-Ausgabe. PowerShell ändert die Ausgabe von exiftool während der Shell-Umleitung zur Datei von UTF8 in UTF16. Dies ist normalerweise ein Problem bei der Umleitung/Weiterleitung binärer Daten, da die Daten dadurch vollständig beschädigt werden, aber wie Sie sehen, kann es auch bei Textdaten ein Problem sein. Siehe diesBeitrag des Exiftool-ForumsUnddieser Beitrag.

AW: DateTimeOriginalDas erste Problem ist, dass DateTimeOriginalin den extrahierten Dateien nicht vorhanden ist. Alle Dateien müssen vor dem Befehl mit einem Standardwert versehen werden -DateTimeOriginal+=0:0:$filesequence. Siehediese Photo.StackExchange-Frage.

Darüber hinaus erhöht der Befehl den Standardspeicherort für DateTimeOriginal, der sich beispielsweise in der EXIF-Gruppe befindet EXIF:DateTimeOriginal. Der Geotag-Befehl verwendet jedoch XMP:DateTimeOriginal, was ein ähnliches Tag ist, aber in der XMP-Gruppe. Und für das, was Sie tun, möchten Sie in die XMP-Gruppe schreiben, nicht in die EXIF-Gruppe. Dies erfordert eine Änderung

exiftool -DateTimeOriginal+=0:0:${filesequence;$_*=$framesteps} $outputFolder

hinein

exiftool -XMP:DateTimeOriginal+=0:0:${filesequence;$_*=$framesteps} $outputFolder

XMP:DateTimeOriginalDer Grund, warum Sie und nicht verwenden müssen, EXIF:DateTimeOriginalist, dass letzteres die Subsekunden nicht einschließt, die zum Erhöhen der Zeit für jeden Frame erforderlich sind. Siehediese StackOverflow-Antwort.

Aber bevor Sie etwas erhöhen können, muss ein Basiszeitstempel vorhanden sein, der erhöht werden kann. Das kann schwierig werden, da die meisten Videozeitstempel in UTC sein müssen, viele Kameras jedoch die lokale Zeitzone nicht kennen und die lokale Zeit schreiben.

Führen Sie diesen Befehl aus, um alle Datums-/Zeit-Tags in der Datei aufzulisten

exiftool -time:all -G1 -a -s file.mp4

Wenn es ein Tag gibt, das die korrekte Zeit in UTC hat, ersetzen Sie "TAG" im folgenden Befehl durch diesen Tag-Namen. Beachten Sie, dass dieser Befehl für Windows CMD gilt und die Anführungszeichenregeln für PowerShell anders sind. Sie müssen also die richtigen Anführungszeichen herausfinden.

exiftool "-XMP:DateTimeOriginal<${TAG}+00:00" /path/to/files/

Wenn kein Tag mit der korrekten UTC-Zeit vorhanden ist, müssen Sie die Zeitzone in diesem Befehl auf +00:00die richtige ändern. Beispielsweise wäre Ostküste der USA

exiftool "-XMP:DateTimeOriginal<${TAG}-05:00" /path/to/files/

verwandte Informationen