繁体   English   中英

读取.h264文件

[英]read a .h264 file

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

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

我想将数据读取为hexa,例如,我将显示数据的外观: 在此处输入图片说明

我想要的是将每个字节(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'打开,但仍然没有运气。

如果您有一个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]等。如文档中hex()

由于字节对象是整数序列(类似于元组),因此对于字节对象b,b [0]将是整数,而b [0:1]将是长度为1的字节对象。(这与文本相反字符串,其中索引和切片都会产生长度为1的字符串)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM