使用 powershell 將影片轉為地理標記影像

使用 powershell 將影片轉為地理標記影像

我有一個來自 GoPro 的 MP4,其中包含 GPS 軌跡。現在我試圖從該影片中提取地理標記的圖像序列。為此,我目前正在使用 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從原始視訊檔案複製。我也不確定我是否正確實現了文件順序。

這是我仍然收到的錯誤訊息:

警告:文件:Geotime (ValueConvInv) 中的日期/時間無效(使用 YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM|Z])

答案1

我無法完全回答你的問題,但這裡是與 exiftool 相關的問題。

RE: UTF16 輸出。在 shell 重新導向到檔案期間,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而不是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/

相關內容