用python提取Excel内的附件mp4

收到一个Excel文档,里面有两段内嵌的mp4视频,手头mac版的Excel打不开这俩附件。其实以前也发现过,无论是内嵌的doc、还是其他文件,mac版的excel似乎都打不开,但那时身边有用 windows的同事,让他帮忙打开再导出就好了。现在身边人全是mac本,手头唯一windows台式机平时只玩游戏,甚至没装office~~
先到的第一个方法是各种在线文档工具,但是,试了google和腾讯的,上传以后都不行。按说微软自家的在线文档总可以吧,好容易登陆了,TM上传这个Excel文件一直失败…
既然此路不通,那就从头开始:给windows装个office~~记得以前有试用版,装好以后能试用一个月。哪知现在的office365不付钱就找不到下载入口(⊙o⊙)…。有想着下载一个旧版的office,最好是破解版的,找了几个渠道,要么不是正常的下载包、要么到了百度网盘~~然后进网盘提示资源已经没了…(还送,好久不用windows,破解软件这么难找了吗 O(∩_∩)O哈哈~)
最后没办法,搜索引擎也找不到靠边的答案,问chatgpt,在chatgpt的提示下,一步步用python解出了附件,具体大概分下面两步:
1. 将excel备份一份,然后将扩展名改成“.zip”,然后解压,按AI的说法,运气好的话,mp4文件直接就在解压包/xl/embeddings目录底下~~我的运气不好,里面是两个bin文件,按chatgpt的说法,mp4数据就包在这个bin里
2. 调下面python脚本,处理bin文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    import olefile #需要安装olefile库
    ole = olefile.OleFileIO('xx/xl/embeddings/oleObject2.bin')
    print(ole.listdir())
    streams = ole.listdir()
    print(streams) #打印出具体的数据流,mp4可能在\x01Ole10Native中,也可能在其他流中
    #提取mp4数据流
    if ole.exists('\x01Ole10Native'):
        with ole.openstream('\x01Ole10Native') as stream:
            data = stream.read()
        # 保存到缓冲文件
        with open('temp.bin', 'wb') as f:
            f.write(data)
        print("Data from \\x01Ole10Native saved as output.bin")
    else:
        print("\\x01Ole10Native stream not found")
    ole.close()
    # 从 MP4 文件中提取数据
    with open('temp.bin', 'rb') as f:
        data = f.read() 
    # 自动查找 MP4 文件头 ("ftyp")
    data_start = data.find(b'ftyp')
    if data_start == -1:
        print("MP4 header not found. The file may not contain valid MP4 data.")
        exit()
    print(f"MP4 header found at offset: {data_start}")
    # 从 mp4 文件头开始提取数据
    # mp4文件头在"ftyp"之前可能还有四个字节空位,具体的可以使用https://hexed.it之类的工具打开二进制文件查看
    data_start = data_start - 4 
    output_file = 'extracted_video.mp4' #输出mp4文件名
    with open(output_file, 'wb') as out_f:
        out_f.write(data[data_start:])
    print(f"File extracted successfully as {output_file}")

———-
over,转载请注明出处:http://www.jiangkl.com/2024/12/excel_mp4_python

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

*