Хабрахабр

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

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

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

image

Подготовка

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

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

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

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

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

К слову, параметр -q:v 1 означает, что мы выводим JPG в максимально возможном качестве.

Подождав примерно 10 минут, мы получим большущую папку с изображениями. У меня она заняла 26 ГБ.

Осталось обработать каждый из этих кадров!

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

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

Чуть позже я обязательно покажу примеры.

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

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

Adobe Photoshop!

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

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

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

В фотошопе есть инструмент 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, распространили на весь фильм, и получили отличный результат без всяких математических сложностей. Это делает чудо-апскейл чуть ближе к обычному пользователю. Сложнейшие вещи, к которым люди шли веками, воспроизводятся быстро и без специальных знаний — что это, если не будущее?

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть