Транскодирование
Как TubePress конвертирует загруженные файлы в готовые для веба рендиции с помощью распределённых воркеров FFmpeg.
Транскодирование преобразует один загруженный файл в несколько веб-совместимых MP4-версий, предоставляя зрителям меню качества, быстрое начало воспроизведения и единый кодек независимо от того, что было загружено. Также оно добавляет дополнительные элементы — водяные знаки и вступительные/финальные клипы — и формирует спрайты предпросмотра для перемотки, используемые плеером.
Всё это настраивается в разделе /admin/settings?tab=transcode, распределённом по подвкладкам Formats, Queue, Servers, Watermark, Intros и Timeline. Транскодирование может выполняться непосредственно на сервере CMS или распределяться по выделенным воркерам.
Зачем транскодировать
Загруженный файл может иметь любое разрешение, кодек или контейнер. Транскодирование приводит его к MP4/H.264-версиям с +faststart, чтобы воспроизведение начиналось до полной загрузки файла, и создаёт несколько размеров (например, 720p и 480p), чтобы плеер мог предложить выбор качества и отдавать файлы меньшего размера на маленькие экраны. За этот же проход применяются водяные знаки и клипы до/после ролика, поскольку они должны быть закодированы в каждую версию.
Конвейер транскодирования
Когда видео готово к обработке, TubePress ставит в очередь одно задание на каждый выходной вариант в таблицу transcode_jobs и последовательно выполняет их:
- Очередь. Создаётся задание для полноразрешённой исходной ступени и для каждого активного формата ниже высоты источника, а также задание временной шкалы, если предпросмотр включён.
- Захват. Воркер — этот сервер или удалённый — захватывает следующее ожидающее задание, начиная с исходной ступени.
- Загрузка. Удалённый воркер скачивает источник через HTTP (прямой URL с аутентификацией по ключу, минующий подписанные медиассылки).
- Транскодирование. FFmpeg кодирует версию, применяя обрезку, водяной знак и вступления в соответствии с настройками, сообщая о прогрессе в процентах.
- Выгрузка и обратный вызов. Результат загружается обратно по частям, и обратный вызов помечает задание как выполненное.
Статус видео отслеживает этот процесс: пока выполняются задания, он остаётся processing, переходит в published сразу после завершения исходной ступени и становится error только в том случае, если исходная ступень так и не может быть создана. Менее приоритетные версии продолжают формироваться после публикации.
Версии и форматы
Выходные форматы полностью редактируются на вкладке Formats и хранятся в таблице video_formats. Каждый формат имеет имя, постфикс файла (например, _720p.mp4), целевое разрешение, настройки FFmpeg, флаг keep aspect ratio и переключатель активности. Встроенные значения по умолчанию:
| Формат | Разрешение |
|---|---|
| 720p | 1280 × 720 |
| 480p | 854 × 480 |
| 360p | 640 × 360 |
Два правила обеспечивают надлежащее качество. TubePress никогда не увеличивает масштаб: любой формат с высотой, равной или превышающей высоту источника, пропускается. И оригинальное максимальное качество всегда сохраняется — если применяется водяной знак или обрезка, это перекодируется в полноразрешённую версию source (отмеченную звёздочкой в очереди); в противном случае исходный файл отдаётся как есть. Параметр Trim start (0–300 секунд) позволяет отрезать начальные секунды каждого видео; как и водяной знак, он применяется к каждому формату, включая исходный.
Очередь заданий
Вкладка Queue (/admin/settings?tab=transcode&sub=queue) группирует задания по видео и позволяет фильтровать по All / Pending / Processing / Completed / Failed. Каждое видео показывает значок для каждой ступени — отмеченная звёздочкой исходная ступень, затем каждое разрешение, затем TIMELINE — с цветом в зависимости от статуса задания:
Консоль для каждого видео (значок терминала) отображает в режиме реального времени список заданий, воркер, обрабатывающий каждую ступень, прошедшее время и любые сообщения об ошибках. Кнопка Retry failed jobs одним нажатием заново ставит в очередь все задания, которые сейчас в статусе failed.
Удалённые серверы транскодирования
Транскодирование требует значительных ресурсов CPU, поэтому вы можете перенести его с веб-сервера. На вкладке Servers, This Server задаёт количество FFmpeg-заданий, выполняемых локально одновременно (1–4, или 0 для использования только удалённых воркеров), и позволяет переопределить путь к FFmpeg. Ниже вы регистрируете удалённые воркеры; задания автоматически распределяются на наименее загруженный, и каждый имеет ограничение max concurrent jobs (хорошее правило: одно задание на два ядра CPU).
- Добавьте сервер. Нажмите Add Server, укажите имя и URL, например
http://YOUR-IP:8090, и сохраните. API-ключ и команда запуска отображаются сразу. - Установите FFmpeg + PHP. На машине воркера выполните
sudo apt install ffmpeg php-cli php-curl. - Разверните воркер. Скачайте
transcode-worker.php(из/api/transcode-worker-downloadили по временной ссылкеwget), загрузите его и откройте порт командойsudo ufw allow 8090/tcp. - Запустите его. Запустите воркер с вашим ключом:
php transcode-worker.php --port=8090 --key=YOUR_API_KEY- Проверьте. Нажмите Check; исправный воркер сообщает Online с обнаруженным кодировщиком и текущей загрузкой CPU/GPU.
Аппаратное ускорение GPU (NVIDIA, AMD, Intel или Apple) определяется и используется автоматически. Воркер скачивает источник, транскодирует, сообщает о прогрессе и загружает результаты по частям обратно в CMS — именно загрузка по частям позволяет каждому запросу оставаться в рамках лимита Cloudflare в 100 МБ. Для автономных хостов руководство по настройке включает юнит systemd, чтобы воркер перезапускался при загрузке системы.
Мониторинг и повторные попытки
Система устроена так, чтобы видео никогда не оставалось без внимания. Неудавшееся кодирование автоматически повторяется с нарастающей задержкой — от примерно получаса до нескольких часов — поскольку большинство сбоев носит временный характер (медленный или нестабильный CDN). Кроме того, ежечасная задача восстановления заново ставит в очередь любое задание, по-прежнему отмеченное как failed, и продолжает попытки до тех пор, пока версия не будет создана. Ручное нажатие не требуется, хотя кнопка Retry failed jobs есть, если вы хотите принудительно запустить процесс.
Если исходная ступень сама по себе постоянно завершается ошибкой, зависящие от неё задания подформатов отменяются (они не могут продолжаться без источника), а видео помечается как error; система восстановления всё равно будет пытаться исправить ситуацию. Когда исходная ступень наконец завершается, видео автоматически публикуется.
Требования
FFmpeg должен быть доступен там, где выполняется транскодирование:
- Локальная обработка: установите FFmpeg на CMS-сервере (
sudo apt install ffmpeg). После установки на странице Transcode отображается обнаруженная версия. - Удалённая обработка: каждому воркеру требуется FFmpeg, а также
php-cliиphp-curl, минимум 2 ядра CPU и 2 ГБ ОЗУ, и открытый порт воркера.
Следующие шаги
Остались вопросы?
Откройте заявку в панели управления, и наша команда поможет.