1. 程式人生 > 實用技巧 >python 獲取線上視訊時長,不下載視訊

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關鍵詞後解析出欄位,計算出時長就完成了

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