Solo puedo obtener la cantidad de cuadros CAP_PROP_FRAME_COUNT usando CV2.
Sin embargo, no puedo encontrar el parámetro para obtener la duración del video usando cv2.
¿Como hacer eso?
Muchísimas gracias.
En OpenCV 3, la solución es:
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()cv2 no está diseñado para explorar metadatos de video, por lo que VideoCapture no tiene una API para recuperarlos directamente.
En su lugar, puede "medir" la longitud de la transmisión: busque hasta el final, luego obtenga la marca de tiempo:
>>> v=cv2.VideoCapture('sample.avi') >>> v.set(cv2.CAP_PROP_POS_AVI_RATIO,1) True >>> v.get(cv2.CAP_PROP_POS_MSEC) 213400.0La verificación muestra que esto establece el punto después del último cuadro (no antes), por lo que la marca de tiempo es de hecho la longitud total exacta de la transmisión:
>>> 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 frameCapture el video y emita la duración en segundos
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")