python 获取在线视频时长,不下载视频

最近有个需求,需要不下载视频,获取到视频的时长,就比如网页上加载视频,视频还没下载完成,就已经能拖动进度条了

网站找了一堆,都写得不明就里

后来找到1个帖子,讲了下MP4的文件格式,然后通过搜索关键词来获取时长信息

https://www.cnblogs.com/ranson7zop/p/7889272.html

时长 = duration/time scale

只需要知道这两个字段在文件中的位置即可,而且这两个是连续的字段。

 

 如图所知,我们找到mvhd,向后偏移12位,第13位到17位就得到了time scale,17位往后4位就是,duration。

 

import requests
import struct

url = 'http://xxxxx.mp4'
r = requests.get(url, stream=True)
for data in r.iter_content(chunk_size=512):
    if data.find(b'mvhd') > 0:
        index = data.find(b'mvhd') + 4
        time_scale = struct.unpack('>I', data[index + 13:index + 13 + 4])
        durations = struct.unpack('>I', data[index + 13 + 4:index + 13 + 4 + 4])
        duration = durations[0] / time_scale[0]
        break

 

代码如上

首先使用requests的stream流,开启后,使用循环下载数据,搜索到mvhd关键词后解析出字段,计算出时长就完成了

理论上来说,除非关键词在文件尾部,否则可以很快就获取到,不需要下载完整的视频

 

posted @ 2020-12-14 13:27  darkspr  阅读(1966)  评论(0编辑  收藏  举报