Продолжительность видеописателя контролируется частотой кадров и количеством кадров (OpenCV и Python)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Продолжительность видеописателя контролируется частотой кадров и количеством кадров (OpenCV и Python)

Сообщение Anonymous »

При использовании приведенного ниже кода он дает мне видео из потока с желаемым количеством кадров и выбранным мной FPS. Однако продолжительность видео становится продолжительностью =(1/fps)*frameCount. Я думаю, что mp4 сжимает видео, чтобы продолжительность видео не увеличивала размер файла, это хорошо. Тем не менее, есть ли способ сделать видео короче?
РЕДАКТИРОВАТЬ: Пример сценария:

Я хочу иметь 1 кадр на каждую минуту потоковой передачи, и я хочу иметь, скажем, 1 кадр в секунду видео с 1000 кадрами. В этом сценарии фактическая продолжительность потоковой передачи составит 1000 минут, но мне нужно видео с частотой 1 кадр/с и длительностью 1000 секунд.

Вот код, который я использую ниже:

import os
import cv2 as cv
import math
cap = cv.VideoCapture('rtsp://**.***.**.*:*****/***********')

# Frame sizes
down_width = 640
down_height = 480
down_points = (down_width, down_height)

# stream fps and desired FPS
fpsSystem = cap.get(cv.CAP_PROP_FPS) # 25 in my case
fps = 1.0/60

# Frame Count parameters
frameRead = 0 # successfully readed frame number
DesFrameCount = 60*6 # Desired frame count
takeFrameTime = 1/fps # every TakeFrameTime seconds frames will be stored
frameCycle = 0 # every frameCycle. frame will be stored
frameWritten = 0

success = True
# Define the codec and create VideoWriter object
fourcc = cv.VideoWriter_fourcc(*'mp4v')

# Video Name
randomName = np.random.randint(0,1000)
out = cv.VideoWriter('output'+str(randomName) + ".mp4", fourcc, fps, (down_width, down_height))

while success:

success, frame = cap.read()

if not success:
print("Can't receive frame (stream end?). Exiting ...")
break
else:
frameRead += 1
frameCycle += 1

# Frame Resizing
frame = cv.resize(frame,down_points,interpolation= cv.INTER_LINEAR)

# Save the particular frame desired to be written according to frame parameters
if frameCycle == math.floor(fpsSystem*takeFrameTime):
frameCycle = 0
out.write(frame)
frameWritten += 1

# Stop the loop when desired number of Frame obtained
if cv.waitKey(1) == ord('q') or (frameWritten == DesFrameCount):
break

# Release everything if job is finished
cap.release()
out.release()
cv.destroyAllWindows()



Подробнее здесь: https://stackoverflow.com/questions/730 ... pencv-pyth
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»