Stream Camera Records — запись и авто видео монтаж
Stream Camera Records — сервис, который сам записывает стримы камер, монтирует ролик с музыкой и раскладывает готовый файл по папкам. Работает в локальной сети, потоки берёт из интернета — всё под контролем, без мощного железа.
Раньше это был скрипт с жёсткими параметрами: зависал, подводил. Теперь — полноценное Django-приложение с веб-интерфейсом: стена камер с просмотром прямо в браузере, гибкие настройки в базе, расписание запусков, аудиотека по времени суток, проверки доступности и доставка результата.
Один из первых экспериментов автомонтажа: машина делает черновую работу, человек оставляет за собой решения. Автоматизация не отменяет автора — она освобождает ему время на то, ради чего всё затевалось. И это только начало — идей в этом направлении много.
Ничего лишнего: включил — и получаешь обновлённый ролик по расписанию.
Когда хобби совпадает с работой — это редкая удача.
Полное описание
### Что это
Stream Camera — локальный сервис записи и сборки видео. Он берёт HLS-потоки городских
камер, записывает их заданными кусками, склеивает в единый ролик, накладывает музыкальное
сопровождение, подбирая треки под время суток, и доставляет результат в точки назначения —
например, на сетевой диск или в папку другого компьютера.
Управление — через браузер любой машины локальной сети. Запуск — одной командой,
дальше сервис живёт сам: работает по расписанию или по циклу и честно рассказывает,
что именно он сейчас делает.
### Функционал
**Главная рабочая.** Пульт управления: жив ли воркер, на какой стадии цикл, сколько
процентов пройдено, какие камеры пишутся прямо сейчас, когда следующий запуск и что
происходит в логах. Логи обновляются без перезагрузки страницы. Любой готовый ресурс —
видео, аудио, картинку, текстовый или concat-список — можно открыть для предпросмотра
и скачать.
**Стена камер.** До девяти окон плееров (3, 6 или 9 ).
Статус «доступна» присваивается по факту успешного воспроизведения, а не по
красивым обещаниям. Если поток в кодеке, который браузер не понимает, сервис честно
перекодирует его на сервере и покажет в том же окне.
**Наборы камер.** Камеры объединяются в наборы: один активный — рабочий, остальные можно
переключать и смотреть, кто там и что. Набор можно клонировать, чтобы не заводить тридцать
адресов руками.
**Настройки.** Семь разделов, всё в базе данных. Параметры записи,
кодирования, аудио, каталоги, инструменты, доставка, обслуживание...
**Режим и расписание.** Два способа жить: циклический (прогон, пауза, снова прогон) и по
расписанию (ежедневные точки с точным временем и названием, например «09:30 Утро»).
Расписание видно заранее: последний запуск, следующее срабатывание, ближайшие точки.
**Аудиотека.** Треки раскладываются по категориям — день, ночь, общие. Сервис сам подбирает
музыку под время суток и длину ролика. Треки можно послушать прямо на странице настроек,
плеер закреплён внизу окна и не убегает при прокрутке.
**Проверки и автоотключение.** Кнопка «Проверить» на одной камере или цели доставки,
кнопка «Проверить все» — на всех сразу. Воркер дополнительно проверяет камеры сам по
таймеру: недоступная камера уходит в «выключено» с указанием причины, а после починки
возвращается в работу одним переключателем. Ручная проверка никогда ничего не выключает —
только показывает состояние.
**Доставка результата.** Готовый файл копируется во все активные цели с проверкой каталога,
прав на запись и свободного места. Не получилось — сервис подождёт и повторит, сколько
сказано в настройках.
**Роли и доступ.** Две группы: `admins` — полный доступ и ручной запуск, `users` — просмотр
без права что-либо сломать. Настройки видны всем, сохранять их может только администратор.
**Помощь.** Отдельная страница, где описано, как всё устроено: разделы, роли, служебные
команды. Что-то вроде инструкции, которая всегда рядом и никогда не теряется.
### Достоинства
- **Автомат делает рутину, человек — решения.** Запись, склейка, подбор музыки и доставка
идут сами. Монтажная воля остаётся у автора: это эксперимент, а не замена.
- **Всё в локальной сети.** Никаких внешних сервисов и утечек: данные не покидают пределы
дома или офиса. Любой браузер в сети — и вы у пульта.
- **Прозрачность вместо чёрного ящика.** Каждый шаг логируется, каждая стадия видна,
каждый файл доступен для просмотра. Не нужно верить — можно проверить.
- **Гибкость вместо жёстких констант.** Параметры живут в базе и меняются на лету;
перезапуск не требуется даже для смены режима работы.
- **Наборы вместо одного списка.** Разные задачи — разные камеры, клонирование в один клик,
быстрое переключение.
- **Честные состояния.** Сервис не показывает «всё хорошо», если воркер упал: интерфейс
прямо скажет, что процесс не запущен и что именно нажать.
- **Ноль лишних зависимостей в интернете.** Bootstrap, hls.js и графики лежат локально,
поэтому интерфейс работает даже в изолированной сети.
- **Своё, родное.** Это приложение выросло из собственной задачи, поэтому в нём нет
абстрактных «фич ради фич» — только то, что реально нужно каждый день.
### Перспективы
Это первый эксперимент автоматического монтажа, и он уже под контролем человека. Дальше —
только интереснее.
И всё это — в той же философии: автоматизация делает черновую работу, а человек ставит
задачу и наслаждается результатом.
Видео
Задача возникла давно. Хотелось простое: пусть камеры пишут город, а на выходе получается
ролик с музыкой. Первая версия была скриптом — и она даже работала. Камеры писались,
видео монтировалось, файл появлялся. Победа? Почти.
Настоящая жизнь начиналась потом. Настройки — жёсткие, зашитые в код и конфиги. Чтобы
что-то поменять, нужно было помнить, где лежит нужная строка, и очень аккуратно её не
сломать. Добавить камеру — отдельный квест. Понять, что происходит прямо сейчас — почти
невозможно: чёрная консоль, редкие сообщения и полная тишина, если что-то пошло не так.
Администрировать это было тяжело, а объяснить кому-то ещё — ещё тяжелее. Каждый запуск
превращался в ритуал.
Хотелось другого: чтобы всё было видно, чтобы настройки лежали в понятном месте, чтобы
камеры можно было менять мышкой, а не напильником. Так появилась идея переписать всё
на Django — и получилось гибкое, функциональное приложение, где параметры хранятся
в базе, интерфейс говорит человеческим языком, а любой результат можно открыть и
посмотреть, не залезая в папки.
Отдельное удовольствие — то, что хобби совпало с работой. То, чем занимаешься для души,
вдруг оказывается ровно тем, что умеешь делать руками. Тут нет границы между «надо»
и «интересно»: камеры, ffmpeg, склейка, музыка и веб-интерфейс — всё это одна большая
игрушка, которая при этом приносит пользу.