2014-01-25 79 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

感謝您的腳本。我運行它,但它給了我在PC上下載它的日期。所以我認爲元數據已被覆蓋。 –

+0

如果你是遊戲,你可以擴展腳本,使其深入文件並找到trak原子的創建/修改時間。 –

+0

我不知道該怎麼做。你可以鏈接我一些東西(教程,指南)? –