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關鍵詞后解析出字段,計算出時長就完成了

理論上來說,除非關鍵詞在文件尾部,否則可以很快就獲取到,不需要下載完整的視頻

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM