Захват экрана OS X с помощью родного QuickTime
Вчера, я рассказывал вам о том, как зеркалировать и записывать рабочий стол iOS-устройства, используя для этого Mac с установленным на нем Reflector. Сегодня речь пойдет о том как записать рабочий стол OS X, причем не прибегая к сторонним приложениям и абсолютно бесплатно. Ситуации, когда нужно сделать захват экрана на Mac’е возникают намного чаще, чем в случае с айфоном, поэтому, я решил написать об этом. Изложенный ниже способ, лишний раз подтверждает полезность встроенного софта, которым Apple комплектует свою операционку.
* * *
Запись экрана выполняется при помощи QuickTime Player, приложения которое входит в комплект OS X. Сама процедура очень проста и делается буквально в пару кликов.
Запускаем QuickTime Player, переходим в меню «Файл» — «Новая запись изображения на экране» и в открывшемся окошке нажимаем характерную красную кнопочку. Тут нас спросят какую область экрана мы хотим записывать: если весь экран — нажимаем кнопочку еще раз; если нужен частичный захват — выделяем то, что хотим записать и жмем «Начать запись».
С этого момента все, что происходит на экране Mac, записывается в видеофайл. Для окончания записи нажимаем ту же кнопку и просматриваем отснятый ролик. Если результат нас устраивает, закрываем окно предпросмотра, при этом сразу откроется диалог сохранения файла. Выбираем имя файла, каталог для сохранения, формат (качество) видео и жмем «Сохранить». Экспорт займет некоторое время, в зависимости от продолжительности видео, после чего ваш ролик окажется в указанной папке.
Также при желании вы можете добавить комментарии к вашему ролику. Для этого, прежде чем нажать кнопку записи — кликаем на треугольник и выбираем источник звука. Это может быть как встроенный микрофон, так подключенный по USB или линейному входу. В этой же менюшке можно выбрать качество видео и добавить маркеры нажатия мыши.
Вот такой вот замечательный инструмент идет в комплекте с OS X. Он просто работает и выполняет свою функцию. Быстро, удобно и ничего лишнего. Браво, Apple!
Как записать видео с экрана Mac при помощи QuickTime Player
Функция записи экрана в видеоплеере QuickTime Player появилась на Mac еще c выходом OS X Lion Apple.
Записать видео с экрана Mac при помощи QTP довольно просто, для этого:
1. Откройте приложение QuickTime Player. Программа находится по пути Finder → Программы, также легко открывается через Launchpad (в папке Другие) или поиск Spotlight.
2. Для начала записи можно использовать сочетание клавиш ⌘Cmd + Control + N или же просто выбрать соответствующий пункт в панели меню.
3. Сразу после активации записи Вы увидите черное окошко, в котором можно настроить некоторые опции.
Здесь Вы можете выбрать микрофон для записи пояснений к Вашему видео, а также включить отображение нажатий мыши на видео.
4. При включении опции отображения нажатий мыши, во время записи при нажатии на какой-либо объект на экране, вокруг указателя будет отображаться черный кружок.
5. После нажатия на кнопку записи Вы сможете выбрать: записать изображение со всего экрана или отметить определенную область.
6. По окончании записи нажмите на кнопку «стоп» на панели меню.
7. Для того чтобы поделиться видео, нажмите кнопку Поделиться, которая появится при наведении курсора на окно. Опция позволяет загрузить видео на YouTube, отправить по электронной почте, AirDrop и т.д.
8. Для того чтобы сохранить видео на компьютер, перейдите в меню Файл и выберите Сохранить. Можно также воспользоваться сочетанием клавиш ⌘Cmd + S.
9. Для изменения разрешения (качества) видео при сохранении, перейдите в меню Файл и выберите Экспортировать как.
ПО ТЕМЕ: Стеки (Stacks) в macOS Mojave, или как упорядочить файлы на рабочем столе в аккуратные группы.
Как записать видео с экрана Mac при помощи приложения Снимок экрана (только для macOS Mojave и позднее)
С выпуском macOS Mojave разработчики Apple оснастили стандартное приложение по созданию скриншотов Снимок экрана возможностью съемки видео с экрана Mac. С помощью новых инструментов процесс захвата видео с экрана станет еще проще. Функция не предполагает использования QuickTime Player, приложение для записи экрана можно найти на новой панели инструментов.
1. Откройте приложение Снимок экрана. Программа находится по пути Finder → Программы → Утилиты → Снимок экрана, также легко открывается через Launchpad (в папке Другие) или поиск Spotlight.
Приложение Снимок экрана запускается также при помощи сочетания клавиш ⌘Cmd + ⇧Shift + 5.
После запуска программы в нижней части экрана появится горизонтальная панель инструментов, левая часть которой относится к созданию скриншотов, а правая – к съемке видео с экрана Mac.
2. Нажмите «Запись всего экрана» или «Записать выбранной области».
3. Для начала записи, нажмите кнопку «Запись».
4. Выберите часть экрана, которую вы хотите записать, если вы хотите захватить только его часть. Запись начнется сразу после вашего выбора.
5. Нажмите кнопку «Стоп» на панели меню, чтобы остановить запись.
6. При необходимости, нажмите на появившуюся миниатюру снятого видео в правом нижнем углу для запуска экрана редактирования видео.
Как отредактировать (обрезать) видео записи экрана в macOS Mojave
1. После записи видео в правом нижнем углу появится его миниатюра. Нажмите на нее для запуска режима редактирования.
Если вы не успели нажать на миниатюру, откройте снятое видео по пути, указанном в Параметрах. По умолчанию это Рабочий стол.
2. Нажмите кнопку обрезки в верхнем правом углу окна редактирования.
3. При необходимости передвиньте точки захвата на обоих концах временной шкалы записи, чтобы изменить длину записи.
4. Нажмите «Готово».
5. Для того чтобы поделиться видео, нажмите кнопку Поделиться в верхнем углу окна. Опция позволяет загрузить видео на YouTube, отправить по электронной почте, AirDrop и т.д.
6. Для изменения разрешения (качества) видео при сохранении, откройте видео в приложении QuickTime Player и перейдите в меню Файл и выберите Экспортировать как.
Если вам нужно записать звук на Мас, вы можете использовать приложение, которое входит в пакет OS X без загрузок каких-либо сторонних программ. Идеальное для этого решение — QuickTime, хотя большинство пользователей принимают его за видеоплеер. Тем не менее, приложение может записывать видео, видео экрана или аудио, приобретая неожиданный потенциал.
QuickTime сохраняет звук из микрофона в легком m4a формате, что позволяет быстро записывать короткие голосовые напоминания, разговоры, звуковые эффекты или даже использовать программу для создания рингтонов. Мас не обладает встроенным приложением Voice Memos, как iPhone, использование QuickTime наиболее рационально в этом случае. Далее приводим короткий туториал по записи звука с помощью QuickTime:
1. Открыть плеер QuickTime, иконка которого находится в папке приложений
2. Открыть в плеере меню «файл» и выбрать «запись аудио»
3. Создать новый звук / запись аудио
4. Нажать на красную кнопку «Запись» для того, чтобы записать звук с микрофона.
После окончания записи необходимо нажать на ту же самую кнопку для того, чтобы остановить процесс, а после вернуться в меню «файл» и сохранить запись с выбранным названием. Запись сохранится в высококачественном сжатом формате m4a, который может проигрываться почти на всем, включая Mac, iTunes, Windows PC, iPhone и iPad или даже телефоном на ОС Android.
Запись звука на Mac
КАК ЗАПИСАТЬ ЗВУК В ПРОГРАММЕ QUICKTIME С ПОМОЩЬЮ ВСТРОЕННОГО МИКРОФОНА —
Во всех компьютерах Mac, кроме Mac Pro и Mac mini, есть встроенный микрофон и видеокамера. Их можно использовать не только для общения по Skype, Facetime или Messages, но и для записи звука и видео.
1. Запустите программу QuickTime.
2. В Строке меню Apple выберите Файл > Новая Аудиозапись.
3. В новом окне можно выбрать качество записи и устройство, с которого будет осуществляться запись.
По умолчанию выбран Встроенный вход: Микрофон. Для начала записи нажмите на круглую кнопку с красной точкой — начнется запись.
4. Во время записи в окне будет отображаться время записи и размер записываемого файла. Для остановки записи нажмите на круглую кнопку.
5. Для сохранения файла в Строке меню Apple выберите Файл > Сохранить.
6. В новом окне укажите название файла, место сохранения и нажмите кнопку Сохранить.
КОНВЕРТИРОВАНИЕ В ФОРМАТ MP3.
1. Запустите программу iTunes.
2. В Строке меню Apple выберите iTunes > Настройки
3. В новом окне Основные настройки выберите вкладку Основные и нажмите на кнопку Настройки импорта…
4. выберите Импортер: Кодер MP3, Настройка: Высокое качество (160 кбит/с) и нажмите ОК. Закройте окно настроек также нажав OK.
Инструменты: ffmpeg + x11grab + Xvfb
В MacPorts в ffmpeg модуль x11grab в принципе отсутствует. Собрать его целиком из исходников с первого раза не вышло, потому я решился пропатчить файл порта для ffmpeg-devel:
/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/multimedia/ffmpeg-devel/Portfile
Туда в конфигурацию nonfree я добавил строки —enable-x11grab и —enable-shared, для активации x11grab.
Забегая наперед скажу, что в этом методе нашелся изъян, потому я не выкладываю Portfile с правками, а описываю его тут только для ознакомления.
Когда X программа отображается в сессии (дисплее) :0.0 по-умолчанию, запись видео дает небольшую частоту кадров, в основном из-за размера экрана (2560×1440 у iMac), а скорее всего еще и из-за отрисовки графики, потому я решил перенаправлять программы в виртуальный дисплей с небольшим разрешением. Это делается через проект Xvfb, который без проблем установился из портов.
Запускается он довольно просто через терминал (размер с запасом):
Xvfb :1 -screen 0 1024x800x15 -shmem
Так же просто подключается к этому виртуальному дисплею ffmpeg:
ffmpeg -r 30 -s 1024×768 -f x11grab -i :1.0+0,20 -vcodec qtrle target.mov
На этом этапе меня ждала ошибка с переполнением Shared Memory, которая зачем-то в OS X установлена в неприличное значение в 4mb. Временное увеличение ее размера описывается и в рекомендациях Apple для серверов, и в других источниках:
sudo sysctl -w kern.sysv.shmmax=67108864
sudo sysctl -w kern.sysv.shmall=67108864
Запись сессии VirtualBox
Следующим этапом я решил вывести через X сервер что-то полезное. Первой мыслью было собрать X-версию VirtualBox, а уже там в виртуальной машине показывать буквально что-угодно, но VirtualBox для маков давно уже мигрировал на Cocoa, потому это был тупик. Второй здравой мыслью было подключиться по RDP к виртуальной машине и записывать сессию rdesktop, благо он работает именно под X. Активация RDP под VirtualBox довольно простая, но требует установки Extension Pack с официального сайта.
Подключение rdesktop с выводом через экран :0.1
DISPLAY=:1.0 rdesktop -xl localhost
После этих действий ffmpeg начинает довольно успешно писать видео в .mov файл. В моем случае это был удачно подвернувшийся под руку Android x86:
К сожалению, видео получается довольно дерганное, сказывается сжатие rdp, потому анимацию так снимать не очень хорошо.
Следующим шагом я решил перейти от RDP к VNC. В VirtualBox встроили VNC сервер, но не в публичные билды, а в собранные из портов или исходников. Никаких манипуляций с портами делать не пришлось, после сборки порта virtualbox я получил версию 4.1.14, с которой вполне можно работать.
Неприятным моментом оказалось лишь то, что VNC не доступен через интерфейс, а только при запуске в headless режиме:
VBoxHeadless -startvm ‘Android x86’ -v on —vnc
Управлять таким режимом приходится либо через второй сеанс VNC, либо снова через RDP, что не очень удобно, но в целом терпимо. Для захвата VNC потока использовался vncviewer, перенаправленный на виртуальный X дисплей:
vncviewer localhost -ViewOnly -display :1.0 -PreferredEncoding raw -FullColor
Результатом всех этих изысков стало 5-минутное видео c честными 30 fps в разрешении 1024х768:
(заранее извиняюсь за качество контента, я все-таки не профессиональный игрок)
Если присмотреться, то временами заметны паузы на несколько секунд. К сожалению, эту проблему так и не получилось победить, да и сам подход вышел довольно громоздким. Для простейшей демонстрации игры в Android этого в общем достаточно, потому я переключился на следующую задачу — съемку видео симулятора iPhone.
Захват VNC для всего экрана
В OS X встроен удаленный доступ, который работает одновременно под двум протоколам — ARD и VNC. До выхода Lion 10.7 можно было включить Screen Sharing в системных настройках и подключиться к текущей сессии любым VNC клиентом. Начиная с 10.7 начались серьезные изменения: были выброшены все типы сжатия, кроме ZRLE, подключиться могут далеко не все клиенты, да и после подключения мы видим серый экран входа в систему, а уже лишь после ввода пароля пользователя подключаемся к сессии. Это отлично для администраторов, но для моей задачи наоборот создавало только препятствия. Программа vncviewer (он же RealVNC) в последних версиях уже умеет подключаться к OS X, но не умеет вводить пароль пользователя, потому этот путь тоже оказался тупиковым.
В качестве альтернативы я взял бесплатный VNC сервер от TestPlant (от же osxvnc и он же Vine). Версия 3.0 с sourceforge устарела, потому надо собирать новую из исходников или брать с сайта TestPlant.
Несущественный баг этого сервера в том, что изредка клиент отпадает с ошибкой «unknown message type 131». Лечится перезапуском сервера.
С уже налаженной связкой ffmpeg+x11grab+Xvfb и vncviewer получилось снять полноэкранное видео текущей сессии OS X, где был запущен симулятор iPhone:
Размер виртуального буфера я выбрал заведомо меньше разрешения экрана, чтобы снимать верхний левый угол. Результат вышел вполне достойным, но к сожалению, с низким FPS — анимация в игре откровенно тормозила. Более того, паузы, которые были довольно редкими при схемке из VirtualBox стали гораздо более выраженными.
На этом этапе я провел несколько экспериментов, пересобирал VNC сервер и клиент из исходников, ставил минимальное разрешение экрана, но так и не добился хорошего результата. Уже через несколько часов стало понятно, что сам сервер отдает кадры с некоторой задержкой. После копания в коде выяснилось, что сервер намеренно делает паузу между обновлениями экрана:
/* OK, now, to save bandwidth, wait a little while for more updates to come along. */ /* REDSTONE — Lets send it right away if no rfbDeferUpdateTime */ if (rfbDeferUpdateTime > 0 && !cl->immediateUpdate && !cl->needNewScreenSize) { pthread_mutex_unlock(&cl->updateMutex); usleep(rfbDeferUpdateTime * 1000); pthread_mutex_lock(&cl->updateMutex); }
Оказалось, что переменная rfbDeferUpdateTime имеет начально значение 40 мс, но она вполне управляема и задается через коммандную строку. В самом Vine Server для этого есть отдельное поле:
Я поставил значение с запасом в 15, что дает максимальную частоту кадров в 66 fps. После этого прекратились лаги, но так и остались заметные паузы в видео. Теоретически, из такого видеоряда их можно повырезать и собрать что-то приемлемое, но хотелось более универсальное решение.
Туз в рукаве: vnc2flv
Теперь у меня был видеопоток в формате vnc отличного качества, оставалось только записать его в файл. Я снова подавил исконно программистское желание написать собственный дампер и нашел в недрах интернета проект vnc2swf, а затем и его наследника vnc2flv. Скептическое отношение к грабберу на Питоне прошло сразу же после первых результатов — программа записывает видеопоток в lossless качестве и разрешении WQHD с 15+ fps! Запускаю я ее без извратов с Xvfb, напрямую подключая к VNC серверу:
flvrec.py -r 30 127.0.0.1
Для повышения fps достаточно уменьшить разрешение до 1280×720. Что интересно, при этом можно перезапустить Vine VNC, он подхватит текущее разрешение экрана, а затем можно спокойно переключиться на родное разрешение и включать запись.
Установка vnc2flv очень проста и описана на сайте, особых подводных камней тут нет.
Готовое видео можно обработать в любимом видео-редакторе, обрезать лишнее и сконвертировать в нужный формат. Я пользуюсь VirtualDub, запущенным под wine, но это уже дело привычки.
Вот результат всей этой эпопеи:
Видео достаточно четкое, без рывков и лагов. Анимация записана нормально. Как по мне, вполне можно использовать для записи буквально чего-угодно с экрана Mac OS. Не хватает буквально только курсора, но это можно и так пережить.