2017-08-10 51 views
0

我的問題的背景是我想提取運動照片(由我的三星S7拍攝)的視頻數據。手動操作很簡單但很耗時。只需在HexEditor中打開.jpg文件並提取「MotionPhoto_Data」行後面的所有數據即可。第一部分是圖像,第二部分是視頻。切割數據附加到.jpg文件並保存爲mpg文件

我當前的代碼是

im = 'test.jpg' 

with open(im, 'rb') as fin: 
    data = fin.read() 
    data_latin = data.decode('latin1') 
    fin.close() 

position = data_latin.find('MotionPhoto_Data') 

data_pic = data[:position] 
data_mpg = data[position:] 

我現在的問題是我不能弄清楚如何將這些字符串保存的方式,data_pic保存爲JPG工作和data_mpg作爲工作的視頻。

我試圖

with open('test_pic.jpg', 'a') as fin: 
    fin.write(str(data_pic)) 
    fin.close() 

但這didn't工作。我認爲在我如何處理/保存數據方面存在一個基本問題,但我無法弄清楚如何解決這個問題。

回答

0

我假設你使用python 3,因爲它標記的方式。

你不應該用'data.decode('latin1')解碼。它是二進制數據。

data = fin.read() 

再後來寫它也作爲二進制數據:

with open('test_pic.jpg', 'ab') as fout: 
    fout.write(data_pic) 
    fout.close() 
+0

感謝它解決我的問題:) – Kai

+0

現在,我又看了一遍,你不應該使用「fout.close()」當使用「with」語句時。這是令人困惑的,因爲「with」語句正是爲了避免使用「close」函數。 – cbodt