При использовании приведенного ниже кода он дает мне видео из потока с желаемым количеством кадров и выбранным мной 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
Продолжительность видеописателя контролируется частотой кадров и количеством кадров (OpenCV и Python) ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение