...

воскресенье, 9 февраля 2014 г.

[Из песочницы] Получаем снимок с веб-камеры и скриншот экрана с помощью VLC

Предыстория




Всё началось с того, что кто-то постоянно брал мой планшет, причём без моего ведома. Планшет ASUS VivoTab Smart с Windows 8 на борту. Было решено сделать на рабочем столе фейковый ярлык, запускающий скрипт, который сделает фотки с камеры, скриншот экрана, отправит всё это дело на мой e-mail, а потом, как ни в чем не бывало, запустит проводник.



Пишем скрипт




Раз установлена полноценная Windows, значит можно обойтись возможностями WSH.

Для просмотра видео на аппарате установлен VLC. Плеер умеет захватывать видео-сигнал с различных источников.

Источники видео




У планшета две камеры: задняя и передняя. Будем делать фото с обеих.

image

Каждая камера поддерживает определенные разрешения, их можно посмотреть в настройках приложения ASUS YouCam:


Скриншоты
image

image




Протестировать выбранные параметры можно через батник:



C:\\Progra~1\\VideoLAN\\VLC\\vlc.exe dshow:// :dshow-vdev="камера" :dshow-size=разрешение



Примеры


C:\\Progra~1\\VideoLAN\\VLC\\vlc.exe dshow:// :dshow-vdev="Vimicro USB Camera (Altair)" :dshow-size=640x480


C:\\Progra~1\\VideoLAN\\VLC\\vlc.exe dshow:// :dshow-vdev="IMX175" :dshow-size=1280x720






Если открылся плеер, транслируется видео и нет ошибок — отлично, камера и разрешение выбраны верно.

Скриншот экрана




VLC и это умеет делать. Кстати, в их wiki всё неплохо расписано.

C:\\Progra~1\\VideoLAN\\VLC\\vlc.exe "screen://"

Приступаем к WSH




Чтоб не появлялось окно командной строки, команды будем выполнять методом Exec:

var WSH = new ActiveXObject('WScript.Shell');
WSH.Exec('C:\\Progra~1\\VideoLAN\\VLC\\vlc.exe dshow:// :dshow-vdev="IMX175" :dshow-size=1280x720');


Отлично, но нам нужно сохранить изображение, а не выводить его. Для этого допишем необдходимые параметры:



WSH.Exec('C:\\Progra~1\\VideoLAN\\VLC\\vlc.exe --dshow-vdev="IMX175" --dshow-size=1280x720 -V dummy --intf=dummy --dummy-quiet --video-filter=scene --no-audio --scene-path=C:\\ --scene-format=jpg --scene-prefix=Shot --scene-replace --run-time=1 --scene-ratio=25 "dshow://" vlc://quit');




Изображение с камеры сохранится в файл C:\\Shot.jpg

Аналогично для скриншота:



WSH.Exec('C:\\Progra~1\\VideoLAN\\VLC\\vlc.exe -V dummy --dshow-vdev=none --intf=dummy --dummy-quiet --video-filter=scene --no-audio --scene-path=C:\\ --scene-format=jpg --scene-prefix=screen --scene-replace --run-time=1 --scene-ratio=25 "screen://" "dshow://" vlc://quit');


Что получилось




Вообще, решение с использованием VLC является кроссплатформенным. Я лишь показал реализацию под свои нужды.

Вот архив с готовым скриптом.

Что получилось
Ярлык запускает скрипт

image

Создаются снимки с обеих камер и скриншот:

image


А вот и письмо

image




This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий