Vídeo a imágenes geoetiquetadas usando powershell

Vídeo a imágenes geoetiquetadas usando powershell

Tengo un MP4 de una GoPro con gpstrack incluido. Ahora estoy intentando extraer una secuencia de imágenes geoetiquetadas de ese video. Para eso actualmente estoy usando FFmpeg y exiftool; Estoy abierto a mejores soluciones.

Nunca antes había usado FFmpeg ni exiftool y solo soy un principiante en el uso de powershell, así que este es el script que solicité desde GPT:

$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"

Puedo crear con éxito las imágenes y el archivo GPX. Pero luego me quedo atascado en hacer coincidir los datos del GPS y las imágenes. Creo que el problema es que DateTimeOriginalno se copia del archivo de vídeo original. Además, no estoy seguro de haber implementado la secuencia de archivos correctamente.

Este es mi mensaje de error que todavía recibo:

Advertencia: Fecha/hora no válida (use AAAA:mm:dd HH:MM:SS[.ss][+/-HH:MM|Z]) en Archivo:Geotime (ValueConvInv)

Respuesta1

No puedo responder completamente a tu pregunta, pero aquí están los problemas relacionados con exiftool.

RE: Salida UTF16. PowerShell está cambiando la salida de exiftool de UTF8 a UTF16 durante la redirección del shell al archivo. Esto suele ser un problema al redirigir/canalizar datos binarios, ya que corromperá completamente los datos, pero como puede ver, también puede ser un problema con los datos de texto. Mira estopublicación del foro exiftoolyesta publicación.

RE: DateTimeOriginalEl primer problema es que DateTimeOriginalno existe en los archivos extraídos. Todos los archivos deben configurarse con un valor predeterminado antes del -DateTimeOriginal+=0:0:$filesequencecomando. Veresta pregunta de Photo.StackExchange.

Además, el comando incrementa la ubicación predeterminada para DateTimeOriginal, que estará en el grupo EXIF, por ejemplo EXIF:DateTimeOriginal. Pero el comando Geotag usa XMP:DateTimeOriginal, que es una etiqueta similar, pero en el grupo XMP. Y por lo que estás haciendo, quieres escribir en el grupo XMP, no en el grupo EXIF. Esto requiere cambiar

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

en

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

La razón por la que necesita usarlo XMP:DateTimeOriginaly no EXIF:DateTimeOriginales porque este último no incluye los subsegundos, que son necesarios para incrementar el tiempo de cada cuadro. Veresta respuesta de StackOverflow.

Pero antes de poder incrementar algo, debe haber una marca de tiempo base para incrementar. Esto puede resultar complicado, ya que la mayoría de las marcas de tiempo de vídeo deben estar en UTC, pero muchas cámaras no conocen la zona horaria local y escribirán la hora local.

Ejecute este comando para enumerar todas las etiquetas de fecha/hora en el archivo

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

Si hay una etiqueta que tiene la hora correcta en UTC, reemplace "TAG" en el siguiente comando con ese nombre de etiqueta. Tenga en cuenta que este comando es para Windows CMD y las reglas de comillas son diferentes para PowerShell, por lo que tendrá que encontrar las comillas correctas.

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

Si no hay una etiqueta con la hora UTC correcta, entonces tendrá que cambiar la zona horaria en ese comando a +00:00la correcta. Por ejemplo, la costa este de EE. UU. sería

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

información relacionada