python如何下載MP4視頻和獲取時長

我們做爬蟲工作時,經常會遇到要把爬取的視頻下載到本地做存儲,那麼我們如何使用python去下載視頻呢,下載視頻不是本文章的重點,在此廢話不多說,直接上完整的代碼:

def download_file(url, base_path, filename='', call_func=''):
    file_path = base_path + filename
    directory = os.path.dirname(file_path)
    mkdir(directory)

    # 進度條
    def progress_callfunc(blocknum, blocksize, totalsize):
        '''回調函數
        @blocknum : 已經下載的數據塊
        @blocksize : 數據塊的大小
        @totalsize: 遠程文件的大小
        '''
        percent = 100.0 * blocknum * blocksize / totalsize
        if percent > 100:
            percent = 100
        # print ('進度條 %.2f%%' % percent, end = '\r')
        sys.stdout.write('進度條 %.2f%%' % percent + "\r")
        sys.stdout.flush()

    if url:
        try:
            log.debug('''
                         正在下載 %s
                         存儲路徑 %s
                      '''
                      % (url, file_path))

            request.urlretrieve(url, file_path, progress_callfunc)

            log.debug('''
                         下載完畢 %s
                         文件路徑 %s
                      '''
                      % (url, file_path)
                      )

            call_func and call_func()
            return 1
        except Exception as e:
            log.error(e)
            return 0
    else:
        return 0

我們開始下載我們的視頻:

 

下載好這個視頻,當然業務需求,還有可能需要獲取這個視頻的時長,接下來

進入到今天我們的重點分析:

上網搜索發現了這篇博客:

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

讀完這邊博客我們瞭解到:

時長 = duration/time scale

只需要知道這兩個字段在文件中的位置即可,而且這兩個是連續的字段。

 

 

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

我們打開視頻源文件,看一看,我們就能更好的理解了:

 

時長 = 0x00001c93/0x000003E8=7

 

 

我們使用ALC打開視頻,對比一下時間:

 

時間剛剛好,ok分析結束

 

爲了方便,咱可以寫個程序來獲取。

 

def get_video_duration(video_file):
    with open(video_file, 'rb') as fp:
        data = fp.read()
    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]
    return duration

 

打開咱麼剛纔那個視頻,測試一下:

以上我們就全部分析結束了。

 

 

文章首發於微信公衆號菜鳥童靴,不定期更新,如有需要後臺加微信

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章