读取.h264文件

时间:2019-03-02 16:17:57

标签: python python-3.x

对于您遇到的一些问题,我会很高兴为您提供帮助。

目标:要使用python读取.h264文件(我使用ffmpeg将原始位流提取到文件中)并将其保存在某些数据结构(可能是列表)中,我会很高兴以获取建议)。

我想以六进制读取数据,例如,我将显示数据的外观: enter image description here

我想要的是将每个字节(2个十六进制数字)馈入列表或其他数据结构。 但是前进的任何一步都会对我有所帮助。

我的尝试: 首先,我尝试阅读我所知道的方式:

with open(path, 'r') as fp:
     data = fp.read()

没用,只有“。

经过大量更改后,我尝试了其他操作,在网上看到了

    with open(path, 'r') as fp:
    hex_list = ["{:02}".format(ord(c)) for c in fp.read()]

仍然有一个空列表。

很高兴为您提供帮助。 非常感谢。

编辑: 感谢下面的评论,我尝试使用'rb'打开,但还是没有运气。

1 个答案:

答案 0 :(得分:1)

如果您有h264 mp4文件,则可以使用binascii.hexlify()将其打开并获取十六进制字符串表示形式:

import binascii
with open('test.mp4', 'rb') as fin:
    hexa = binascii.hexlify(fin.read())
    print(hexa[0:1000])

hexa将是一个python bytes对象,您可以通过执行binascii.unhexlify(hexa)轻松地取回二进制表示形式。在空间和时间方面,这将比将十六进制表示形式存储为list()中的字符串更加有效。您可以使用索引/切片访问bytes数组,因此,无论您打算对列表进行什么操作,都可以很好地使用它(它会更快并且使用更少的内存)。

但是要记住的一件事是从bytes对象获取第一个十六进制数字,您无需执行hexa[0],而是hexa[0:1]。要获取第一对十六进制数字(字节),请执行:hexa[0:2]。第二个字节是hexa[2:4]等。如docs for hex()中所述:

  

由于字节对象是整数序列(类似于元组),因此   字节对象b,b [0]将是一个整数,而b [0:1]将是一个字节   长度为1的对象。(这与文本字符串形成对比,两者都   索引和切片将产生长度为1)的字符串