Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get current video playing position using cv2 in Python

I'm trying to get the current playing time position ( in milliseconds if possible) from a playing video using CV2 with Python.

Currently I'm using this sample code to play the video file

import cv2
import numpy as np

file_name = "2.mp4"
window_name = "window"
interframe_wait_ms = 30

cap = cv2.VideoCapture(file_name)
if not cap.isOpened():
    print("Error: Could not open video.")
    exit()

cv2.namedWindow(window_name, cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty(window_name, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)

  while (True):
      ret, frame = cap.read()
      if not ret:
          print("Reached end of video, exiting.")
          break

      cv2.imshow(window_name, frame)
      if cv2.waitKey(interframe_wait_ms) & 0x7F == ord('q'):
          print("Exit requested.")
          break

cap.release()
cv2.destroyAllWindows()

Is there a way to get this value or calculate it, it has to represent what's the position (in time, i.e 12.500 seconds of 24.000 seconds video) of the playback at the request time.

Thanks!

like image 955
AhmadMhd Avatar asked Jul 07 '26 08:07

AhmadMhd


1 Answers

Yes, this can be achieved by querying the video FPS using VideoCapture.get(cv2.CAP_PROP_FPS) and keeping track of the frame index.

Example:

file_name = "2.mp4"
window_name = "window"
interframe_wait_ms = 30

cap = cv2.VideoCapture(file_name)
if not cap.isOpened():
    print("Error: Could not open video.")
    exit()
fps = cap.get(cv2.CAP_PROP_FPS)
cv2.namedWindow(window_name, cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty(window_name, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
frame_index = 0
while True:
    ret, frame = cap.read()

    if not ret:
        print("Reached end of video, exiting.")
        break

    cv2.imshow(window_name, frame)
    print(F"playback time: {(frame_index/fps)*1000}ms")
    if cv2.waitKey(interframe_wait_ms) & 0x7F == ord('q'):
        print("Exit requested.")
        break

    frame_index += 1

cap.release()
cv2.destroyAllWindows()
like image 65
Black0ut Avatar answered Jul 09 '26 22:07

Black0ut



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!