我有一台 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偏好设置)时,生成的视频光栅的大小始终是屏幕分辨率的四倍:
1024x640
→2048x1280
- ...
1920x1200
→3840x2400
另一方面,如果我将屏幕分辨率设置为最大值,则2880x1800
使用screenresolution
实用程序,输出的大小ffmpeg
将与屏幕分辨率相同。
在这两种情况下,该-video_size
选项都将被忽略ffmpeg
。
以上仅适用于内置显示器:对于任何外部显示器,屏幕分辨率和捕获的视频分辨率始终相同,无论比例级别如何。
问题:
- 为什么
ffmpeg
(或者更确切地说,avfoundation
输入设备)会出现这样的不一致? - 如何强制
ffmpeg
在捕获屏幕时始终使用当前显示分辨率?我宁愿不启用子采样(-vf scale=...
)来影响生成的光栅大小。
答案1
这似乎是一个已知ffmpeg
问题:应保留 HiDPI/Retina 屏幕录制的像素密度元数据。