Я использую следующий код для создания простого видеопроигрывателя, но я видел, что когда я представляю строку cap.set (cv2.CAP_PROP_POS_FRAMES, arg), весь процесс становится очень медленным при воспроизведении видео. Плеер правильно работает с трекбаром, но скорость очень низкая. В общем, я заметил, что каждый раз, когда вы используете команду cap.set (cv2.CAP_PROP_POS_FRAMES, ...), скорость становится намного медленнее, чем когда игрок запускает команду «ret, frame = cap.read ()», не устанавливая номер кадра I необходимо использовать cv2, потому что цель работы состоит в том, чтобы обрабатывать все кадры путем наложения текста на каждый кадр и показывать на проигрывателе (код наложения текста здесь еще не написан)
import cv2
def on_trackbar(arg):
global cap
cap.set(cv2.CAP_PROP_POS_FRAMES,arg)
filevideo = r'D:\Documenti\Regate\Progetti\VideoOverlayData\Sviluppo\VideoOverlayData\INPUTFILES\28AugRace5.MP4'
cap = cv2.VideoCapture(filevideo)
Videofps = cap.get(cv2.CAP_PROP_FPS)
nr_of_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
if (cap.isOpened() == False):
print("Error opening video stream or file")
cv2.namedWindow('Frame', cv2.WINDOW_KEEPRATIO)
cv2.createTrackbar("F", "Frame", 0, nr_of_frames, on_trackbar)
videoCurrentFrameNumber = 0
while(cap.isOpened()):
# cap.set(1,videoCurrentFrameNumber)
ret, frame = cap.read()
if ret is True:
cv2.imshow('Frame',frame)
videoCurrentFrameNumber = int(cap.get(cv2.CAP_PROP_POS_FRAMES))
#cap.set(cv2.CAP_PROP_POS_FRAMES,videoCurrentFrameNumber)
#cap.set(5,50)
cv2.setTrackbarPos('F','Frame',videoCurrentFrameNumber)
#videoCurrentFrameNumber = videoCurrentFrameNumber +1
frameclick = cv2.waitKey(1) & 0xFF
if frameclick == ord('q'):
break
cap.release()
cv2.destroyAllWindows()