Нейросетевое повышение чёткости — без конфигурационных файлов

Старый сериал в 480p или аниме в 720p на большом экране выглядит мыльно: обычное масштабирование может лишь растянуть те пиксели, что есть. Frame Player умеет вместо этого увеличивать картинку нейросетью — ArtCNN для снятого на камеру видео, Anime4K для анимации, — которую выбирают в меню для одного файла или целого сезона и которая включается, только когда картинка действительно увеличивается.

Обновлено

Обычное масштабирование, каким бы хорошим оно ни было, умеет только интерполировать: что поставить между двумя пикселями, оно решает по соседним пикселям, и поэтому увеличенная картинка 480p выглядит не пиксельной, а мыльной. Нейросеть, обученная на парах маленьких и больших изображений, справляется лучше: она усвоила, как обычно выглядят край, линия тушью или фактура стены, и возвращает их на место. В mpv это давно возможно с шейдерами вроде Anime4K — ценой того, что их нужно скачать, прописать в конфигурационный файл и назначить клавиши для переключения. Frame Player поставляет три таких шейдера и выносит их в меню.

Как включить

  1. Щёлкните по картинке правой кнопкой и откройте Изображение или нажмите C.
  2. В разделе Повышение чёткости выберите Видео, Аниме или Сильно. По умолчанию стоит Выкл.
  3. Выберите, к чему относится выбор: К файлу или К плейлисту — к папке, в которой лежит файл, или к торренту, из которого он взят.

Есть и действие Повышение чёткости: следующий режим, которое перебирает все четыре; клавиши у него нет, пока вы не назначите её в редакторе клавиш.

Панель «Изображение» на серии в 480p, открытая правым кликом или клавишей C: по очереди «Видео», «Аниме» и «Сильно», строка состояния сообщает, что шейдер работает. Разница в кадре нарисована, чтобы показать направление каждого режима, а не снята с него.

Три режима

РежимНейросетьДля чегоЧто делает
ВидеоArtCNN C4F16 DSФильмы, сериалы, снятое на камеру видеоУвеличивает в 2 раза, попутно убирая шум и повышая резкость
АнимеAnime4K Upscale CNN x2 MРисованная анимацияУвеличивает в 2 раза, настроена на контуры и плоскую заливку
СильноAnime4K Upscale GAN x2 MИсточники до 720pДорисовывает фактуру по всему кадру

«Видео» и «Аниме» восстанавливают, «Сильно» придумывает. Первые два возвращают края, которые в картинке есть, только размыты. «Сильно» — генеративная нейросеть: она добавляет фактуру там, где в источнике её нет, и именно поэтому детальным выглядит весь кадр, а не только контуры. Платит она за это дважды. Обучали её на анимации, поэтому в игровом кино на лицах могут появляться артефакты. А придуманная фактура от кадра к кадру не совсем одинакова, поэтому неподвижная сцена мерцает. Мы измерили это на двух соседних кадрах фильма в 480p как разницу между ними в PSNR — чем меньше значение, тем сильнее кадры различаются:

Два соседних кадра, фильм 480pPSNR между ними
Обычное масштабирование35,4 дБ
«Видео» (ArtCNN)34,6 дБ
«Сильно» (Anime4K GAN)33,9 дБ
Восстанавливающая GAN перед «Сильно» (не вошла в плеер)31,3 дБ

Кадры различаются и сами по себе — в них что-то движется; таблица показывает, сколько каждая нейросеть добавляет сверх этого. Поэтому «Сильно» рассчитан на маленькие мыльные источники, где ему есть что дать больше всего. На всём, что больше 720p — по длинной или по короткой стороне, — он работает как «Видео», и панель пишет «Видео выше 720p: работает как „Видео“». Так что в плейлисте с режимом «Сильно» могут вперемешку идти серии в 720p и 1080p, и ни одна не останется без повышения чёткости и не начнёт терять кадры.

Почему эти три, а не те, что побольше

Каждое семейство существует в нескольких размерах, и крупные варианты — не переключатель «почётче», а переключатель «помедленнее». Мы измерили время GPU на кадр на M3 Max при выводе в окно 3400×2000:

Время GPU на кадрИсточник 720pИсточник 1080p
Без шейдера2,3 мс2,9 мс
Видео — ArtCNN C4F16 DS7,2 мс8,5 мс
Аниме — Anime4K CNN x2 M3,9 мс6,4 мс
Сильно — Anime4K GAN x2 M9,9 мс20,7 мс
Anime4K CNN x2 L8,6 мс
Anime4K CNN x2 VL15 мс
ArtCNN C4F3237 мс
Anime4K GAN x4 UL39 мс
Anime4K Restore GAN UL + GAN x2 M44 мс

Время GPU на кадр — сумма проходов рендеринга, которую сообщает mpv, на mpv 0.41.

У фильма с 24 кадрами в секунду на каждый кадр есть 42 мс, а с 60 — 17 мс. Самые тяжёлые варианты съедают большую часть этого времени или всё целиком даже на самом быстром Mac, а у встроенной графики лишь малая доля его ядер — поэтому плеер предлагает из каждого семейства тот вариант, что оставляет запас, а остальные не предлагает.

Работает, только когда картинка увеличена

Каждый шейдер сам решает на каждом кадре, работать ли ему: только когда картинка на экране больше своего размера более чем в 1,3 раза по обеим сторонам (для двух режимов Anime4K — в 1,2). Поэтому при включённом повышении чёткости:

  • серия 720p во весь экран на дисплее 1080p увеличена в 1,5 раза, и её чёткость повышается;
  • фильм 1080p на дисплее 1080p рисуется в собственном размере и остаётся как есть;
  • что угодно в 4K остаётся как есть практически на любом экране;
  • в маленьком окне картинка может быть увеличена недостаточно — тот же файл начинает обрабатываться, когда окно растёт или переходит в полноэкранный режим.

Размеры считаются в настоящих пикселях экрана, поэтому на Retina-дисплее в окне по каждой стороне вдвое больше пикселей, чем кажется. Обрезка чёрных полос и увеличение масштаба за увеличение не считаются: шейдеры сравнивают весь декодированный кадр с той частью картинки, что видна в окне.

Включённый переключатель, который ничего не делает, выглядел бы сломанным, поэтому панель говорит, что происходит: «Работает: картинка крупнее исходной в 1,6 раза», «Сейчас не работает: картинка увеличена слишком мало» или «Не нужно: видео не меньше экрана».

Для файла или для всего сезона

Стоит ли увеличивать картинку — свойство самого видео: сезон, снятый с DVD, мыльный в каждой серии, — поэтому выбор хранится для файла или для плейлиста, и выбор файла главнее. Поставьте плейлисту «Аниме», и с ним будет открываться каждая серия в папке или торренте, включая те, что вы ещё не смотрели; верните одной серии «Выкл.» — и выключится только она. У ссылки нет плейлиста, поэтому для ссылки выбор относится к файлу.

Настройки «для всех файлов» нет намеренно. Нейросеть, включённая везде, работала бы на каждом 4K-фильме, который ей нечем улучшить, а на ноутбуке за это пришлось бы платить батареей.

Первый раз в Windows

Прежде чем шейдер сможет работать, его нужно скомпилировать под видеокарту, и mpv делает это, когда картинка впервые становится достаточно большой. На Mac это занимает около четверти секунды — мы измерили 0,27 с и три пропущенных кадра — одинаково для всех режимов.

В Windows дорогой режим — «Видео». Его проходы компилирует шейдерный компилятор Microsoft для Direct3D 11, и для ArtCNN на современной настольной видеокарте это заняло больше двенадцати секунд — против десятой доли секунды для «Аниме» и трети секунды для «Сильно». Две вещи не дают этому мешать больше одного раза:

  • Это происходит один раз на компьютере. Скомпилированные шейдеры сохраняются между сеансами, поэтому при следующем запуске плеера повышение чёткости включается сразу.
  • Плеер об этом говорит. Пока идёт первая компиляция, картинка стоит, поэтому плеер её затемняет и показывает «Подготовка повышения чёткости — Только в первый раз на этом компьютере» с бегущим счётчиком времени, чтобы не казалось, будто всё зависло.

По сравнению с ручной настройкой glsl-shaders в mpv

Если вы пользовались Anime4K в mpv, порядок вам знаком: скачать шейдеры, перечислить их в glsl-shaders в mpv.conf или назначить режимы на клавиши в input.conf и помнить, какой подходит к какому файлу. Frame Player внутри делает то же самое — тот же mpv, те же файлы шейдеров без изменений — и меняет четыре вещи:

  • Ничего не нужно скачивать и прописывать. Шейдеры поставляются с плеером.
  • Выбор запоминается для файла или плейлиста, а не одной глобальной строкой, поэтому фильм с живыми актёрами после сезона аниме не унаследует анимешный шейдер.
  • Панель говорит, работает ли он, а если нет — почему.
  • Скомпилированные шейдеры кэшируются между сеансами. Сам mpv по умолчанию так и делает; библиотечная версия mpv, на которой строятся плееры, — нет, поэтому первая версия этой функции для Windows компилировала шейдеры заново в каждом сеансе.

Если вам больше нравится своя цепочка, оставьте её: когда в вашем mpv.conf задан glsl-shaders, плеер не добавляет своих шейдеров, а панель пишет «Шейдеры заданы в mpv.conf, плеер их не меняет».

Где это не работает

  • Трансляция. Видео декодирует сам телевизор, поэтому ничто из того, что делает GPU компьютера, до него не доходит; настройки изображения во время трансляции недоступны.
  • Совместный просмотр. Выбор — только ваш и с комнатой не делится; каждый выбирает то, что подходит его экрану.

ArtCNN и Anime4K распространяются под лицензией MIT, и их лицензии поставляются с плеером вместе с остальными уведомлениями о сторонних компонентах.

Вопросы

Станет ли фильм в 1080p чётче на экране 1080p?

Нет, и плеер этого не пытается. Шейдеры работают, только когда картинка на экране хотя бы в 1,3 раза больше своего размера (для Anime4K — в 1,2) по обеим сторонам. Фильм 1080p в собственном размере или что угодно в 4K остаётся обычному масштабированию и ничего не стоит; панель «Изображение» при этом пишет «Не нужно», чтобы не казалось, будто что-то сломалось.

Какой режим выбрать?

«Видео» — для снятого на камеру: фильмов, сериалов, домашнего видео. «Аниме» — для рисованной анимации. «Сильно» — когда источник 720p или меньше и хочется, чтобы детали дорисовывались по всему кадру, ценой лёгкого мерцания и редких артефактов на лицах; выше 720p этот режим работает как «Видео».

Работает ли это в Windows?

Да, на обеих системах. В Windows режиму «Видео» при первом запуске на компьютере нужно десять секунд подготовки или больше, и всё это время плеер пишет «Подготовка повышения чёткости». Потом подготовленный шейдер сохраняется, и в следующих сеансах всё включается мгновенно.

Нужна ли мощная видеокарта?

Работа идёт на GPU, и режимы выбраны самыми лёгкими в своих семействах. На источнике 720p самый тяжёлый из них занял 9,9 мс на кадр на M3 Max, а у фильма с 24 кадрами в секунду на кадр есть 42 мс. Заметно более слабый GPU, например старая встроенная графика, может не справиться с режимом «Сильно»; если воспроизведение дёргается, выберите «Видео» или «Аниме» или выключите повышение чёткости.

Отправляется ли моё видео куда-то для обработки?

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

Можно ли и дальше пользоваться своими шейдерами из mpv.conf?

Да. Если в вашем mpv.conf задан glsl-shaders, плеер его не трогает — панель «Изображение» пишет «Шейдеры заданы в mpv.conf, плеер их не меняет», и переключатель повышения чёткости отходит в сторону.

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

$ brew install --cask risenxxx/tap/frame-player

Версия 1.38.1macOS-сборки нотаризованыWindows-сборки без подписи: SmartScreen спросит один раз