Приходилось ли работать с мультимедиа
Что проверяют
Есть ли у вас практика с файлами, которые не укладываются в обычный цикл запрос-ответ: изображения, звук, видео. Проверяют не список библиотек, а понимание, где такая обработка выполняется и что происходит при чужом, огромном или битом файле.
Как отвечать
Сначала уточните, что имеется в виду: картинки, аудио, видео или стриминг. Потом расскажите свой опыт и инструменты:
- изображения: Pillow для ресайза, конвертации и работы с EXIF, OpenCV если нужны кадры и компьютерное зрение;
- звук:
soundfileиpydubдля формата,librosaдля признаков; - видео и перекодирование:
ffmpegчерез обёртку или подпроцессом, сам Python видео не жмёт.
Главное в бэкенде не библиотека, а схема. Тяжёлая обработка уходит в очередь (Celery, RQ, свой воркер), оригинал лежит в объектном хранилище, производные версии делаются отдельно и кэшируются, повтор задачи идемпотентен по хэшу файла.
with Image.open(path) as img:
img = ImageOps.exif_transpose(img)
img.thumbnail((800, 800))thumbnail сохраняет пропорции, resize с фиксированной парой чисел растянет картинку. Скажите и про безопасность приёма файлов: проверять сигнатуру, а не расширение и заголовок типа, ограничивать размер и разрешение, иначе маленький архивированный файл развернётся в гигабайты в памяти.
Где спотыкаются
Обрабатывают файл прямо в обработчике HTTP-запроса. Один ресайз на несколько секунд занимает воркер целиком, и сервис ложится уже на десятке одновременных загрузок.
Второе: приводят изображение к фиксированному квадрату и не учитывают ориентацию из EXIF. Портрет превращается в сплюснутый прямоугольник, а снимки с телефона показываются повёрнутыми.
Третье: доверяют имени файла. Перебор по окончанию .jpg пропускает верхний регистр и .jpeg, а загруженное «изображение» может оказаться чем угодно, вплоть до специально собранной декомпрессионной бомбы.