使用OpenCV和Python高效计算视频的总帧数
使用OpenCV和Python高效計算視頻的總幀數
- 1. 效果圖
- 2. 源碼
- 參考
這篇博客將介紹兩種使用OpenCV和Python計算視頻文件中幀數的方法。
-
超級快,它依靠OpenCV的視頻屬性功能,能夠(幾乎)立即確定視頻文件中的幀數。但是由于依賴(安裝的OpenCV +視頻編解碼器版本),此方法很容易出錯,甚至可能返回無意義的結果。
在這種情況下,需要使用第二種方法:手動計算視頻中的幀總數。
-
手動計算視頻中的幀數。盡管速度極慢,但此方法具有100%準確的優點。
計算可參考 imutils 庫中的count_frames函數。該函數將首先嘗試方法1,如果失敗,將自動恢復為方法2。
使用過程中如果更偏向準確性,則使用方法2,如果偏向近似值和速度,則使用方法1;
1. 效果圖
opencv自帶的高效計數如圖所示:
python count_frames.py --video videos/jurassic_park_trailer.mp4
[INFO] 4,790 total frames read from jurassic_park_trailer.mp4
低效的手動計數如圖所示:
python frame_counter.py --video videos/jurassic_park_trailer.mp4 --override 1
[INFO] 4,978 total frames read from jurassic_park_trailer.mp4
為什么幀計數不一致?
一切都歸結為快速和近似與緩慢但準確的關系。
- 使用OpenCV的視頻捕獲屬性,可以非??焖俚孬@得總幀數,但它可能不會100%有效。而且可能完全由于OpenCV /視頻編解碼器版本控制而使這種方法失敗。
- 使用手動計算幀數,則將花費很長時間,但是返回的幀總數將是準確的。
如果需要絕對準確的計數,請使用方法2。
如果需要大致的近似值,請使用方法1(除非失敗,否則無論如何您都將恢復為方法2)。
2. 源碼
# USAGE
# time python frame_counter.py --video videos/example.mp4 --override 1
# time python frame_counter.py --video videos/example.mp4# 導入必要的包
# 如果返回的總幀數為0,則99%是以下倆個原因,1)視頻文件的路徑不對;2)安裝的視頻編解碼器不對,解決辦法:安裝合適的視頻編解碼器,并重新編譯安裝opencv;from imutils.video import count_frames
import argparse
import os# 構建命令行參數及解析
# -video 視頻文件路徑
# -override 是否使用手動計幀數
ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video", required=True,help="path to input video file")
ap.add_argument("-o", "--override", type=int, default=-1,help="whether to force manual frame count")
args = vars(ap.parse_args())# 計算視頻文件的總幀數
override = False if args["override"] < 0 else True
total = count_frames(args["video"], override=override)# 展示幀總數在終端上
print("[INFO] {:,} total frames read from {}".format(total,args["video"][args["video"].rfind(os.path.sep) + 1:]))
參考
- https://www.pyimagesearch.com/2017/01/09/count-the-total-number-of-frames-in-a-video-with-opencv-and-python/
總結
以上是生活随笔為你收集整理的使用OpenCV和Python高效计算视频的总帧数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA IDEA集成geotools
- 下一篇: 使用OpenCV和Python生成视频条