Powershell을 사용하여 위치 태그가 지정된 이미지에 대한 비디오

Powershell을 사용하여 위치 태그가 지정된 이미지에 대한 비디오

GPS트랙이 포함된 GoPro의 MP4가 있습니다. 이제 해당 비디오에서 위치정보 태그가 지정된 이미지 시퀀스를 추출하려고 합니다. 이를 위해 현재 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원본 비디오 파일에서 복사되지 않는다는 것입니다. 또한 파일 시퀀스를 올바르게 구현했는지 확실하지 않습니다.

다음은 여전히 ​​나타나는 오류 메시지입니다.

경고: File:Geotime(ValueConvInv)의 잘못된 날짜/시간(YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM|Z] 사용)

답변1

귀하의 질문에 완전히 답변할 수는 없지만, 여기에 엑시프툴과 관련된 문제가 있습니다.

RE: UTF16 출력. PowerShell은 셸을 파일로 리디렉션하는 동안 EXIFtool의 출력을 UTF8에서 UTF16으로 변경합니다. 이는 일반적으로 바이너리 데이터를 리디렉션/파이핑할 때 문제가 됩니다. 데이터가 완전히 손상되기 때문입니다. 그러나 보시다시피 텍스트 데이터에서도 문제가 될 수 있습니다. 이것 좀 봐Exiftool 포럼의 게시물그리고이 게시물.

RE: DateTimeOriginal첫 번째 문제는 DateTimeOriginal추출된 파일에 존재하지 않는다는 것입니다. 모든 파일은 이전에 기본값으로 설정되어야 합니다.-DateTimeOriginal+=0:0:$filesequence . 보다이 Photo.StackExchange 질문.

DateTimeOriginal또한 이 명령은 EXIF ​​그룹(예: )에 있는 의 기본 위치를 증가시킵니다 EXIF:DateTimeOriginal. 그러나 Geotag 명령은 XMP:DateTimeOriginal비슷한 태그이지만 XMP 그룹에 있는 를 사용하고 있습니다. 그리고 현재 수행 중인 작업에 대해 EXIF ​​그룹이 아닌 XMP 그룹에 쓰고 싶습니다. 이를 위해서는 변경이 필요합니다.

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/

관련 정보