
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/