У меня 15-дюймовый MacBook Pro 2017 года, работающий под управлением Mac OS X 10.13 (High Sierra):
Дисплей по умолчанию поддерживает разрешение экрана до 2880x1800 , несмотря на то, что максимальное разрешение, выбираемое через стандартный интерфейс пользователя, ограничено 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=...), чтобы повлиять на размер получаемого растра.

