Георгий Маслов › georgiymaslov
Сайты на WordPress и Тильде · 1С и Битрикс24 · Python и боты
Рейтинг
38 047
№ 21 в каталоге
Отзывы
Профессионализм
10/10
Коммуникация
10 /10
Город
Москва
Опыт работы
9 лет
На сайте с
2017 года
Юридический статус
Самозанятый
Эксперт
Национальной Гильдии Фрилансеров
Freelance.Boutique
Премиум-сервис для лучших исполнителей
Безопасная сделка
Деньги списываются после приёмки

Аппаратное 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

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

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

Все проекты →
Инженерия и Проектирование Каркас из фанеры типа WikiHouse под ЧПУ: параметрический узел в Rhino и Grasshopper, раскрой и DXF
Каркас из фанеры типа WikiHouse под ЧПУ: параметрический узел в Rhino и Grasshopper, раскрой и DXF
76
Инженерия и Проектирование Рабочая документация ВК и ОВ для кондитерского цеха: вода, канализация с жироуловителями, приточно-вытяжная вентиляция
Рабочая документация ВК и ОВ для кондитерского цеха: вода, канализация с жироуловителями, приточно-вытяжная вентиляция
90
Инженерия и Проектирование Водоотведение двухэтажного дома: планы, схемы стояков и профиль сети
Водоотведение двухэтажного дома: планы, схемы стояков и профиль сети
69
Веб-разработка и IT Ускорение сайта на WordPress: скорость на телефоне с 48 до 90, страница легче в 9 раз
Ускорение сайта на WordPress: скорость на телефоне с 48 до 90, страница легче в 9 раз
78