目錄
簡(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:無(wú)需安裝,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 cv2import timeimport subprocessfrom moviepy.editor import VideoFileClipdef 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 -1if __name__ == '__main__': file = r".videosmda-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 cv2import osdef 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_durationif __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)內(nèi)容!
聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。