2014-01-25 3 views
1

У меня есть видео .MOV, отправленное телефоном. Могу ли я получить реальные данные о создании файла и автора? Я пытался использовать ffprobe, mediainfo и аналогичный инструмент, но даю мне только дату, когда я его загружу.Получение метаданных для видео MOV

+0

Готовы ли вы копаться в двоичном файле программно? Если да, то какой язык? Не уверен в том, что инструмент будет делать это, поскольку вы уже пытались обычным подозреваемым. –

+0

Я не пытался это сделать. Не могли бы вы объяснить мне, как я могу? –

ответ

8

Я написал быстрый скрипт Python, который может получить временные метки создания и изменения, поскольку их легко найти. Найти автора немного сложнее, потому что его можно хранить несколькими способами. Пример использования:

$ ./mov-timestamps.py file.mov 
creation date: 2013-03-29 16:14:01 
modification date: 2013-03-29 16:14:13 

Иногда вы можете увидеть дату 1/1/1904 Это означает, что отметка времени равна 0. Если вы видите дату 1/1/1970, файл, вероятно, был создан FFmpeg, который не сохраняет эти метаданные по соображениям безопасности.

#!/usr/bin/python 

import datetime 
import struct 
import sys 

ATOM_HEADER_SIZE = 8 
# difference between Unix epoch and QuickTime epoch, in seconds 
EPOCH_ADJUSTER = 2082844800 

if len(sys.argv) < 2: 
    print "USAGE: mov-length.py <file.mov>" 
    sys.exit(1) 

# open file and search for moov item 
f = open(sys.argv[1], "rb") 
while 1: 
    atom_header = f.read(ATOM_HEADER_SIZE) 
    if atom_header[4:8] == 'moov': 
     break 
    else: 
     atom_size = struct.unpack(">I", atom_header[0:4])[0] 
     f.seek(atom_size - 8, 1) 

# found 'moov', look for 'mvhd' and timestamps 
atom_header = f.read(ATOM_HEADER_SIZE) 
if atom_header[4:8] == 'cmov': 
    print "moov atom is compressed" 
elif atom_header[4:8] != 'mvhd': 
    print "expected to find 'mvhd' header" 
else: 
    f.seek(4, 1) 
    creation_date = struct.unpack(">I", f.read(4))[0] 
    modification_date = struct.unpack(">I", f.read(4))[0] 
    print "creation date:", 
    print datetime.datetime.utcfromtimestamp(creation_date - EPOCH_ADJUSTER) 
    print "modification date:", 
    print datetime.datetime.utcfromtimestamp(modification_date - EPOCH_ADJUSTER) 
+0

Спасибо за скрипт. Я запускаю его, но он дает мне дату, когда я скачал его на ПК. Поэтому я считаю, что метаданные были перезаписаны. –

+0

Если вы играете, вы можете расширить скрипт так, чтобы он немного углубился в файл и обнаружил время создания/модификации атомов трака. –

+0

Я не знаю, как это сделать. Можете ли вы мне что-то связать (учебник, руководство)? –

Смежные вопросы