У меня 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=...
), чтобы повлиять на размер получаемого растра.