После наших публикаций на тему локальных сервисов по обработке изображений и PDF нас спросили, а есть ли что-то подобное для видео? Есть. Начнем с простого. Самая частая задача обработки видео – это перекодирование.
Вариантов здесь тоже несколько – ставить локальный софт на ПК или использовать облачные серверы. Локальный вариант требует достаточно мощного железа и не решает вопрос многопользовательской работы, в т.ч. удаленной.
А облачные серверы – это снова передача файлов третьей стороне и возможные ограничения на условия перекодирования.
Поэтому сервис по локальному перекодированию видео напрашивается сам собой, тем более что под него можно выделить действительно мощный ПК.
Мы подготовили минимальный рабочий docker-compose.yml для кодирования с использованием CPU, для настройки GPU ускорения обратитесь к официальной документации на странице проекта: https://github.com/JMS1717/8mb.local
services:
redis:
image: redis:7-alpine
container_name: 8mb-redis
restart: unless-stopped
command: >
redis-server
--appendonly no
--maxmemory 256mb
--maxmemory-policy allkeys-lru
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
8mblocal:
image: jms1717/8mblocal:latest
container_name: 8mblocal
ports:
- "8001:8001"
volumes:
- ./uploads:/app/uploads
- ./outputs:/app/outputs
environment:
REDIS_URL: redis://redis:6379/0
WORKER_CONCURRENCY: 4
restart: unless-stopped
depends_on:
redis:
condition: service_healthy
Запущенный сервис будет работать по адресу http://IP_address:8001, интерфейс достаточно прост. Загружаете файл, он анализируется, затем выбираете желаемый итоговый размер или битрейт, настраиваете кодек, разрешение и запускаете конвертацию.
Все конвертации становятся в очередь, вы можете не ждать окончания процесса и приступить к следующему файлу, также доступна групповая обработка.
Если вы не один работаете с сервисом, то ваш запрос может стать в очередь, вы всегда можете перейти в раздел очередей и посмотреть процесс. Все загруженные и переконвертированные файлы хранятся в сервисе в течении часа.
Для распараллеливания процессов используйте параметр окружения
WORKER_CONCURRENCY: 4
Где укажите делаемое число рабочих процессов, желательно не превышать при этом число доступных процессорных ядер.
Данные настройки, как и ряд иных, вы можете задать через переменные окружения, либо изменить в разделе настроек, но в этом случае они не сохранятся при перезапуске контейнера.


