@Vladosio

Есть ли какой-то автоматический способ для подбора FPS перед записью видео?

Существует ли какой-то способ подобрать автоматически 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()
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
tumbler
@tumbler Куратор тега Python
бекенд-разработчик на python
FPS - величина, обратная времени. Замеряете, за сколько у вас обрабатывается один кадр, и получаете максимальный доступный FPS для обработки в реальном времени.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы