首页 > 解决方案 > Opencv VideoWriter 临时文件

问题描述

我正在尝试将图像列表写入 mp4 视频。当我将 VideoWriter 用于本地 mp4 文件路径时,此代码运行良好,并且我的 mp4 文件保存到磁盘。

但是,我需要在服务器中使用临时文件执行此操作,然后发送到其他地方。要使用临时文件进行测试,我只需将 VideoWriter 文件名更改为 file_out.name(通过 NamedTemporaryFile)并复制到磁盘以验证它是否正常工作。我得到的输出是一个同样大小的 mp4 文件,但它不能被任何视频播放器打开 - 所以文件一定有问题。

file_out = tempfile.NamedTemporaryFile(suffix='.mp4')

video = cv2.VideoWriter(file_out.name,cv2.VideoWriter_fourcc(*'avc1'),20,(width,height))

for i in range(len(images)):
    video.write(np.asarray(images[i]))

shutil.copy(file_out.name, '/path/to/test_output.mp4')

可能会发生什么导致 VideoWriter 无法正确写入我的临时文件?

PS我的第一次尝试是将VideoWriter写入BytesIO,然后直接通过http发送-这不起作用,所以我退回到tempfile。

标签: pythonopencvtemporary-filesopencv-python

解决方案


解决了:

必须释放 VideoWriter 输出才能使复制文件的输出有效。

video.release()

这解决了问题。


推荐阅读