Конвертер видео и плеер Fast CinemaDNG: обрабатываем 4K RAW-видео в реальном времени на видеокартах Nvidia

Для обработки формата CinemaDNG на сегодня есть много возможностей. Есть Davinci Resolve, есть Premiere Pro, есть прочий узкоспецифический софт. Зачем потребовалась специализированная программа Fast CinemaDNG? Дело в том, что она создана для конкретной цели и умеет то, чего не умеют другие. Патриотам приятно будет узнать, что софт создан исключительно российскими специалистами компании Fastvideo. Разработка «с нуля» заняла около 1 года и велась в свободное время. Рекомендую статью главы компании, Федора Серженко: «Как мы сделали конвертер и плеер для CinemaDNG на CUDA».

demos.jpg

Небольшой демо-проект, идущий в комплекте с Fast CinemaDNG,
60 fps на видеокарте Nvidia GeForce GTX 1070, шумодав и Unsharp Mask включены

В чем главная проблема с обработкой CinemaDNG? Хотя монтажки сейчас и научились проигрывать сырой формат, это требует очень больших ресурсов и быстрых SSD-накопителей внушительного объема. Качество обработки на GPU в программах пока не идеальное и отстает от реализаций на CPU. Негодное качество дебайера в Premiere Pro можно повысить из отладочной консоли, задав PlaybackQuality=4. К сожалению, реального времени при чтении с SSD нет, очень много пропусков кадров (≈30%) — и это на компьютере с 24 ГБ ОЗУ и настольным 6-ядерным Core i7! Видимо, этот участок кода оптимизировать не собирались, поддержка сделана больше «для галочки»: покупайте рабочую станцию с двумя Xeon. Но качество останется неудовлетворительное, шумодава нет вовсе, многие нужные обработки отсутствуют. Поэтому большинство проявляет исходники в Adobe Camera RAW, чтобы не терять ни йоты в качестве. Однако скорость обработки на CPU при этом составляет для Full HD примерно 1 кадр в секунду, то есть 5-минутное видео будет рендериться 5 часов. А если выбраны неудачные параметры проявки, то все приходится переделывать заново…

Специалисты справляются с проблемой по-разному. Например, применением так называемых прокси-файлов, одноименных копий меньшего объема и худшего качества, с их заменой на оригиналы в финальном выгоне. Однако за съемочный день можно наплодить терабайты сырых файлов. Временные прокси-файлы, создаваемые в монтажке, потребуют довольно большого количества времени на транскодирование (иногда это несколько десятков часов) и никак не дадут ответа на вопрос, не является ли данный дубль браком по шуму и экспозиции и не лучше ли доснять еще один дополнительный дубль прямо сейчас, пока все для этого подготовлено. Раньше такой возможности не было, и съемка фильмов зачастую растягивалась на годы. Сегодня вопрос оперативности и гарантированного результата является важнейшим конкурентным преимуществом студии, поэтому прямо на площадке всегда развернута аппаратура для контроля результата съемки.

Следует заметить, что дорогие профессиональные камеры именно для этой цели комплектуются бесплатным фирменным ПО. Достаточно вспомнить ArriRAW Converter или RedCine-X Pro — по названию программ понятно, кто их автор и для каких камер они разработаны. К сожалению, намного более массовые и доступные камеры Blackmagic и Canon (последние — с прошивкой Magic Lantern, формат файлов MLV) пока такого софта не имеют. Не поддерживается в них пока и загрузка лутов (LUT) пользователя в камеру. Ситуация даже ухудшилась с переходом Blackmagic на формат сжатия CinemaDNG 3:1, не поддерживаемый никакими программами, кроме Resolve того же производителя. Blackmagic отказывается раскрывать подробности сжатия и не отвечает на запросы по этому поводу. Тем самым открытость формата CinemaDNG ставится под сомнение. К счастью, Fast CinemaDNG спокойно читает и этот проприетарный формат.

ursa46ks.jpg

Пример обработки 4.6K-футажа с новой камеры Ursa Mini 4.6K,
20 fps на видеокарте Nvidia GeForce GTX 1070, шумодав и Unsharp Mask включены

Софт Fast CinemaDNG был создан в первую очередь для решения собственных повседневных задач. Как оказалось, потребность в такой программе огромная. Текущая версия Fast CinemaDNG распространяется бесплатно, она доступна на официальном сайте проекта. Взамен разработчики рассчитывают на отзывы о работе программы и конструктивные предложения. И такая связь с пользователями уже успешно налажена, новые функции добавляются регулярно. Например, по пожеланиям пользователя недавно была добавлена функция подрезки исходных файлов, чтобы не тащить в проект все DNG-файлы, а только нужный кусок. Хорошие идеи записываются в отдельный список и постепенно реализуются.

История создания Fast CinemaDNG такова. Многолетнее прямое общение с большими компаниями, типа корпорации Adobe, выявило, что нужды массовых пользователей совсем не являются для таких компаний приоритетом. Конкретно для Adobe приоритет сегодня — телестудии уровня BBC и голливудские киностудии. Это можно понять, но к прочим пользователям отношение никакое. Только один пример того, как игнорируются пожелания простых пользователей: полноэкранный режим работы для Premiere Pro так и не реализован, несмотря на многолетние просьбы, участие в пре-релизной программе и прямое общение со специалистами, отвечающими за разработку. Этот режим есть в Photoshop, в Lightroom, но его нет и не будет в Premiere Pro. Более важная функция — шумодав видео, работающий в реальном времени. Мы активно просили ее рекордные 6 лет. Ответ представителей компании такой: это не является функцией, необходимой нашим пользователям, не является приоритетом, и вообще покупайте плагины сторонних производителей. К сожалению, даже самый качественный плагин шумодава, стоящий немало, обеспечивает скорость в несколько fps при 100%-ной загрузке современных производительных CPU и GPU, что не позволяет оценить и подстроить в динамике его работу. Это не фото, это видео. Многие артефакты шумодавов видны только при воспроизведении в реальном времени.

Поэтому две первых функции, которые были сразу же реализованы в Fast CinemaDNG: уникальный высококачественный шумодав (реального времени!) и полноэкранный режим работы. Надеемся, пользователи по достоинству оценят набор функций и самостоятельно разберутся, какая именно функция в программе для обработки видео важнее: интеграция с социальными сетями, облачный сервис хранения проектов, версия для iPhone или все-таки качественный шумодав видео, работающий в реальном времени для файлов разрешения 4K и выше.

Каким же образом в Fast CinemaDNG достигнута высочайшая скорость обработки? Конечно, не стоит недооценивать квалификацию и опыт программистов ведущих производителей ПО, однако, на поверку, забюрократизированность и сомнительные управленческие решения вы получаете в дополнение к хорошим технологиям.

У Fast CinemaDNG есть два архитектурных козыря, выводящих это ПО далеко вперед всех конкурентов:

  1. Вся обработка ведется только на стороне GPU. Программа вообще не рассчитана на использование без GPU (только с CPU), поэтому нет никакого старого кода, архитектуры плагинов, вызова обработки на GPU из основного кода CPU, бесконечных пересылок данных по шине и простоев конвейера обработки. Все данные всегда находятся в памяти GPU и даже выводятся на экран, минуя CPU и оперативную память. GPU постоянно и равномерно загружен так, что простой переход на новое поколение ускорителей обеспечивает до двукратного роста скорости обработки на той же системе. Плюсы обработки только на GPU понятны: скачок производительности, что дает не только реальное время, но и возможность применять самые сложные и совершенные алгоритмы обработки. Минусы такого подхода, помимо очень высокой трудоемкости разработки: от пользователя требуется современный ускоритель GPU с достаточным объемом набортной памяти, если нужна обработка видео 4K и выше.

    Нет никакого смысла делать поддержку CPU «для совместимости» и получения 2–3 fps на 50% разрешения — таких программ уже написаны сотни, и никто ими не пользуется. CPU, впрочем, работы хватает. Он занят операциями с файлами, чтением большого потока данных с SSD и их распаковкой.

  2. Оптимизация кода сделана только для одной архитектуры GPU. Поддерживается только CUDA API, а конкретно — все видеокарты Nvidia, начиная с 400-й серии. Плюсы — высочайшая скорость. Минус — пока что у платформы Mac нет шансов получить поддержку, но и запросов от пользователей Mac как-то не поступало.

    Необходимо небольшое пояснение. Хотя поддержка OpenCL выглядит соблазнительной (особенно для отчета эффективных менеджеров о покрытии рынков), в реальности скорость пока уступает CUDA. А вот хорошая реализация поддержки OpenCL потребует неимоверных усилий. Код, хорошо оптимизированный под AMD, не будет нормально работать на ускорителях Intel из-за сильных различий в железе. Вероятно, тут нужны знания и опыт далеко за рамками SDK, на уровне разработчиков железа. Именно поэтому реализацией поддержки OpenCL в Premiere Pro занимались специалисты из AMD, это заняло пару лет, но скорость обработки все равно пока остается далека от CUDA. В обработке видео, к сожалению, водораздел проходит по реальному времени. 30 fps позволяют работать, 15 fps не позволяют. Будь это трижды оптимально по соотношению цены и качества, польза от такой поддержки сразу стремится к нулю. В теории у OpenCL с совместимостью все радужно, на практике 75% профессионального софта написано под CUDA.

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

1. Просмотр архивов в формате CinemaDNG

Эта задача встречается очень часто и включает в себя ряд подзадач: поиск в файловой системе, просмотр сырых данных в плеере с возможностью быстро подправить настройки проявки и прочее.

Программа Fast CinemaDNG использует в качестве файл-менеджера Проводник из Windows, а загрузка плеера с CinemaDNG-данными из выбранной серии происходит через контекстное меню Проводника. Это быстро и удобно. Не нужно создавать проект и вводить для него данные. Удаление или копирование серий выполняется средствами Проводника.

2. Отбраковка проектов

Перед тем, как сохранять снятые серии кадров, необходимо убедиться, что эти данные соответствуют хотя бы минимальным критериям качества. Если данные испорчены, то сохранять их не имеет смысла, поэтому лучше разобраться с этим вопросом сразу. Предварительный просмотр проекта в плеере дает возможность сделать такую оценку. Причем это характерно не только для новых проектов, но и для архивных.

3. Подрезка проектов

Очень часто необходимо сразу же при предварительном просмотре удалить лишние кадры, в которых есть моменты, бесполезные для последующей работы или не удовлетворяющие стандартам качества. Нужно всего лишь выделить начало фрагмента и его конец, указать папку для сохранения.

4. Кроп сырых данных, ресайз выходного изображения

По умолчанию практически во всех программах используются параметры обрезки CinemaDNG-файлов с удалением данных, которые есть в заголовке каждого кадра. Это имеет смысл, если в таких областях хранят служебную информацию или используют эти области для калибровки. Тем не менее, у многих камер (например, у Blackmagic Pocket) в этих областях лежат настоящие, полезные данные, и их нет смысла выкидывать по умолчанию. Тем более, что и само разрешение кадра не слишком большое. Программа Fast CinemaDNG позволяет пользователю настраивать параметры кропа сырых данных, в том числе и для использования ранее скрытых участков матрицы камеры.

Вместе с параметрами кропа для сырых данных пользователь определяет и разрешение для финальной картинки. Это делается одновременно, хотя кроп выполняется в самом начале обработки, а ресайз — в самом конце. Для ресайза используется высококачественный алгоритм Ланцоша.

5. Изменение разрешения сырых данных и сохранение DNG

Редактирование исходных данных в CinemaDNG-файлах — редкая, но очень нужная фича. Если пользователь сразу может решить, в каком разрешении нужно хранить RAW-данные, то нет смысла сохранять всё. В таком случае можно обрезать DNG и сохранить его заново, переписав необходимые теги в соответствии со спецификацией. В этом же месте можно выбрать алгоритм сжатия для уменьшения размера кадра при сохранении. В следующих версиях будет добавлена возможность сохранения результатов предварительной фильтрации в DNG.

6. Поддержка форматов BlackMagic RAW 3:1 и 4:1

В погоне за более сильным сжатием сырых данных компания Blackmagic Design ввела новые версии формата CinemaDNG со сжатием, которые называются BlackMagic RAW 3:1 и 4:1. Фактически, это алгоритмы компрессии изображений с минимальными потерями, причем сжатие сырых данных выполняется внутри камеры. Как и следовало ожидать, эти форматы закрытые, поэтому программы вроде Adobe Premiere Pro не могут с ними работать.

В программе Fast CinemaDNG реализована полноценная поддержка форматов BlackMagic RAW 3:1 и 4:1 как для чтения, так и для записи. Естественно, всё в реальном времени. Кроме того, есть возможность выбора пользователем алгоритма кодирования сырых данных, т. е. исходные несжатые данные можно сжать как с помощью стандартного алгоритма сжатия без потерь (коэффициент сжатия порядка 1,5–2), так и с помощью BlackMagic RAW 3:1 и 4:1 (сжатие в 3–4 раза).

Если использовать эти алгоритмы сжатия вместе с функцией кропа сырых изображений, можно значительно сократить размер каждого кадра в формате CinemaDNG, особенно если съемка идет в 4К, а сохранять нужно в 2К.

7. Разные алгоритмы дебайеризации на видеокарте

Сравнение качества разных алгоритмов дебайера (демозаики) обычно является проблемой, поскольку сложно узнать, какие именно алгоритмы используются, а их сравнение в одной программе сделать нельзя, поскольку таких интерфейсов обычно нет. В данном случае такая возможность есть, и пользователь может легко увидеть, какие артефакты можно получить на упрощенных алгоритмах демозаики. Естественно, более сложные алгоритмы выполняются медленнее, поэтому можно на практике оценить, что в данном случае более важно — скорость или качество.

8. Подавление шума

Одним из самых важных модулей программы Fast CinemaDNG является быстрый шумодав на видеокарте. Без подавления шума смысла в обработке сырых данных мало, в частности поэтому бесплатная версия Davinci Resolve в практическом плане очень ограничена, а шумодав есть только в платной версии. Обязательное требование для шумодава — возможность работы в реальном времени, потому что это видео, а не обработка фотографий. В данном случае шумодав съедает почти половину времени обработки, но всю обработку можно сделать в реальном времени и увидеть в плеере результат, одновременно изменяя параметры шумодава для достижения наилучшего качества.

Шумодав сделан на базе вейвлетов, есть возможности выбора типа вейвлета, порогов, типов сглаживания, силы подавления шума для каждой вейвлет-зоны и пр. Шумодав можно применять как до дебайера (это имеет смысл для подавления яркостного шума), так и после (тут лучше всего подавляется цветовой шум).

9. Плавный плеер

Без плавного плеера смысла в обработке видео мало, поскольку нужно все время иметь возможность видеть, что получается на той частоте кадров, которая была использована при съемке, причем при полном разрешении (например, для контроля параметров шумодава). И если для 2К это не такая уж и проблема, то для 4К все значительно усложняется. За 30–40 мс нужно успеть прочитать кадры с SSD, декодировать их и сделать всю необходимую обработку на видеокарте, а также вывести кадр на монитор. Причем вывод должен быть сделан плавно, без рывков, и всегда с небольшим запасом по времени. Понятно, что прокси-файлы могут в этом помочь, но в программе Fast CinemaDNG этот метод не используется, все удалось сделать и при максимальном разрешении.

Плеер работает и в полноэкранном режиме (переключение по Tab), причем в этом случае появляется плавающая панель управления, чтобы не мешать полноэкранному просмотру. Также в плеере реализован зум в очень широких пределах, поэтому можно просмотреть видео с огромным увеличением для любой области экрана.

10. Виджет для измерения времени выполнения каждого алгоритма на видеокарте

Крайне полезная информация — знать, сколько же времени уходит на каждую стадию алгоритма обработки данных. Во всех программах это сугубо внутренние данные, которые никто не выводит наружу. В программе Fast CinemaDNG в отдельном виджете можно увидеть как список используемых в данный момент алгоритмов, так и время выполнения каждого из них. Это уникальная фича, у которой просто нет аналогов. Эта функциональность также широко используется для тестирования видеокарт, можно запустить программу на серии с фиксированным разрешением, чтобы увидеть, какой скорости можно добиться и какой запас по времени есть у выбранного железа.

11. Гистограммы и парады

Эта стандартная фича, необходимая для контроля качества при выполнении цветовых преобразований, сделана полностью на GPU, поэтому пользователь видит все изменения мгновенно, в том числе и при проигрывании серии кадров в плеере.

12. Кривые RGstrong и HSL (HSV)

Работа непосредственно с кривыми позволяет значительно упростить работу по управлению гаммой и цветом. Кривые также сделаны для уменьшения количества возможных регулировок при проявке. Не секрет, что увеличение яркости и контраста — это преобразования, которые выполняются с помощью кривых, поэтому совершенно не обязательно для этих целей делать отдельные управляющие элементы, все можно сделать с помощью кривых и уровней.

13. Резкость на базе Unsharp Mask

Стандартная функция усиления резкости также реализована на видеокарте, поэтому скорость ее работы получается впечатляющей. Обычно это довольно медленный алгоритм, но на видеокарте он становится быстрым. Это обязательная часть схемы обработки данных, без него резкости явно будет не хватать.

14. Экспорт для обработанных данных

Обработанные данные можно экспортировать в виде отдельных файлов формата JPEG (8/12 бит на канал) и TIFF (16 бит на канал), а также видео в формате MJPEG (контейнер AVI). В ближайшее время ожидается поддержка формата JPEG2000 в контейнере MXF.

15. Экспорт для обработанных данных с помощью FFmpeg

С помощью сторонних приложений можно добавить огромное количество опций для сжатия обработанных данных. Программа Fast CinemaDNG может в автоматическом режиме передавать обработанные данные внешним сторонним приложениям, причем это делается без промежуточных файлов и прозрачно для пользователя. Например, если пользователь сам скачает и установит последнюю версию FFmpeg, то получит возможность использовать алгоритмы сжатия ProRes, DNxHD, DNxHR, JPEG2000, H.264 (программный x264 и аппаратный NVENC) и т. д.

16. Упрощенный интерфейс по сравнению с Adobe Camera RAW

Одной из важных целей при создании программы было упрощение интерфейса пользователя. Во многих программах есть масса дублирующих функций. Например, сначала увеличиваем яркость (двигаем среднюю точку кривой вверх), потом изменяем контраст (S-образная кривая с неподвижной средней точкой), потом гамму (еще одна кривая). Вместо этого стандартного набора можно все сделать с помощью одной кривой, при этом сократив общее количество элементов управления. Такой подход подразумевает более высокий уровень понимания пользователем процесса обработки, но вполне укладывается в схему быстрой и качественной обработки сырых данных.

Заключение

Программа Fast CinemaDNG продолжает активно развиваться и в ближайшее время ожидается дальнейшее расширение ее возможностей. Основная задача — дальнейшее улучшение качества обработки изображений, реализация новых инструментов и алгоритмов обработки. С другой стороны, продолжается работа над улучшением производительности, оптимизацией алгоритмов, что необходимо для ускорения работы всей программы. Также ожидается релиз нового менеджера памяти для видеокарты, что приведет к ослаблению требований к размеру памяти видеокарты.

Нельзя не отметить вклад компании Nvidia в развитие идеи GPGPU. Каждая новая архитектура GPU дает новые возможности для ускорения расчетов, поэтому общее ускорение складывается из оптимизации алгоритмов и от использования новых, более быстрых видеокарт.

Последний релиз можно скачать с сайта, вопросы можно задавать через группы ВК или ФБ. Официальный сайт проекта: fastcinemadng.ru. Группа Вконтакте: vk.com/fastcinemadng. Оставляйте свои отзывы и пожелания. Все это идет в работу, по просьбам пользователей уже реализован ряд функций.

Полный текст статьи читайте на iXBT