今天来说个错误,看下面:
1 2 3 4 5 6 7 8 |
(detect_mcj) 840 3 2160 3840 Traceback (most recent call last): File "CNN.py", line 186, in <module> current_data = dataset[i] File "CNN.py", line 57, in __getitem__ transformed_video = torch.zeros([video_length, video_channel, video_height, video_width]) RuntimeError: [enforce fail at CPUAllocator.cpp:64] . DefaultCPUAllocator: can't allocate memory: you tried to allocate 83607552000 bytes. Error code 12 (Cannot allocate memory) |
这句代码是新建一个视频帧大小的数据块,目前电脑内存是32G,之前处理1080P
或者720P
视频的时候一直没问题,最近处理的视频比较大,报了:
RuntimeError: [enforce fail at CPUAllocator.cpp:64] . DefaultCPUAllocator: can't allocate memory: you tried to allocate 83607552000 bytes. Error code 12 (Cannot allocate memory)
这个错很明显就是内存不足的问题,我们来看一下内存占用的计算方法83607552000=840*3*2160*3840*4
这里乘以4是因为一个字节占用4个二进制位。所以,解决上述错误的方法有两个,一是增大内存,二是缩小视频帧的尺寸。
再说下二吧,缩小视频帧的尺寸也有很多种方法,这里我选择边缩小边计算,推荐个包:moviepy
一个简单的用法是:
1 2 3 4 |
import moviepy.editor as mp clip = mp.VideoFileClip("movie.mp4") clip_resized = clip.resize(height=1080) # 宽为1080,并保持比例不变 clip_resized.write_videofile("movie_resized.mp4") |
本文最后更新于2021年5月23日,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!