Морти, мы в UltraHD! Как посмотреть любой фильм в 4K, дорисовав его через малоизвестную нейросеть

в 14:48, , рубрики: diy или сделай сам, Enhance, ffmpeg, photoshop, UltraHD, Upscale, машинное обучение, Работа с видео, Рик и Морти

Наверное, вы слышали про технологию Яндекса DeepHD, с помощью которой они как-то раз улучшили качество советских мультфильмов. Увы, в публичном доступе ее еще нет, а у нас, рядовых программистов, вряд ли найдутся силы написать свое решение. Но лично мне, как обладателю Retina-дислея (2880х1800), недавно очень захотелось посмотреть «Рика и Морти». Какого же было мое разочарование, когда я увидел, как мыльно на этом экране выглядит 1080р, в котором существуют оригиналы этого мультсериала! (это прекрасное качество и обычно его вполне достаточно, но поверьте, ретина так устроена, что анимация с ее четкими линиями в 1080р выглядит мыльновато, словно 480р на FHD-мониторе)

Я твердо решил, что хочу увидеть этот мультсериал в 4К, хотя и совершенно не умею писать нейросети. Однако решение было найдено! Любопытно, что нам даже не придется писать код, понадобится лишь ~100 ГБ места на диске и немного терпения. А результат — четкое изображение в 4К, которые выглядит достойнее, чем любая интерполяция.

image

Подготовка

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

Это можно сделать через Adobe Premiere Pro или другую программу для работы с видео, но я уверен, что такая установлена далеко не у всех. Поэтому давайте воспользуемся консольной утилитой ffmpeg. Я взял первую серию первого сезона, и понеслось:

$ ffmpeg -i RiM01x01_4K.mp4 -q:v 1 IM/01x01_%05d.jpg

Почему JPG, а не PNG?

Справедливый вопрос. Дело в том, что 31 000 PNG, которые бы мы получили бы на выходе, весили умопомрачительно много. Настолько много, что можно незначительно пожертвовать качеством.
К слову, параметр -q:v 1 означает, что мы выводим JPG в максимально возможном качестве.

Подождав примерно 10 минут, мы получим большущую папку с изображениями. У меня она заняла 26 ГБ.
Морти, мы в UltraHD! Как посмотреть любой фильм в 4K, дорисовав его через малоизвестную нейросеть - 2
Осталось обработать каждый из этих кадров!

Как будем обрабатывать?

Я нашел три варианта, работающих более-менее нормально — это небезизвестный Let's Enhance, waifu2x (натренирован на аниме) и Mail.ru Vision.
Чуть позже я обязательно покажу примеры.

Mail.ru Vision и Let's Enhance неплохо обрабатывали изображения, но они, к сожалению, не опенсорсные, то есть для обработки 31000 картинок нам придется писать создателям на почту и, вероятно, немало заплатить. Поэтому я пригляделся к оставшемуся waifu2x, но он не порадовал меня качественным результатом, были шумы и нечеткости. Все-таки «Рик и Морти» — это не аниме.

Я уже было отчаялся бесконечно листать Github и тематические форумы, но… Спасение вдруг пришло! Нашелся вариант, который работает на машине локально, обрабатывает картинку меньше, чем за секунду, и показывает отличное качество. И вы не поверите, кто в очередной раз пришел нам на помощь!

Adobe Photoshop!

И нет, я не буду рассказывать true story о том, как там можно парочкой фильтров сделать хорошую картинку. Adobe действительно натренировали самую настоящую нейросеть, которая при масштабировании внутри программы может дорисовать изображение!

Для начала нужно открыть исходное изображение, затем перейти через верхнее меню в Изображение > Размер изображения… и выбрать ресамплинг «Сохранение Деталей 2.0».

Морти, мы в UltraHD! Как посмотреть любой фильм в 4K, дорисовав его через малоизвестную нейросеть - 3

Результат приятно удивил! Пожалуй, впереди только Let's Enhance. Вот и обещанное сравнение (исходное изображение приближено примерно в 8 раз):

Морти, мы в UltraHD! Как посмотреть любой фильм в 4K, дорисовав его через малоизвестную нейросеть - 4

— И что теперь, вручную обрабатывать каждый кадр через фотошоп?
Конечно, нет! В фотошопе есть инструмент Actions, который позволяет сначала записать последовательность действий, а потом применить ее на целую папку с изображениями. Не буду расписывать весь процесс, он легко гуглится.

Я оставил свой ноутбук обрабатывать тридцать одну тысячу кадров на ночь по шаблону «сделай апскейл в два раза и сохрани». Проснулся утром — все готово! Еще одна папка с кучей кадров, но теперь уже в 4К и с размером в 82 ГБ.

Назад, в видео

Нам снова поможет ffmpeg.

Понимаем, что мы совсем забыли про аудиодорожку, и достаем ее из оригинального файла:

ffmpeg -i RiM01x01_1080p.mp4 -vn -ar 44100 -ac 2 -ab 320K -f mp3 sound.mp3

А потом скидываем саунд в папку со всеми 4К-кадрами. Все наши труды прошли не зря, мы готовы к финальной склейке!

ffmpeg -i 01x01_%05d.jpg -i sn.mp3 -vcodec libx264 -preset veryslow -crf 10 -r 23.976 RiM_01x01_4K.mp4

Будьте внимательны: после -r ставьте именно такое количество кадров, какое было в оригинале, иначе звук не будет совпадать с картинкой!

Готово!

Мы получили первую серию «Рика и Морти» в 4К. Конечно, это было немного по-ламерски, что ли… Но на самом деле у такого подхода есть серьезное преимущество. При работе с другими фильмами или мультиками мы можем удобнейшим образом, прямо через Photoshop доводить их кадры до идеала. Подобрали идеальную резкость и балансировку цветов под несколько кадров из фильма, потом записали свои действия в Action, распространили на весь фильм, и получили отличный результат без всяких математических сложностей. Это делает чудо-апскейл чуть ближе к обычному пользователю. Сложнейшие вещи, к которым люди шли веками, воспроизводятся быстро и без специальных знаний — что это, если не будущее?

Автор: sadfun

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js