Python爬取視頻時(shí)長(zhǎng)場(chǎng)景實(shí)踐示例
簡(jiǎn)介:
在視頻相關(guān)測(cè)試場(chǎng)景下,例如:有時(shí)需要知道全部視頻的匯總時(shí)長(zhǎng),顯然一個(gè)個(gè)打開并且手工計(jì)算耗時(shí)耗力,我們可以通過編寫腳本進(jìn)行快速匯總。
獲取視頻時(shí)長(zhǎng)的方式
1、通過subprocess進(jìn)行獲取。
2、通過moviepy庫(kù)中VideoFileClip獲取。
3、通過cv2庫(kù)獲取。
安裝
1、subprocess:無需安裝,Python內(nèi)置。
2、moviepy:pip install moviepy。
3、cv2:pip install opencv-python
準(zhǔn)備工序:
1、當(dāng)前項(xiàng)目新增videos目錄。
2、you-get 下載幾個(gè)視頻。python:超實(shí)用下載工具you-get
如:下載了兩個(gè)短視頻

獲取視頻時(shí)長(zhǎng)的3種方式對(duì)比
import cv2
import time
import subprocess
from moviepy.editor import VideoFileClip
def video_duration_1(filename):
start = time.time()
result = subprocess.run(["ffprobe", "-v", "error", "-show_entries",
"format=duration", "-of",
"default=noprint_wrappers=1:nokey=1", filename],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
end = time.time()
spend = end - start
print("獲取視頻時(shí)長(zhǎng)方法1耗時(shí):", spend)
return float(result.stdout)
def video_duration_2(filename):
start = time.time()
clip = VideoFileClip(filename)
end = time.time()
spend = end - start
print("獲取視頻時(shí)長(zhǎng)方法2耗時(shí):", spend)
return float(clip.duration)
def video_duration_3(filename):
start = time.time()
cap = cv2.VideoCapture(filename)
if cap.isOpened():
rate = cap.get(5)
frame_num = cap.get(7)
duration = frame_num / rate
end = time.time()
spend = end - start
print("獲取視頻時(shí)長(zhǎng)方法3耗時(shí):", spend)
return duration
return -1
if __name__ == '__main__':
file = r".\videos\mda-mkbhvebqej3cw9yh.mp4"
video_time_1 = video_duration_1(file)
print(video_time_1)
print("*" * 100)
video_time_2 = video_duration_2(file)
print(video_time_2)
print("*" * 100)
video_time_3 = video_duration_3(file)
print(video_time_3)執(zhí)行源碼:

結(jié)論:
1、三種方式均可以正常獲取視頻時(shí)長(zhǎng),并且準(zhǔn)確。
2、推薦使用cv2獲取視頻時(shí)長(zhǎng),耗時(shí)最短。
實(shí)踐案例:獲取文件夾內(nèi)全部視頻總時(shí)長(zhǎng)
import cv2
import os
def video_duration(dir_name):
sum_duration = 0
for root, dirs, files in os.walk(dir_name, topdown=False):
for filename in files:
cap = cv2.VideoCapture(dir_name + "\\" + filename)
if cap.isOpened():
rate = cap.get(5)
frame_num = cap.get(7)
duration = frame_num / rate
sum_duration += duration
return sum_duration
if __name__ == '__main__':
file = r".\videos"
total_video_time = video_duration(file)
print(f"{file} 目錄下全部視頻總時(shí)長(zhǎng)為:{total_video_time}秒")
以上就是Python獲取視頻時(shí)長(zhǎng)場(chǎng)景實(shí)踐示例的詳細(xì)內(nèi)容,更多關(guān)于Python獲取視頻時(shí)長(zhǎng)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python3 導(dǎo)入上級(jí)目錄中的模塊實(shí)例
今天小編就為大家分享一篇Python3 導(dǎo)入上級(jí)目錄中的模塊實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02
深入理解python Matplotlib庫(kù)的高級(jí)特性
Matplotlib是一款極其強(qiáng)大的Python數(shù)據(jù)可視化庫(kù),這篇文章中,我們將深入討論 Matplotlib 的一些高級(jí)特性,包括對(duì)象導(dǎo)向接口、自定義顏色映射和樣式、動(dòng)態(tài)圖形等,感興趣的小伙伴跟著小編一起來探討吧2023-07-07
Python實(shí)現(xiàn)簡(jiǎn)單登錄驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡(jiǎn)單登錄驗(yàn)證的相關(guān)資料,需要的朋友可以參考下2016-04-04
Python THREADING模塊中的JOIN()方法深入理解
這篇文章主要介紹了Python THREADING模塊中的JOIN()方法深入理解,本文用簡(jiǎn)潔易懂的語言總結(jié)了對(duì)JOIN()方法的理解,不同于其它文章,需要的朋友可以參考下2015-02-02
Python對(duì)稱的二叉樹多種思路實(shí)現(xiàn)方法
這篇文章主要介紹了Python對(duì)稱的二叉樹多種思路實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
python 進(jìn)程間數(shù)據(jù)共享multiProcess.Manger實(shí)現(xiàn)解析
這篇文章主要介紹了python 進(jìn)程間數(shù)據(jù)共享multiProcess.Manger實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Python assert關(guān)鍵字原理及實(shí)例解析
這篇文章主要介紹了Python assert關(guān)鍵字原理及實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
jupyter notebook更換皮膚主題的實(shí)現(xiàn)
這篇文章主要介紹了jupyter notebook更換皮膚主題的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

