셸에서 단일 명령(또는 단일 명령줄)을 사용하여 파일의 메타데이터를 기반으로 Quicktime 비디오 파일의 수정(또는 생성) 날짜와 시간을 자동으로 설정하려면 어떻게 해야 합니까? JPG 파일의 경우 exiv2 -T
.mov 파일에 대한 유사한 명령이 있습니까?
예를 들어, 다음 메타데이터가 포함된 video.mov 파일부터 시작해 보겠습니다.
$ exiftool video.mov
ExifTool Version Number : 12.57
File Name : video.mov
Directory : .
File Size : 64 MB
File Modification Date/Time : 2023:07:04 02:53:05+02:00
File Access Date/Time : 2023:07:01 11:42:46+02:00
File Inode Change Date/Time : 2023:07:04 02:53:05+02:00
File Permissions : -rw-r--r--
File Type : MOV
File Type Extension : mov
MIME Type : video/quicktime
Major Brand : Apple QuickTime (.MOV/QT)
Minor Version : 0.0.0
Compatible Brands : qt
Media Data Size : 64215615
Media Data Offset : 36
Movie Header Version : 0
Create Date : 2023:07:01 11:42:00
Modify Date : 2023:07:01 11:42:46
Time Scale : 600
Duration : 0:00:45
Preferred Rate : 1
Preferred Volume : 100.00%
Preview Time : 0 s
Preview Duration : 0 s
Poster Time : 0 s
Selection Time : 0 s
Selection Duration : 0 s
Current Time : 0 s
Next Track ID : 6
Track Header Version : 0
Track Create Date : 2023:07:01 11:42:00
Track Modify Date : 2023:07:01 11:42:46
Track ID : 1
Track Duration : 0:00:45
Track Layer : 0
Track Volume : 0.00%
Image Width : 1920
Image Height : 1080
Clean Aperture Dimensions : 1920x1080
Production Aperture Dimensions : 1920x1080
Encoded Pixels Dimensions : 1920x1080
Graphics Mode : ditherCopy
Op Color : 32768 32768 32768
Compressor ID : hvc1
Source Image Width : 1920
Source Image Height : 1080
X Resolution : 72
Y Resolution : 72
Compressor Name : HEVC
Bit Depth : 24
Video Frame Rate : 29.997
Balance : 0
Audio Format : mp4a
Audio Channels : 2
Audio Bits Per Sample : 16
Audio Sample Rate : 44100
Purchase File Format : mp4a
Warning : [minor] The ExtractEmbedded option may find more tags in the media data
Matrix Structure : 1 0 0 0 1 0 0 0 1
Content Describes : Track 1
Media Header Version : 0
Media Create Date : 2023:07:01 11:42:00
Media Modify Date : 2023:07:01 11:42:46
Media Time Scale : 600
Media Duration : 0:00:45
Media Language Code : und
Gen Media Version : 0
Gen Flags : 0 0 0
Gen Graphics Mode : ditherCopy
Gen Op Color : 32768 32768 32768
Gen Balance : 0
Handler Class : Data Handler
Handler Vendor ID : Apple
Handler Description : Core Media Data Handler
Meta Format : mebx
Handler Type : Metadata Tags
Make : Apple
Model : iPhone SE (2nd generation)
Software : 16.5.1
Creation Date : 2023:07:01 13:42:00+02:00
Image Size : 1920x1080
Megapixels : 2.1
Avg Bitrate : 11.3 Mbps
Rotation : 90
지금까지 내가 생각할 수 있는 가장 좋은 방법은 (수정된 날짜를 설정하기 위해) 다음을 읽는 것입니다.
$ exiftool video.mov | grep "Media Modify Date" | cut -f 19-20 -d ' '
, 나의 경우에는,
2023:07:01 11:42:46
(실제 비디오는 13:42:…CEST 경에 촬영되었으므로 UTC 또는 GMT로 정규화됨), :
출력의 날짜를 로 바꾸고 -
마지막으로 내보냅니다.
$ touch -d "2023-07-01 11:42:46 UTC" video.mov
(내 추측으로는 이 문장이 UTC
위의 문장보다 낫다는 것입니다 GMT
.) 예상대로 이렇게 생성됩니다.
$ ls --full-time video.mov | cut -d ' ' -f 6-8
2023-07-01 13:42:46.000000000 +0200
(기계는 CEST 시간대에 있으므로 +0200
). 결과는 우리가 원하는 것입니다(동영상 자체가 촬영된 시간대도 CEST이므로). 그러나 거기에 도달하는 과정은수동.
첫 번째 명령 시퀀스에서 날짜를 처리하는 방법( exiftool … -d ' '
)자동으로touch …
단일 명령줄이나 스크립트에서 첫 번째 명령과 두 번째 명령( )을 실행할 수 있도록 하려면 어떻게 해야 할까요 ?
또는 .mov 비디오 파일의 수정(또는 생성) 시간을 비디오 파일의 메타데이터에서 읽고 다른 방식으로 운영 체제 수준에서 설정해야 합니다. 어떻게? (BTW: 일부 파일에는 Media Modify Date
메타데이터 필드가 모두 0일 수 있기 때문입니다.파일 생성자:ffmpegDate/Time Original
, 더 많은 프로그래밍 논리가 필요할 수 있으며 이 경우 추가 및 Media Duration
올바르게 채워졌는지 여부 와 같은 다른 필드의 값으로 전환하려고 시도할 수 있습니다 . )
어쩌면 누군가가 이미 이 작업을 수행했고 우리는 적절한 매개변수를 사용하여 이미 사용 가능한 프로그램을 실행해야 합니까?
답변1
exiftool
대부분의 파일 메타데이터는 검색 외에도 설정할 수 있으므로 다음 사항만 고려하면 됩니다.
TZ=UTC0 exiftool '-FileModifyDate<MediaModifyDate' ./*.mov
또는:
exiftool -api QuickTimeUTC '-FileModifyDate<MediaModifyDate' ./*.mov
또는 재귀적으로(하위 디렉터리의 파일도 업데이트):
exiftool -api QuickTimeUTC -r -ext mov '-FileModifyDate<MediaModifyDate' .
기본적으로 exiftool
QuickTime MOV 파일의 미디어 타임스탬프는 QuickTime 사양에 UTC(대부분의 카메라와 동일)여야 한다고 명시되어 있더라도 현지 시간으로 해석됩니다. 를 사용하면 TZ=UTC0
현지 시간이 UTC(UTC에서 0 오프셋)임을 알 수 있고, 를 사용하면 -api QuickTimeUTC
귀하의 경우처럼 이 시간을 UTC로 해석해야 한다고 알립니다. 둘 다 동일한 결과를 얻어야 합니다.
MediaModifyDate
타임스탬프(-2082844800 에포크 시간) 로 끝나지 않는 파일은 1904-01-01 00:00:00 +0000
그것이 QuickTime 타임스탬프의 원래 시간이기 때문입니다.
이를 건너뛰려면 다음을 수행할 수 있습니다.
TZ=UTC0 exiftool -d %s -if '$MediaModifyDate != -2082844800' \
-r -ext mov '-FileModifyDate<MediaModifyDate' .
( 후자 TZ=UTC0
대신 사용하는 것은 시간을 Unix epoch 시간으로 특별히 형식화하는 것과 비교할 때 작동하지 않는 것 같습니다 . 이는 버그처럼 보입니다. 다른 날짜 형식을 사용하는 것은 시간대에 따라 달라지므로 고정 문자열과 비교할 수 없습니다. 좋아요 - 2082844800)-api QuickTimeUTC
-d %s
mtime을 설정 하려면 touch
다음을 수행하십시오.
mtime=$(
exiftool -api QuickTimeUTC -q -d %s -p '$MediaModifyDate' file.mov
) &&
[ "$mtime" != '0000:00:00 00:00:00' ] &&
touch -d "@$mtime" file.mov
( 여기에 숫자를 인쇄할 때 를 사용하면 -api QuickTimeUTC
제대로 작동하는 것 같습니다 -d %s
. 예, 그렇지 않은 경우에도 알 수 있습니다 0000:00:00 00:00:00
. 앞으로는 바뀔 수도 있을 것 같습니다.)-2082844800
MediaModifyDate
답변2
.mov
현재 폴더의 모든 파일에 대해 :
#!/usr/bin/env bash
for file in *.mov;
do
t=$(exiftool "$file" | grep "Media Modify Date" | cut -f 19-20 -d ' ')
t="${t/:/-}"
t="${t/:/-}"
touch -d "$t UTC" "$file"
done