В этом репозитории два рабочих инструмента: модифицированный concat_ng и конвейер.
$ # Clone
$ git clone https://github.com/bcskda/lectorium-pipeline
$ cd lectorium-pipeline
$ # Secrets
$ mkdir __secret
$ # mv ~/credentials.json __secret
$ # Env
$ python3 -m venv .venv
$ source .venv/bin/activate
(.venv) $ pip install -r requirements.txt
На данный момент неизвестно, в какой момент Google API потребует залогиниться. TODO: скрипт, чтобы делать это при установке. При дальнейшем использовании API логиниться не придётся.
Конвейер, от поиска видео до загрузки в облако. После старта достаточно подключать к машине карты памяти с записями.
Типичный запуск (в трёх шеллах, поскольку не форкаются):
(shell 1) python -m daemons.transcoder --importer 127.0.0.1:1338 --bind 127.0.0.1:1337
(shell 2) python -m daemons.importer --transcoder 127.0.0.1:1337 --devwatch 127.0.0.1:1339 --bind 127.0.0.1:1338
(shell 3) python -m daemons.devwatch --importer 127.0.0.1:1338 --bind 127.0.0.1:1339
При запуске daemons.importer в логе будут мусорные INFO-записи от google-api-python-client, к сожалению, это нормально.
Также см. скриншоты
Типичное завершение: Ctrl+C вызовет обработчик. Если в это время происходил импорт - undefined behavior.
Состоит из трёх компонентов.
- devwatch
- Через udev обнаруживает подключаемые блочные устройства
- Монтирует их в /mnt/lectorium-devwatch-...
- Пытается обнаружить характерные папки (вроде
PRIVATE/AVCHD/...
) - Посылает обнаруженные директории на импорт
- По завершении обработки устройства штатно отмонтирует его
- (!) Работает от рута
- importer
- Принимает от предыдущей стадии примонтированные корни карт памяти
- Код из concat_ng разбивает записи на группы
- Группы отправляются на предобработку
- Сохраняет в папки вида /дата/#номер_время
- По завершении предобработки загружает в облако
- После обработки карты памяти сообщает предыдущей стадии
- transcoder
- Принимает таски на предобработку
- Сообщает импорту по завершении
- При минимальной доработке масштабируется на соседние хосты в достаточно быстрой сети
-
Запускаются в трёх разных шеллах, не уходят в фон (решается tmux'ом)
-
Неудобные логи - немало лишней информации, но не хватает отметок времени
-
Нет ручного контроля процесса: если импортировать, то всё сразу
-
Умеет в настраиваемые профили, см. profiles.md
-
Если подключить несколько карт одновременно, последовательно отработает все
-
Перекодирование может масштабироваться
Это concat_ng c модификациями:
- Загрузка в облако по завершении предобработки
- Профили предобработки
Типичный вызов:
(.venv) $ python main.py -i /mnt/media/sdd -o /mnt/media/lectorium-ssd/Lectorium -p concat_compress -u --folder-id=XXYYZZ
-p / --profile
- профиль, общий для всех импортируемых записей-u / --upload
- загружать результаты в облако (по умолчанию: нет)--folder-id
- ID папки в google drive, куда будут загружены результаты
Можно посмотреть вывод python main.py --help
и подкрутить конфиг
Профили хранятся в ff_presets/v2/PROFILE_NAME.json
-
Входные файлы:
-
- Принимаются списком логических групп
-
- К группам можно применять протоколы (на данный момент только
concat
)
- К группам можно применять протоколы (на данный момент только
-
Выходные файлы:
-
- Может быть много
-
- Входы задаются отдельно для каждого
-
- Имена задаются как общий basename из CLI + суффикс
-
Разное:
-
- Поддержка filter_complex и объявленных фильтрами pad-ов в качестве входов
Сейчас профиля два: склейка со сжатием и без
Для примера см. concat_compess
-
Нужно запускать для каждой карты, как concat_ng
-
Не создаёт в облаке подпапки по датам (исправимо, TODO)
-
Сам загружает в облако
-
Проще, чем конвейер
-
До сих пор не сбоил