Георгий Маслов georgiymaslov
Визитки, сайты на WordPress, боты, 1С, SEO, серверы, Python+AI
Рейтинг
21 229
№ 43 в каталоге
Отзывы
Профессионализм
10/10
Коммуникация
10 /10
Город
Москва
На сайте с
2017 года
Юридический статус
Самозанятый
Эксперт
Национальной Гильдии Фрилансеров
Безопасная сделка
Деньги списываются после приёмки

Аппаратное GPU-кодирование видео (NVENC) для видеохостинга: до 9× быстрее реального времени

Используемые навыки Docker FFmpeg Linux Python Видеомонтаж

Описание

На видеохостинге заказчика каждое загруженное видео кодируется в целую линейку качеств (h264 и h265, от 240p до 1440p, плюс добавленный по ходу проекта тир 8K/4320p). На процессоре это занимало часы: длинный ролик надолго занимал очередь, пользователи ждали.

В сервере стояла видеокарта NVIDIA RTX с аппаратным кодировщиком NVENC, но платформа (open-source, Python/Django + Celery + ffmpeg в Docker) умела кодировать только на CPU. Задача: задействовать GPU, не рискуя рабочим кодированием — сайт живой, ломать очередь загрузок нельзя.

Решение

1. Поставил в образ второй, статически собранный ffmpeg с поддержкой NVENC — рядом со штатным, ничего не заменяя.
2. Включение GPU сделал через фиче-флаг (переменная окружения): по умолчанию выключено, штатный CPU-путь не тронут вообще. Включение и откат — одна переменная.
3. При включённом флаге генератор команд кодирования выбирает h264_nvenc / hevc_nvenc; VP9 честно остаётся на CPU (у NVENC его нет).
4. Подобрал версию ffmpeg под версию драйвера видеокарты: свежий билд требовал более нового NVENC API и падал — зафиксировал совместимый релиз и проверил реальным кодированием на целевом железе, а не «по документации».
5. Отдельно тюнил качество (CQ/preset), чтобы картинка с GPU не уступала CPU-варианту.
6. Ограничение одновременных кодирований синхронизировал с интерфейсом загрузки — пользователь видит честную очередь, а не молча потерянные файлы.

7. Та же дисциплина «не сломать прод» — во всей инфраструктуре проекта: стабильный SSH-доступ к серверу за NAT через обратный туннель на VPS-релей (разобрался в причинах обрывов — потери на маршруте VPN и антибот-баны sshd — и устранил обе), деплой идемпотентными патч-скриптами с точными проверяемыми заменами, версия статики как сброс кеша, git-коммит после каждой правки на сервере и полный бэкап истории репозитория.

Стек: ffmpeg (NVENC), Python/Django, Celery, Docker, NVIDIA RTX.

Результат

Скорость кодирования на реальных роликах — около 9× реального времени: часовое видео обрабатывается за несколько минут вместо часов, очередь загрузок перестала копиться. Линейка качеств — вплоть до 8K (4320p).

Главное для заказчика: переход на GPU не создал риска для работающего сайта — штатный путь кодирования остался нетронутым, GPU включается и выключается одной переменной окружения.

Сайт живой, можно посмотреть: https://sawonce.com

Оценили проект:

Другие проекты

Все проекты →
Маркетинг и Продвижение Настройка рекламы в Яндекс.Директ для юридической компании
Настройка рекламы в Яндекс.Директ для юридической компании
32
Веб-разработка и IT Речь из записи диктофона, забитой шумом: вытащен разговор мужчины и женщины
Речь из записи диктофона, забитой шумом: вытащен разговор мужчины и женщины
19
Веб-разработка и IT Агент анализа спортивной статистики: агрегация коэффициентов из нескольких источников, Telegram-бот + Flask API
Агент анализа спортивной статистики: агрегация коэффициентов из нескольких источников, Telegram-бот + Flask API
37
Веб-разработка и IT Лента вертикальных видео (аналог Shorts) для видеохостинга: бесшовная бесконечная карусель, сделана с нуля
Лента вертикальных видео (аналог Shorts) для видеохостинга: бесшовная бесконечная карусель, сделана с нуля
42