Хорошие идеи приходят неожиданно. Так вышло, что за последние пол года я имел дело с большим количеством миникомпьютеров, но применить их в реальное дело не доходили руки. До этого момента. Сейчас я расскажу вам, как собрать максимально бюджетную конструкцию для автоматической съемки таймлапс видео и загрузки его на youtube канал, при этом мы не будем программировать, а лишь напишем bash скрипт. Так же к статье будет прикреплено видео, в котором вы сможете посмотреть на примере как все ниже изложенное делается.
Начнем с железа
Я решил построить все на Orange Pi Zero. Воткнул в него карточку в 4 Гб и развернул образ Armbian’а. Самой съемкой будет заниматься usb вебкамера, которая имеет разрешение 640*480, что печально, но в любой момент можно изменить камеру без особых хлопот. Питаться все будет от 3 амперного блока питания от DVD плеера. Все было закреплено на кусок текстолита.
Теперь программная начинка, пойдем по порядку. Если вы используете wifi в качестве интернет соединения, то сначала подключитесь к вашей точке доступа с помощью утилиты nmtui. Далее обновляем компоненты системы командами:
sudo apt-get update
sudo apt-get upgrade
Теперь стоит сделать небольшое отступление. Orange Pi Zero довольно сильно греется, однако, с помощью понижения частоты-напряжения процессора можно понизить температуру. Для нашей задачи постоянный фоновый нагрев является проблемой. Постоянный нагрев может привести к «отвалу» чипа, а нам нужно надежное устройство. Порывшись на форумах можно найти разные варианты конфигурации, но многие сходятся на мнении устанавливать частоту в 1 ГГц и напряжение питания 1.1 В. Нам необходимо изменить файл script.bin. Для этого сначала надо преобразовать его в формат fex, командой:
sudo sunxi-fexc -I bin -O fex /boot/bin/orangepizero.bin /boot/bin/orangepizero.fex
Далее открываем этот файл
sudo nano /boot/bin/orangepizero.fex
Находим и изменяем строчки:
[dvfs_table]
pmuic_type = 1
pmu_gpio0 = port:PL06<1><1><2><1>
pmu_level0 = 11300
pmu_level1 = 1100
max_freq = 912000000
min_freq = 240000000
LV_count = 7
LV1_freq = 1200000000
LV1_volt = 1300
LV2_freq = 1008000000
LV2_volt = 1100
LV3_freq = 960000000
LV3_volt = 1100
LV4_freq = 912000000
LV4_volt = 1100
LV5_freq = 648000000
LV5_volt = 1040
LV6_freq = 480000000
LV6_volt = 1040
LV7_freq = 240000000
LV7_volt = 1040
Я решил выставить частоту 912 МГц. И приклеил небольшой радиатор на процессор. Теперь нужно сохранить файл и конвертировать его обратно в bin файл.
sudo sunxi-fexc -I fex -O bin /boot/bin/orangepizero.fex /boot/bin/orangepizero.bin
Хотя я все равно поставил дополнительно кулер, просто потому что у блока питания есть 12 В выход, а в ящике лежал лишний неиспользуемый кулер. Далее нам потребуются несколько утилит для формирования видео, устанавливаем их командой
sudo apt-get install fswebcam libav-tools imagemagick v4l-utils
Для начала необходимо сделать снимок с web камеры. Для этого удобно использовать утилиту fswebcam. Это маленькая и удобная консольная утилита для захвата изображений с V4L / V4L2 (Video4Linux) камер (чтобы понять можно ли использовать вашу камеру надо посмотреть есть на коробке аббревиатура UVC или надпись free driver). У этой утилиты есть множество параметров, но в простейшем случае, чтобы получить снимок с камеры нужно выполнить в консоли:
fswebcam имя_фотографии.jpg
Понятное дело, что формат можно использовать любой из поддерживаемых утилитой, но с моим качеством камеры я буду использовать просто jpeg. Снимку будут укладываться по адресу /timelapse/foto. В итоге получаем следующую команду.
fswebcam -c /timelapse/timelapse.conf
В файле timelapse.conf хранятся все параметры для работы камеры. Я прикрепил получившийся файлы к статье.
Мы сделали кадр. Но я хочу добавить на снимок ещё логотип и время. Для реализации всего этого воспользуемся утилитой imagemagick. Это очень мощное средство для работы с изображениями. На самом деле, добавить логотип и время можно и с помощью fswebcam, но мне показалось так правильней. Плюс ко всему я планирую добавить обработку изображений в будущем, а тут уже как раз пригодиться эта утилита. Допустим у меня есть квадратная картинка-логотип logo.png, которую я хочу добавить в левый нижний угол, а время и дату снимка в правый нижний угол. Для добавления надписи мне необходимо в консоли вызвать следующую команду
convert фотография.jpg -font DejaVu-Sans-Mono-Bold -pointsize 30 -fill white -stroke black -gravity southeast -annotate +4+0 «$(date + «%d %h %Y %R») IRKT» фотография_после_обработки.jpg
Описание формата date можно почитать по следующей ссылке: https://ru.wikipedia.org/wiki/Date
Но, если в системе нет нужного вам шрифта, вы можете установить стандартный пакет windows шрифтов командой.
sudo apt-get install ttf-mscorefonts-installer
А следующей командой можно проверить список всех доступных шрифтов в системе
convert -list font
Теперь добавляем логотип внизу слева командой.
composite -gravity southwest logo.png foto.jpg foto.jpg
Эти команды необходимо выполнять с некоторой периодичностью, и за целый день наберется приличное количество картинок. Потом будем сшивать эти картинки в видео используя для этого avconv. Для этого надо выполнить команду в консоли
avconv -r 25 -i foto/%05d.jpg -vcodec libx264 -r 25 output.mp4
Теперь по адресу /timelapse лежит видео output.mp4. Это видео нам необходимо загрузить на подготовленный Youtube канал. Для этого удобно воспользоваться готовым скриптом на питоне, но необходимо получить JSON с данными для авторизации. По пунктам как его получить расписано в описании к скрипту, однако вы можете посмотреть как это делаю я в видео. Скачиваем с github архив и устанавливаем командами:
wget https://github.com/tokland/youtube-upload/archive/master.zip
unzip master.zip
cd youtube-upload-master
sudo python setup.py install
После этого вам потребуется установить менеджер пакетов pip командой.
sudo apt-get install python-pip
После чего обновить его командой.
pip install —upgrade pip
Далее устанавливаете setuptools
sudo pip install setuptools
И необходимые пакеты
sudo pip install —upgrade google-api-python-client progressbar2
После чего необходимо получить JSON файл для авторизации, в видео подробно показано как это сделать. И заменить в директории программы JSON файл на ваш. После чего можно загрузить видео на youtube.
youtube-upload -title=»Test video» output.mp4
После выполнения команды в терминале появится ссылка для подтверждения. Копируете и переходите по ней, а появившийся код вводите в терминал. Система запомнит все и после будет работать автоматически. Все классно работает, теперь наша задача написать все эти команды один bash скрипт, который будет вводить их за нас, и после этого закинуть его в автозагрузку компьютера. Последним штрихом станет удаление файла видео и перезагрузка компьютера после завершения загрузки видео. Итоговый вариант скрипта я прикрепил к статье.
Я понимаю, что способов реализовать подобное множество, мне захотелось сделать все именно так и проверить надежность системы. Сейчас на моем специальном канале видео ролики добавляются автоматически. Камера установлена в Тункинской долине и вся конструкция ждет апгрейда самой камеры на (хотя бы) HD качество, но это уже совсем другая история.
Надеюсь вам было интересно, задавайте ваши вопросы в комментариях.
Прикрепленные файлы:
- timelapse.rar (1 Кб)