0

我正在尝试保存视频流,并将其延时。我知道如何从计算机读取任何视频(例如 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.")

(有一个主要部分 - 循环:)

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等)之后,ret值是返回False值并且代码进入无限循环。在我停止程序后,我的视频被保存了,我可以播放它,它只是很短(因为它没有按照我的意愿录制,因为无限循环)......

在“while”部分我也尝试过......:

while video.isOpened():
        ret, frame = video.read()
        if ret:
            frame_r = cv.imread(frame)
            outp.write(frame_r)

...它更好,但cv.imread(frame)没有工作,所以我以你可以在上面看到的肮脏方式做到了。

我的目标是用 python 记录在线流一段时间(例如 5 小时),我不需要 30fps 的记录,(例如 1fps 也可以)。 谁能帮我解决这个问题?或者你有什么建议?为什么ret值在随机时间后返回 False?你有其他解决方案吗?我会非常感谢你的帮助,这是为了我的学校项目。

4

0 回答 0