iva*_*eev 14
cv2不是为了探索视频元数据而设计的,因此VideoCapture没有API直接检索它.
您可以改为"测量"流的长度:寻找到最后,然后获取时间戳:
>>> v=cv2.VideoCapture('sample.avi')
>>> v.set(cv2.CAP_PROP_POS_AVI_RATIO,1)
True
>>> v.get(cv2.CAP_PROP_POS_MSEC)
213400.0
Run Code Online (Sandbox Code Playgroud)
检查显示这设置了最后一帧之后(而不是之前)的点,因此时间戳确实是流的确切总长度:
>>> v.get(cv2.CAP_PROP_POS_FRAMES)
5335.0
>>>> v.get(cv2.CAP_PROP_FRAME_COUNT)
5335.0
>>> v.set(cv2.CAP_PROP_POS_AVI_RATIO,0)
>>> v.get(cv2.CAP_PROP_POS_FRAMES)
0.0 # the 1st frame is frame 0, not 1, so "5335" means after the last frame
Run Code Online (Sandbox Code Playgroud)
Rya*_*thm 12
在OpenCV 3中,解决方案是:
import cv2
cap = cv2.VideoCapture("./video.mp4")
fps = cap.get(cv2.CAP_PROP_FPS) # OpenCV2 version 2 used "CV_CAP_PROP_FPS"
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
duration = frame_count/fps
print('fps = ' + str(fps))
print('number of frames = ' + str(frame_count))
print('duration (S) = ' + str(duration))
minutes = int(duration/60)
seconds = duration%60
print('duration (M:S) = ' + str(minutes) + ':' + str(seconds))
cap.release()
Run Code Online (Sandbox Code Playgroud)
捕获视频并输出持续时间为秒
vidcapture = cv2.VideoCapture('myvideo.mp4')
fps = vidcapture.get(cv2.CAP_PROP_FPS)
totalNoFrames = vidcapture.get(cv2.CAP_PROP_FRAME_COUNT);
durationInSeconds = float(totalNoFrames) / float(fps)
print("durationInSeconds: ",durationInSeconds,"s")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12615 次 |
| 最近记录: |