Видео в геотегированные изображения с помощью PowerShell

Видео в геотегированные изображения с помощью PowerShell

У меня есть MP4 с GoPro с включенным gpstrack. Теперь я пытаюсь извлечь геотегированную последовательность изображений из этого видео. Для этого я сейчас использую FFmpeg и exiftool; я открыт для лучших решений.

Я никогда раньше не пользовался FFmpeg и exiftool и только начинаю использовать PowerShell, поэтому вот скрипт, который я сгенерировал сам из 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"

Я могу успешно создать изображения и файл GPX. Но затем я застреваю с сопоставлением данных GPS и изображений. Проблема, как мне кажется, в том, что DateTimeOriginalне копируется из исходного видеофайла. Также я не уверен, правильно ли я реализовал последовательность файлов.

Вот сообщение об ошибке, которое я все еще получаю:

Предупреждение: Неверная дата/время (используйте ГГГГ:мм:дд ЧЧ:ММ:СС[.сс][+/-ЧЧ:ММ|Z]) в Файл:Geotime (ValueConvInv)

решение1

Я не могу полностью ответить на ваш вопрос, но вот проблемы, связанные с exiftool.

RE: UTF16 output. PowerShell меняет вывод exiftool с UTF8 на UTF16 во время перенаправления оболочки в файл. Обычно это проблема при перенаправлении/конвейеризации двоичных данных, так как это полностью повредит данные, но, как вы видите, это может быть проблемой и с текстовыми данными. Смотрите этопост на форуме exiftoolиэта почта.

RE: DateTimeOriginalПервая проблема в том, что DateTimeOriginalв извлеченных файлах его нет. Все файлы должны быть установлены со значением по умолчанию перед -DateTimeOriginal+=0:0:$filesequenceкомандой. Смотритеэтот вопрос Photo.StackExchange.

Кроме того, команда увеличивает местоположение по умолчанию для DateTimeOriginal, которое будет в группе EXIF, например EXIF:DateTimeOriginal. Но команда Geotag использует XMP:DateTimeOriginal, который является похожим тегом, но в группе XMP. И для того, что вы делаете, вы хотите записать в группу XMP, а не в группу EXIF. Это требует изменения

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

в

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

Причина, по которой вам нужно использовать XMP:DateTimeOriginalи not, EXIF:DateTimeOriginalзаключается в том, что последний не включает доли секунды, которые требуются для увеличения времени для каждого кадра. Смотритеэтот ответ StackOverflow.

Но прежде чем что-либо увеличивать, должна быть базовая временная метка для увеличения. Это может быть сложно, так как большинство временных меток видео должны быть в формате UTC, но многие камеры не знают о местном часовом поясе и будут записывать местное время.

Выполните эту команду, чтобы вывести список всех тегов даты/времени в файле.

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

Если есть тег, который имеет правильное время в формате UTC, замените "TAG" в следующей команде на имя этого тега. Обратите внимание, что эта команда предназначена для Windows CMD, а правила кавычек для PowerShell отличаются, поэтому вам придется разобраться с правильными кавычками

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

Если тега с правильным временем UTC нет, то вам придется изменить часовой пояс с в этой команде с +00:00на правильный. Например, Восточное побережье США будет

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

Связанный контент