Нейросетевое повышение чёткости — без конфигурационных файлов
Старый сериал в 480p или аниме в 720p на большом экране выглядит мыльно: обычное масштабирование может лишь растянуть те пиксели, что есть. Frame Player умеет вместо этого увеличивать картинку нейросетью — ArtCNN для снятого на камеру видео, Anime4K для анимации, — которую выбирают в меню для одного файла или целого сезона и которая включается, только когда картинка действительно увеличивается.
Обычное масштабирование, каким бы хорошим оно ни было, умеет только интерполировать: что поставить между двумя пикселями, оно решает по соседним пикселям, и поэтому увеличенная картинка 480p выглядит не пиксельной, а мыльной. Нейросеть, обученная на парах маленьких и больших изображений, справляется лучше: она усвоила, как обычно выглядят край, линия тушью или фактура стены, и возвращает их на место. В mpv это давно возможно с шейдерами вроде Anime4K — ценой того, что их нужно скачать, прописать в конфигурационный файл и назначить клавиши для переключения. Frame Player поставляет три таких шейдера и выносит их в меню.
Как включить
- Щёлкните по картинке правой кнопкой и откройте Изображение или нажмите C.
- В разделе Повышение чёткости выберите Видео, Аниме или Сильно. По умолчанию стоит Выкл.
- Выберите, к чему относится выбор: К файлу или К плейлисту — к папке, в которой лежит файл, или к торренту, из которого он взят.
Есть и действие Повышение чёткости: следующий режим, которое перебирает все четыре; клавиши у него нет, пока вы не назначите её в редакторе клавиш.
Панель «Изображение» на серии в 480p, открытая правым кликом или клавишей C: по очереди «Видео», «Аниме» и «Сильно», строка состояния сообщает, что шейдер работает. Разница в кадре нарисована, чтобы показать направление каждого режима, а не снята с него.
Три режима
| Режим | Нейросеть | Для чего | Что делает |
|---|---|---|---|
| Видео | ArtCNN C4F16 DS | Фильмы, сериалы, снятое на камеру видео | Увеличивает в 2 раза, попутно убирая шум и повышая резкость |
| Аниме | Anime4K Upscale CNN x2 M | Рисованная анимация | Увеличивает в 2 раза, настроена на контуры и плоскую заливку |
| Сильно | Anime4K Upscale GAN x2 M | Источники до 720p | Дорисовывает фактуру по всему кадру |
«Видео» и «Аниме» восстанавливают, «Сильно» придумывает. Первые два возвращают края, которые в картинке есть, только размыты. «Сильно» — генеративная нейросеть: она добавляет фактуру там, где в источнике её нет, и именно поэтому детальным выглядит весь кадр, а не только контуры. Платит она за это дважды. Обучали её на анимации, поэтому в игровом кино на лицах могут появляться артефакты. А придуманная фактура от кадра к кадру не совсем одинакова, поэтому неподвижная сцена мерцает. Мы измерили это на двух соседних кадрах фильма в 480p как разницу между ними в PSNR — чем меньше значение, тем сильнее кадры различаются:
| Два соседних кадра, фильм 480p | PSNR между ними |
|---|---|
| Обычное масштабирование | 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 DS | 7,2 мс | 8,5 мс |
| Аниме — Anime4K CNN x2 M | 3,9 мс | 6,4 мс |
| Сильно — Anime4K GAN x2 M | 9,9 мс | 20,7 мс |
| Anime4K CNN x2 L | 8,6 мс | |
| Anime4K CNN x2 VL | 15 мс | |
| ArtCNN C4F32 | 37 мс | |
| Anime4K GAN x4 UL | 39 мс | |
| Anime4K Restore GAN UL + GAN x2 M | 44 мс |
Время 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, плеер их не меняет», и переключатель повышения чёткости отходит в сторону.