我正在嘗試使用 CV2 和 Python 從播放視頻中獲取當前播放時間位置(如果可能,以毫秒為單位)。
目前我正在使用此示例代碼來播放視頻檔案
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()
有沒有辦法得到這個值或計算它,它必須表示在請求時間播放的位置(及時,即 24.000 秒視頻的 12.500 秒)。
謝謝!
uj5u.com熱心網友回復:
是的,這可以通過使用VideoCapture.get(cv2.CAP_PROP_FPS)查詢視頻 FPS并跟蹤幀索引來實作。
例子:
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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/315311.html
上一篇:錯誤:(-215:Assertionfailed)!_image.empty()&&_image.type()==CV_8UC1&&(_image.isMat()||_image.isUMat())在
下一篇:OpenCV去除水印
