繁体   English   中英

将帧组合成一个视频时如何避免系统死机

[英]How to avoid system kills when combining frames into one video

我正在使用 python 将 5576 张图像以 30 fps 的速度组合成一个视频。

我尝试了许多在互联网上发布的代码,但是我总是收到这个错误。

Process finished with exit code 137 (interrupted by signal 9: SIGKILL)

我查看操作系统正在杀死我的进程。

我正在使用 ubuntu、pycharm、python3.8 64 位。

import time
import cv2
import numpy as np
import glob
import re


#Natural key for natural sort
def atoi(text):
    return int(text) if text.isdigit() else text

def natural_keys(text):
    return [ atoi(c) for c in re.split(r'(\d+)', text) ]

li = []
for filename in glob.glob('det/*.jpg'):
    li.append(filename)

li.sort(key=natural_keys)

img_array = []
for filename in li:
    img = cv2.imread(filename)
    height, width, layers = img.shape
    size = (width, height)
    img_array.append(img)
    time.sleep(0.1)
    print(f"Frame #{filename}")

out = cv2.VideoWriter('Video/label_vid.avi', cv2.VideoWriter_fourcc(*'DIVX'), 30, size)

for i in range(len(img_array)):
    out.write(img_array[i])
out.release()

在我看来,该过程必须for filename in li:img = cv2.imread(filename)崩溃。 您在这里尝试做的是使用cv2.imread()读取 5K 图像。 假设单个图像在内存中的大小为 1MB(这与磁盘大小不同),那么上述过程将占用 5GB 的 memory。 在这种情况下,我建议的是,我们应该将帧直接编码到视频 stream 中,而不是读取所有图像并将它们存储在img_array.append(img)中:

out = cv2.VideoWriter('Video/label_vid.avi', cv2.VideoWriter_fourcc(*'DIVX'), 30, size)

for filename in li:
    img = cv2.imread(filename)
    out.write(img)
out.release()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM