我正在尝试保存视频流,并将其延时。我知道如何从计算机读取任何视频(例如 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?你有其他解决方案吗?我会非常感谢你的帮助,这是为了我的学校项目。