macOS 14.5 下使用 FFmpeg 7.0.1 录制屏幕时,如何正确限制帧率?
macOS 14.5 下使用 FFmpeg 7.0.1 录制屏幕时,如何正确限制帧率?
我太懂你遇到的糟心情况了——用默认命令录屏时帧率直接拉满,按q停止后FFmpeg要吭哧吭哧处理堆积的帧,电脑风扇狂转半天才能退出。你试过在输出端加-r 24能解决,但听说用输入端的-framerate更规范却没效果,对吧?
先给你掰扯清楚这两个参数的本质区别:
- 把
-r 24放在输出端,相当于让FFmpeg先以设备默认帧率狂抓所有帧,再强行把输出视频“裁剪”成24fps——过程中会丢帧或者补帧,捕获阶段其实还是高负荷运行,只是最后输出看起来帧率正常了。 - 把
-framerate 24放在输入端,是直接给avfoundation捕获设备发指令:“你就按24fps的速度采集屏幕画面”,从源头控制帧率,不需要后期额外处理,理论上更高效。
那为什么你用-framerate没效果?大概率是这两个原因:
- FFmpeg默认用软件编码,处理速度跟不上:哪怕你限制了输入帧率,软件编码还是会积压一堆未处理的帧,停止时要一次性清完,自然卡顿又吵。
- macOS 14.5的avfoundation对
-framerate的兼容性小问题:部分系统版本下,单独指定-framerate可能无法被avfoundation正确识别,得配合其他参数才行。
给你几个实测有效的解决方案,按优先级尝试:
方案1:输入帧率+硬件编码(最推荐)
直接用Mac的硬件编码加速,让FFmpeg能实时处理帧,不会堆积缓存。命令如下:
ffmpeg -f avfoundation -framerate 24 -i 1 -c:v h264_videotoolbox output.mp4
h264_videotoolbox是Mac原生的硬件编码器,效率比软件编码高一大截,能彻底避免停止时的卡顿。如果你的Mac支持HEVC,也可以换成hevc_videotoolbox。
方案2:输入帧率+输出帧率双重保险
如果方案1还是不行,就同时指定输入和输出帧率,确保两端一致,减少FFmpeg的额外处理:
ffmpeg -f avfoundation -framerate 24 -i 1 -r 24 -c:v h264_videotoolbox output.mp4
这里的-r 24只是确保输出帧率和输入一致,不会像单独用输出-r那样做大量帧裁剪,核心还是靠-framerate控制捕获帧率。
方案3:降低捕获分辨率(辅助优化)
如果你的屏幕是高分辨率(比如4K/6K),哪怕24fps也会产生海量数据,加重处理负担。可以在输入端指定捕获分辨率,进一步降低压力:
ffmpeg -f avfoundation -framerate 24 -s 1920x1080 -i 1 -c:v h264_videotoolbox output.mp4
-s 1920x1080是指定捕获1080P分辨率,你可以根据需求换成其他合适的分辨率。
最后再提个小细节:先确认你的屏幕设备编号是否正确,用这个命令可以列出所有avfoundation设备:
ffmpeg -f avfoundation -list_devices true -i ""
确保你用的1是对应屏幕的设备编号,别选错设备导致参数白加了。
备注:内容来源于stack exchange,提问作者jsx97
相关产品推荐
相关产品推荐

