Pull to refresh

Пакетное снятие скриншотов при помощи 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 начинает снимать скриншоты и помещать их в указанную папку. Вы просто запускаете игру и генерируете яркие моменты не задумываясь о том, как их запечетлять. Потом вы просто просмотрите получившиеся результаты и выберете самые сливки.

Очень надеюсь, что этот маленький лайфхак поможет вам сэкономить время и силы и получить эффектные скриншоты для своего промо.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.