使用OpenCV和Python高效计算视频的总帧数
使用OpenCV和Python高效計(jì)算視頻的總幀數(shù)
- 1. 效果圖
- 2. 源碼
- 參考
這篇博客將介紹兩種使用OpenCV和Python計(jì)算視頻文件中幀數(shù)的方法。
-
超級(jí)快,它依靠OpenCV的視頻屬性功能,能夠(幾乎)立即確定視頻文件中的幀數(shù)。但是由于依賴(安裝的OpenCV +視頻編解碼器版本),此方法很容易出錯(cuò),甚至可能返回?zé)o意義的結(jié)果。
在這種情況下,需要使用第二種方法:手動(dòng)計(jì)算視頻中的幀總數(shù)。
-
手動(dòng)計(jì)算視頻中的幀數(shù)。盡管速度極慢,但此方法具有100%準(zhǔn)確的優(yōu)點(diǎn)。
計(jì)算可參考 imutils 庫中的count_frames函數(shù)。該函數(shù)將首先嘗試方法1,如果失敗,將自動(dòng)恢復(fù)為方法2。
使用過程中如果更偏向準(zhǔn)確性,則使用方法2,如果偏向近似值和速度,則使用方法1;
1. 效果圖
opencv自帶的高效計(jì)數(shù)如圖所示:
python count_frames.py --video videos/jurassic_park_trailer.mp4
[INFO] 4,790 total frames read from jurassic_park_trailer.mp4
低效的手動(dòng)計(jì)數(shù)如圖所示:
python frame_counter.py --video videos/jurassic_park_trailer.mp4 --override 1
[INFO] 4,978 total frames read from jurassic_park_trailer.mp4
為什么幀計(jì)數(shù)不一致?
一切都?xì)w結(jié)為快速和近似與緩慢但準(zhǔn)確的關(guān)系。
- 使用OpenCV的視頻捕獲屬性,可以非常快速地獲得總幀數(shù),但它可能不會(huì)100%有效。而且可能完全由于OpenCV /視頻編解碼器版本控制而使這種方法失敗。
- 使用手動(dòng)計(jì)算幀數(shù),則將花費(fèi)很長(zhǎng)時(shí)間,但是返回的幀總數(shù)將是準(zhǔn)確的。
如果需要絕對(duì)準(zhǔn)確的計(jì)數(shù),請(qǐng)使用方法2。
如果需要大致的近似值,請(qǐng)使用方法1(除非失敗,否則無論如何您都將恢復(fù)為方法2)。
2. 源碼
# USAGE
# time python frame_counter.py --video videos/example.mp4 --override 1
# time python frame_counter.py --video videos/example.mp4# 導(dǎo)入必要的包
# 如果返回的總幀數(shù)為0,則99%是以下倆個(gè)原因,1)視頻文件的路徑不對(duì);2)安裝的視頻編解碼器不對(duì),解決辦法:安裝合適的視頻編解碼器,并重新編譯安裝opencv;from imutils.video import count_frames
import argparse
import os# 構(gòu)建命令行參數(shù)及解析
# -video 視頻文件路徑
# -override 是否使用手動(dòng)計(jì)幀數(shù)
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())# 計(jì)算視頻文件的總幀數(shù)
override = False if args["override"] < 0 else True
total = count_frames(args["video"], override=override)# 展示幀總數(shù)在終端上
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/
總結(jié)
以上是生活随笔為你收集整理的使用OpenCV和Python高效计算视频的总帧数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA IDEA集成geotools
- 下一篇: 使用OpenCV和Python生成视频条