2017-08-10 24 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