我使用这段代码捕获监视器上的所有内容,并将其保存到mp4文件中:
# screen recording config
sct = mss()
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(recording_file_name_location, fourcc, 20.0, (1920, 1080))
# while loop that captures the while screen image by image
while True:
sct_img = sct.grab(screen_resolution)
out.write(np.array(sct_img))
问题是,我希望这段代码在我从Windows机器上下线时停止录制,这确实发生了,视频被保存在我的桌面上,但它是不可播放的。
如果我通过PyCharm运行这段代码,并通过PyCharm (CTRL +C或使用PyCharm停止按钮)结束代码,那么它确实保存了mp4文件,并且我可以毫无问题地播放它。
另外,如果我从CMD启动代码,它可以正常工作,但是如果我关闭右上角的"X“上的CMD窗口,视频也是不可播放的。
我猜这是因为在后台杀死Python进程,所以脚本/代码永远不会正确地保存文件。
你们对这个问题有什么建议吗?如何保存mp4视频一旦我注销或关闭我的Windows机器?
提前谢谢你
发布于 2022-06-07 13:35:07
过程是突然杀死了。
由于无法调用out.release()
,视频无法播放。视频写入者没有机会将索引结构写入视频文件,只有在文件完成时才能这样做。
简单修复:创建一个.ts
文件,而不是任何其他格式/扩展名。这些“传输流”格式无需最后确定。
也许您需要了解注销时Windows是如何结束进程的。通常,Windows向每个应用程序/窗口发送一条WM_QUERYENDSESSION
和WM_ENDSESSION
消息,告诉它在强制结束之前结束自己。
https://stackoverflow.com/questions/72528598
复制相似问题