Я пытаюсь сохранить видеопоток и замедлить его. Я знаю, как читать любое видео с компьютера (например, в формате mp4) и делать интервалы (я пытался, мне это удалось). Теперь я пытаюсь сделать то же самое с видео потоком. У меня есть ссылка для видео m3u8 https://wstream.comanet.cz: 1943 / live / Vrchlabi-sjezdovka2.stream_360p / playlist.m3u8 , я читаю видео следующим образом: (Инициализация:)
import cv2 as cv
url = 'https://wstream.comanet.cz:1943/live/Vrchlabi-sjezdovka2.stream_360p/playlist.m3u8'
fourcc = cv.VideoWriter_fourcc(*'mp4v')
height = video.get(cv.CAP_PROP_FRAME_HEIGHT)
width = video.get(cv.CAP_PROP_FRAME_WIDTH)
outp = cv.VideoWriter(save_path, fourcc, 60,(int(width), int(height)))
video = cv.VideoCapture("url")
dir_stream = "streamframes"
if not os.path.exists(dir_stream):
os.makedirs(dir_stream)
if not video.isOpened():
print("Error opening video file.")
(Есть основная часть - l oop:)
name = 0
while video.isOpened():
ret, frame = video.read()
name += 1
filename = f"{dir_stream}/{name}.jpg"
cv.imwrite(filename, frame)
f = cv.imread(filename)
outp.write(f)
Мне не нравится способ сохранения видео ... в любом случае - это не совсем неправильно ... это работает , но после нескольких прочитанных фреймов (иногда это 153, 212 и c), значение ret
возвращает значение False
, и код попадает в бесконечное число l oop. После того, как я остановил программу, мое видео было сохранено, и я смог воспроизвести его, оно было коротким (потому что оно записывалось не так долго, как я хотел, из-за бесконечного l oop) ...
In часть "while" я тоже попробовал ...:
while video.isOpened():
ret, frame = video.read()
if ret:
frame_r = cv.imread(frame)
outp.write(frame_r)
... это намного приятнее, но cv.imread(frame)
не работал, поэтому я сделал это грязно, как вы можете видеть выше.
Моя цель - записывать онлайн-поток с python в течение некоторого времени (например, в течение 5 часов), мне не нужна запись со скоростью 30 кадров в секунду (например, 1fps тоже хорошо). Может кто-нибудь помочь мне с этой проблемой? Или у вас есть совет? Почему ret
значение возвращает False через некоторое случайное время? У вас есть другое решение? Я буду очень благодарен за вашу помощь, это для моего школьного проекта.