Как стать автором
Обновить

Пакетное снятие скриншотов при помощи PowerShell и adb

Привет, сообщество.

Сегодня я хотел бы поделиться с вами небольшим и очевидным лайфхаком, который я использовал, чтобы наделать много скриншотов для своей игры.

Он особенно полезен, когда вы разрабатываете динамичную игру, в которой эффектная сцена может случиться за доли секунды, и, конечно, вы не успеете даже и глазом моргнуть, не то чтобы снять скриншот.

Почему не воспользовался сторонней утилитой? Лично я не хотел тратить время на поиски подходящей утилиты и устанавливать что-то дополнительно себе на устройство. К тому же я сомневаюсь, что такие утилиты смогут записывать снятый скриншот сразу на компьютер, не тратя память устройства и ваше время.

Почему не снять видео и не вырезать кадры? Во первых, для этого нужен редактор видео, или хотя бы видеоплеер, а у меня на рабочей лошадке ничего этого не было. И зачем мне все это, если цель — парочка, а может десяток, эффектных скриншотов.
Конечно, полноценное видео лучше скриншотов, но скриншоты тоже нужны, когда, например, делаешь описание для Google Play.

В общем, я недолго думая решил воспользоваться средствами, которые у меня уже были, а именно adb и PowerShell.
Суть метода простейшая: мы используем интерфейсы adb, чтобы снять скриншот и переместить файлы с девайса на компьютер. Наверное, можно это сделать и обычным батником, но мне PowerShell немного ближе.

Из подготовительных шагов — установить Android SDK, что, думаю, у вас уже есть. Девайс, естественно, должен быть подключен к компьютеру и должен быть распознан adb.

Собственно сам скрипт с комментариями представлен в листинге ниже:

$pcpath = "C:\Dev\Screenshots" #путь до папки, где вы хотите сохранять скриншоты
$dirname = "temp" #имя папки, в которой будут временно сохраняться картинки на девайсе
$devpath = "/sdcard/" + $dirname #путь до временной папки
# проверяем наличие этой папки на девайсе и создаем ее, если надо
$list = .\adb.exe shell ls "/sdcard/"
if ($list -notlike $dirname)
{
.\adb.exe shell mkdir $devpath
}

# Собственно цикл снятия скриншотов
for (;;) {
    #для маркировки скриншотов я использовал дату, но можно делать что угодно
    $time = Get-Date -Format "yyyyMMddhhmmss" // получаем штамп времени в нужном формате
    # формируем имя файла и необходимые пути
    $filename = $time + ".png"
    $tempfile = $devpath + $filename  
    $endfile = $pcpath + $filename

     # снимаем скриншот
    ./adb.exe shell snapshot $tempfile

    # помещаем скриншот на компьютер
    ./adb.exe pull $tempfile $endfile 2>$null

    # удаляем временный файл
    ./adb.exe deletefile

   # ждем определенное время, прежде чем делать следующий
    Start-Sleep 1 // указываете интервал снятия в минутах. Для секунд можно указать параметр - seconds
}

Запустите PowerShell ISE, сохраните скрипт и запускайте, когда хотите начать съемку.

Скорее всего вам надо будет разрешить выполнение скриптов. Подробнее про это вы можете прочитать в официальной справке. Я выполнил команду Set-ExecutionPolicy Unrestricted в PowerShell, чтобы разрешить выполнение любых скриптов. Позднее можно опять запретить выполнение скриптов командой Set-ExecutionPolicy Restricted.

После запуска скрипта adb начинает снимать скриншоты и помещать их в указанную папку. Вы просто запускаете игру и генерируете яркие моменты не задумываясь о том, как их запечетлять. Потом вы просто просмотрите получившиеся результаты и выберете самые сливки.

Очень надеюсь, что этот маленький лайфхак поможет вам сэкономить время и силы и получить эффектные скриншоты для своего промо.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.