[英]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.