Конвертер и плеер для CinemaDNG на CUDA
Российская компания Фаствидео хорошо известна своими решениями на CUDA для кодека JPEG, дебайера, ресайзера и шумодава. В последнее время все эти решения были дополнены широким набором функций по обработке изображений и объединены в Fastvideo SDK, на основе которого получилось решить очень серьёзную задачу — сделать конвертер и видео плеер для серий DNG/CinemaDNG изображений на CUDA. Была получена очень высокая скорость работы с данными от камер Blackmagic, так как вся обработка DNG изображений теперь выполняется на видеокарте NVIDIA. Это самый первый релиз, программа бесплатная, для Windows-7/8/10 (64 бит), скачать её можно с сайта Fast CinemaDNG Processor (www.fastcinemadng.ru)
В мире уже есть очень большое количество конвертеров RAW, которые работают с форматом DNG, однако было решено сделать ещё один, но очень быстрый. Видео плееры DNG тоже есть, но обычно они работают с уменьшенным разрешением, поэтому просмотреть только что отснятый в формате DNG материал на полном разрешении в реальном времени — это проблема. Кроме того, кроме скорости необходимо было получить приемлемое качество обработки и шумоподавления, и это тоже получилось.
DNG - это предложенный компанией Adobe открытый формат RAW данных, снятых на видеокамеру или фотоаппарат. Здесь будет рассмотрен случай с видео, хотя для фотографий задача почти та же самая.
Условие задачи: на достаточно быстром SSD лежит серия изображений в формате CinemaDNG (все кадры сжаты) с разрешением до 4К или 4.6К (например, как у последних моделей видеокамер URSA или URSA mini от компании Blackmagic) и нужно в реальном времени их прочитать, декодировать, сделать всю необходимую обработку и плавно вывести видео на монитор с заданной частотой в диапазоне 24-30 кадров в секунду на полном разрешении без использования proxies, т.е. уменьшенных копий.
Решение этой задачи основано на использовании Fastvideo SDK (www.fastcompression.com/products/sdk/sdk.htm), в котором реализован весь необходимый функционал на CUDA для работы с RAW данными от видеокамер. В итоге вся схема обработки изображений выполняется на видеокарте NVIDIA: линеаризация, баланс белого, экспокоррекция, шумодав для RAW, дебайер, удаление цветового шума, цветовые преобразования, температура и тинт, кривые и уровни в RGB и HSV, кроп, ресайз, резкость, наложение профиля монитора и гаммы, вывод на монитор и пр.
Реализация такой схемы обработки для 10/12/14-битных исходных данных в формате DNG в реальном времени с частотой кадров в диапазоне 24-30 к/с для разрешений от 2К до 4К, требует тщательной оптимизации каждого алгоритма. При этом необходимо добиться максимально возможной скорости работы SSD, CPU и GPU. Если производительность одного из этих трёх компонент железа будет недостаточной, реального времени не получится. Для разрешений 4К-4.6К получилась скорость обработки быстрее реального времени при использовании видеокарт NVIDIA GeForce GTX 980 и 1080. Главный плюс программы — это скорость. А если отключить шумодав и резкость, то всё будет работать ещё быстрее.
На хорошем железе плеер CinemaDNG работает плавно, изображение можно масштабировать на весь экран. Аппаратный ресайз в OpenGL отключен, потому что в нём по умолчанию стоит билинейный алгоритм ресайза, который даёт значительные артефакты, особенно при уменьшении. Для решения этой проблемы нужно всегда делать ресайз на CUDA по алгоритму Ланцоша и передавать в OpenGL уже готовую картинку, размеры которой совпадают с размером окна. В этом случае получается дополнительная задержка по времени, но качество картинки улучшается.
Теперь для просмотра видеоряда с данными из папки с изображениями CinemaDNG можно просто вызвать контекстное меню из Проводника и запустить плеер с данными из этой папки. Очень часто нет смысла создавать проекты и вводить массу ненужной информации, как это сделано в большинстве программ. Быстрый просмотр CinemaDNG очень важен для предварительной сортировки и отбраковки материалов. В программе также реализована возможность быстрой обрезки данных сцены, т.е. уже на этапе предварительного просмотра можно оставить только нужные кадры.
Программа может сохранять обработанные кадры в виде серии 16-битных изображений в формате TIFF или 8/12-битных JPEG, а цветовой профиль встраивается в заголовок каждого кадра. Для сохранения результатов можно также использовать внешний FFmpeg, который пользователь может установить самостоятельно и его можно запустить из программы с заданной командной строкой. Таким образом, например, с помощью внешнего FFmpeg можно сжать выходные данные в 10-битный 444 ProRes.
По сути, это уникальное решение, не имеющее аналогов. В этой программе речь не идёт об ускорении на GPU отдельных алгоритмовобработки изображений, как это часто бывает во многих конкурирующих решениях. В этой программе вся обработка серий DNG изображений выполняется на видеокарте, а это и есть принципиальное отличие от всех существующих аналогов в данной области. По всей видимости, это оптимальный подход для повышения скорости работы и интересная возможность для улучшения качества в реалтайм приложениях.
Чтобы пользователь мог получить информацию о времени выполнения каждой стадии общей схемы обработки изображений, был сделан специальный модуль, который измеряет и показывает время работы на видеокарте каждого алгоритма для данного изображения. При активации модуля Benchmarks на экран выводятся данные об используемой памяти, параметрах изображения и список задействованных алгоритмов обработки вместе с временем их выполнения.
В ближайшее время на базе этого решения будут выпущены плагины к Adobe Premiere Pro и After Effects, которые позволят совместить скорость и качество обработки с возможностью сохранения результатов с помощью разнообразных монтажных кодеков без использования FFmpeg. Такие плагины можно будет использовать и вместо монтажного кодека, чтобы в реальном времени делать из CinemaDNG готовые обработанные кадры с разрешением 16 бит на канал и передавать их напрямую в After Effects, тогда стадия декодирования из ProRes не потребуется.
Работа над улучшением качества обработки изображений продолжается, и в ближайшее время ожидается релиз нового дебайера MG, который должен быть не хуже, чем у Adobe Camera Raw (дебайер из ACR очень хорош). А второй быстрый дебайер DFPD в текущем релизе явно лучше, чем у Adobe Premiere Pro 2015. В бесплатной версии программы есть шумодавы до дебайера и после дебайера, но этого нет в бесплатной версии DaVinci Resolve, а у Premiere Pro собственного шумодава в реальном времени нет даже в платной версии. Быстрого просмотра серий DNG без создания проектов тоже нет ни у Premiere Pro, ни у DaVinci Resolve. Конечно, у каждой программы есть свои плюсы и минусы, так что сравнивать можно много и долго, но в итоге всё равно каждый находит для себя инструмент, отвечающий собственным потребностям и задачам.
P.S. Программа работает только с видеокартами NVIDIA, причём для работы с 4К изображениями формата DNG желательно иметь не менее 2 ГБайт памяти на GPU, а для слабых карточек рекомендуется работать со сценами 2К-2.5К и временно отключать шумодав и резкость.К сожалению, на видеокартах AMD и Intel программа работать не будет. Для достижения высокой скорости обработки нужны быстрые SSD, CPU и GPU. Присылайте свои пожелания и замечания в группу разработчиков https://vk.com/fastcinemadng
Тестовую серию DNG изображений можно взять тут - http://download.macromedia.com/pub/developer/cinemadng/MyMovieNickPatonIkonoskopDNG.zip