Пакетное снятие скриншотов при помощи PowerShell и adb
Ожидает приглашения
Привет, сообщество.
Сегодня я хотел бы поделиться с вами небольшим и очевидным лайфхаком, который я использовал, чтобы наделать много скриншотов для своей игры.
Он особенно полезен, когда вы разрабатываете динамичную игру, в которой эффектная сцена может случиться за доли секунды, и, конечно, вы не успеете даже и глазом моргнуть, не то чтобы снять скриншот.
Почему не воспользовался сторонней утилитой? Лично я не хотел тратить время на поиски подходящей утилиты и устанавливать что-то дополнительно себе на устройство. К тому же я сомневаюсь, что такие утилиты смогут записывать снятый скриншот сразу на компьютер, не тратя память устройства и ваше время.
Почему не снять видео и не вырезать кадры? Во первых, для этого нужен редактор видео, или хотя бы видеоплеер, а у меня на рабочей лошадке ничего этого не было. И зачем мне все это, если цель — парочка, а может десяток, эффектных скриншотов.
Конечно, полноценное видео лучше скриншотов, но скриншоты тоже нужны, когда, например, делаешь описание для Google Play.
В общем, я недолго думая решил воспользоваться средствами, которые у меня уже были, а именно adb и PowerShell.
Суть метода простейшая: мы используем интерфейсы adb, чтобы снять скриншот и переместить файлы с девайса на компьютер. Наверное, можно это сделать и обычным батником, но мне PowerShell немного ближе.
Из подготовительных шагов — установить Android SDK, что, думаю, у вас уже есть. Девайс, естественно, должен быть подключен к компьютеру и должен быть распознан adb.
Собственно сам скрипт с комментариями представлен в листинге ниже:
Запустите PowerShell ISE, сохраните скрипт и запускайте, когда хотите начать съемку.
Скорее всего вам надо будет разрешить выполнение скриптов. Подробнее про это вы можете прочитать в официальной справке. Я выполнил команду Set-ExecutionPolicy Unrestricted в PowerShell, чтобы разрешить выполнение любых скриптов. Позднее можно опять запретить выполнение скриптов командой Set-ExecutionPolicy Restricted.
После запуска скрипта 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 начинает снимать скриншоты и помещать их в указанную папку. Вы просто запускаете игру и генерируете яркие моменты не задумываясь о том, как их запечетлять. Потом вы просто просмотрите получившиеся результаты и выберете самые сливки.
Очень надеюсь, что этот маленький лайфхак поможет вам сэкономить время и силы и получить эффектные скриншоты для своего промо.