M1 Mac使用MoviePy调整视频剪辑尺寸触发SIGKILL问题
解决MoviePy调整视频尺寸触发SIGKILL(退出码137)的问题
退出码137通常意味着系统因内存不足强制终止了进程。MoviePy默认会将视频帧加载到内存中处理,对于较长的剪辑或高分辨率视频,在内存有限的M1 Mac上容易触发这个问题;而你直接用FFmpeg能正常运行,是因为FFmpeg采用流式处理,不会把整个视频加载到内存。
以下是具体解决方法:
1. 减少内存占用优化
- 如果你不需要处理音频,加载视频时禁用音频:
with moviepy.editor.VideoFileClip(abs_path, audio=False) as video: subclip = video.subclip(args.start, args.end) # 保持原比例缩放(原视频1280x720是16:9,缩到640宽的话高度为360,避免强制拉伸) resized_clip = subclip.resize(width=640) resized_clip.write_videofile("output.mp4", codec="libx264", audio_codec="aac")
- 确保
subclip只截取必要片段,减少加载的帧数量,避免不必要的内存消耗。
2. 让MoviePy调用FFmpeg流式处理
通过write_videofile的ffmpeg_params直接传递FFmpeg缩放参数,复用你验证过的流式处理逻辑,避免MoviePy加载全量帧到内存:
with moviepy.editor.VideoFileClip(abs_path) as video: subclip = video.subclip(args.start, args.end) subclip.write_videofile( "output.mp4", codec="libx264", audio_codec="aac", ffmpeg_params=["-vf", "scale=iw*0.5:ih*0.5"] )
3. 升级MoviePy版本
MoviePy 1.0.3是较旧版本,后续版本针对内存管理和M1架构做了优化,建议升级到最新稳定版:
pip install --upgrade moviepy
4. 临时调整系统虚拟内存(Swap)
若上述方法仍无法缓解,可临时增加M1 Mac的虚拟内存:
- 打开终端执行以下命令查看当前swap状态:
sudo sysctl -w vm.swapusage
- 通过系统设置或第三方工具调整swap大小,这是临时方案,长期建议优先优化代码逻辑。
内容的提问来源于stack exchange,提问作者ThoughtfulHacking
相关产品推荐
相关产品推荐

