Mac系统下如何截取指定窗口?含Imagemagick/Ffmpeg实现咨询
在Mac上捕获包含超出屏幕区域的应用窗口(FFmpeg/ImageMagick方案)
FFmpeg 实现方案
Mac 下 FFmpeg 不支持 X11 ID,但可以通过 avfoundation 输入设备直接定位目标窗口,且默认支持捕获窗口完整区域(包括超出显示器可视范围的部分)。
获取窗口标识
用osascript查询目标窗口的名称或PID:# 列出所有应用窗口名称 osascript -e 'tell application "System Events" to get name of every window of every application' # 获取指定应用的PID(替换YourAppName为目标应用名) osascript -e 'tell application "YourAppName" to get its PID'执行窗口捕获
根据窗口名称或PID启动FFmpeg捕获:# 通过窗口名称捕获(替换Your Window Title为实际窗口名) ffmpeg -f avfoundation -window_title "Your Window Title" -i "none" -vcodec libx264 output.mp4 # 通过PID捕获(替换YourAppName为目标应用名) ffmpeg -f avfoundation -window_id $(osascript -e 'tell application "YourAppName" to get its PID') -i "none" -vcodec libx264 output.mp4
ImageMagick 实现方案
ImageMagick 本身没有Mac原生窗口捕获能力,可配合系统自带的 screencapture 命令完成完整窗口捕获,再用ImageMagick处理。
捕获完整窗口
先获取窗口ID,再用screencapture的-o参数强制捕获超出屏幕的区域:# 获取目标应用的前置窗口ID(替换YourAppName为目标应用名) WINDOW_ID=$(osascript -e 'tell application "YourAppName" to id of front window') # 捕获完整窗口到图片 screencapture -l $WINDOW_ID -o full_window.pngImageMagick 后续处理
捕获完成后,可直接用ImageMagick进行格式转换、裁剪等操作:# 将捕获的图片转为JPG并压缩 convert full_window.png -quality 80 full_window.jpg
注意事项
- 需授予终端/FFmpeg/ImageMagick 屏幕录制权限:前往「系统设置」→「隐私与安全性」→「屏幕录制」,添加对应应用。
- 部分全屏应用可能无法捕获完整窗口,建议切换为窗口模式后尝试。
- 窗口名称含空格时,需用双引号包裹(如
"My Project Window")。
内容的提问来源于stack exchange,提问作者youngho Park
相关产品推荐
相关产品推荐

