在 Mac OS X 上通过 ffmpeg 捕获全屏录制时的视频分辨率

在 Mac OS X 上通过 ffmpeg 捕获全屏录制时的视频分辨率

我有一台 15 英寸的 2017MacBook Pro跑步Mac OS X10.13(高山脉): 在此处输入图片描述 默认显示支持高达的屏幕分辨率2880x1800,尽管通过标准 UI 可选择的最大分辨率限制为1920x1200(参见这个问题): 在此处输入图片描述

现在,我尝试通过 录制全屏视频ffmpeg,使用avfoundation设备,全分辨率(即没有任何子采样):

ffmpeg -y -v error -hide_banner -f avfoundation -i 1:none -threads 0 -f mp4 -vcodec mpeg4 -r 25/1 -qscale:v 1 output.mp4

奇怪的是,当屏幕分辨率在1024x640和之间变化时1920x1200(即可通过“缩放列表”中的Mac OS X偏好设置)时,生成的视频光栅的大小始终是屏幕分辨率的四倍:

  • 1024x6402048x1280
  • ...
  • 1920x12003840x2400

在此处输入图片描述

另一方面,如果我将屏幕分辨率设置为最大值,则2880x1800使用screenresolution实用程序,输出的大小ffmpeg将与屏幕分辨率相同。

在这两种情况下,该-video_size选项都将被忽略ffmpeg

以上仅适用于内置显示器:对于任何外部显示器,屏幕分辨率和捕获的视频分辨率始终相同,无论比例级别如何。

问题:

  1. 为什么ffmpeg(或者更确切地说,avfoundation输入设备)会出现这样的不一致?
  2. 如何强制ffmpeg在捕获屏幕时始终使用当前显示分辨​​率?我宁愿不启用子采样(-vf scale=...)来影响生成的光栅大小。

答案1

这似乎是一个已知ffmpeg问题:应保留 HiDPI/Retina 屏幕录制的像素密度元数据

相关内容