Существует ли какой-то способ подобрать автоматически FPS перед записью видео, чтобы было без потери кадров? Например, если я записал 10 секунд видео, то файл должен получиться с размером в 10 секунд.
А так получается, что моя IP-камера(телефон) может записывать 30 кадров в секунду, а в коде если установить 30 кадров в секунду или выбрать FPS через
cap.get(cv2.CAP_PROP_FPS), то теряется часть записи в зависимости от размера кадра(1920*1080, 1280*720 и т.д.). Получается так, что чем больше размер кадра, то тем меньше FPS нужно, чтобы видео получилось примерно такой же длительностью и без задержек.
Возможно ли как-то сделать по-другому, чтобы автоматически подбирало необходимый FPS для оптимальной записи видео?
Если записывать с протоколом
rtsp и использовать
cap.get(cv2.CAP_PROP_FPS), то
print(fps) выводит 180.000 кадров в консоль, а позже появляется ошибка:
180000.0
[mpeg4 @ 00000222e21f0a40] timebase 1/180000 not supported by MPEG 4 standard, the maximum admitted value for the timebase denominator is 65535
Could not open codec 'mpeg4': Unspecified error
import cv2
import os, os.path
import sys
import time
import pathlib
from PIL import Image
cap = cv2.VideoCapture('rtsp://IP:Port/h264_pcm.sdp')
w = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
h = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = 20#cap.get(cv2.CAP_PROP_FPS)
print(fps)
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
folder = pathlib.Path().absolute()
video1 = fr'{folder}/VMF/VIDEO_{time.strftime("%m.%d.%Y_%H.%M.%S")}.avi'
out = cv2.VideoWriter(video1, fourcc, fps, (int(w),int(h)))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
frame = cv2.flip(frame,1)
out.write(frame)
cv2.imshow('video',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
cap.release()
out.release()
cv2.destroyAllWindows()