python 獲取線上視訊時長,不下載視訊
阿新 • • 發佈:2020-12-14
最近有個需求,需要不下載視訊,獲取到視訊的時長,就比如網頁上載入視訊,視訊還沒下載完成,就已經能拖動進度條了
網站找了一堆,都寫得不明就裡
後來找到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關鍵詞後解析出欄位,計算出時長就完成了
理論上來說,除非關鍵詞在檔案尾部,否則可以很快就獲取到,不需要下載完整的視訊