Я смотрю аниме
В этой небольшой заметке я хотела бы рассказать вам, что смотреть аниме можно так, как вы себе и не представляете.
Я думаю, многие встречали в описании к видео такую характеристику, как глубина цвета изображения, выраженная в битах (bit) — чаще всего это 10bit или 8bit, т.е. — это буквально количество бит, которое используется для хранения интенсивности каждого цвета. Ещё эта величина называется битовой глубиной.
Большинство из нас привыкло к тому, что изображения описываются в цветовом пространстве RGB.
RGB имеет 3 канала — красный, зеленый и синий. Вместе они определяют цвет и яркость каждого пикселя. Сложив информацию для каждого пикселя мы получим приближенное представление исходного изображения на своём мониторе.
На деле всё, конечно, немного сложнее, потому что любое сжатие информации подразумевает, что часть исходной информации будет утеряна.
Всё верно, без возможности восстановления.
Подход к сжатию изображений основывается на алгоритмах, которые со временем не претерпели существенных изменений. Также как и в JPEG, изображение, для возможности его лучшего анализа, разбивают на небольшие зоны (обычно это квадраты 8x8) — т.е. дискретизируют, также и в современных алгоритмах сжатия применяют аналогичный способ, MPEG — точно также дискретизирует изображение, чтобы потом обработать
Конечно, с видеокодеками всё намного сложнее, потому что, одно дело сжимать статичное изображение, а совершенно другое дело сжимать последовательность изображений.
Дискретное косинусное преобразование, компенсация движения — это те вещи, о которых я тут рассказывать не буду.
Поэтому для передачи видеосигналов используется совершенно другой подход, основанный на особенности человеческого зрения, которое чувствительно к изменению яркости лучше, чем к изменению цвета.
Думаю, многие, в описании к видео видели странное сочетание букв — YCbCr.
По факту, YCbCr — это одна из разновидностей представления цветового пространства YUV — модели, где вместо привычных нам разделений на цвета, используется подход с разделением исходного цвета с использованием яркости (Y), как одного из компонентов и, также, компонентов Cb — насыщенный синий и Cr — насыщенный красный.
Насыщенность в данном случае означает, что из исходных цветовых каналов была вычтена компонента яркости. Поэтому компоненты Cb и Cr обычно называются цветоразностными сигналами.
Такой способ намного более эффективный для видео, потому что позволяет кодировать изображение c уменьшением разрешения в каналах передающих значения цвета, при сохранении разрешения в канале яркости, т.е. удаляю лишнюю информацию из-за особенностей восприятия цвета человеком.
Значения, которые показывают нам, насколько можно снизить разрешение цветности называется — цветовой субдискретизацией (англ. Chroma subsampling).
Если совсем по простому, то, в данном случае, значения интенсивности цвета накладывается на значения интенсивности яркости для каждого пикселя, что позволяет восстановить его исходный цвет.
Обычно указывается формат субдискретизации: 4:4:4, 4:2:2, 4:2:0, 4:2:1, что, по факту, означает, с каким разрешением мы восстанавливаем исходный цвет — чем ниже значение выборки цветоразностных сигналов, тем ниже точность представления исходного изображения.
Легко заметить, что выборка по значениям яркости всегда постоянна, а вот для цветоразностных сигналов выборка изменяется в зависимости от формата, например, 4:4:4 — это, по факту, привычное нам RGB, а у 4:2:2 цветовое разрешение уменьшается вдвое.
Потому что сейчас мы от бесполезной информации перейдём к полезной её реализации на практике, а именно к тому, как видеоплееры отображают всю эту информацию на твоём экране.
Если исходное разрешение изображения видео совпадает с разрешением твоего устройства, отображающего данные, то всё, скорее всего хорошо (и это мы ещё не рассматриваем HDR), но, например, как это часто бывает, в случае воспроизведения аниме, исходное разрешение видео всегда меньше разрешения твоего экрана.
И тут в игру вступают алгоритмы масштабирования изображения. Поэтому я использую — madVR, который имеет возможность использовать довольно точные алгоритмы масштабирования изображения.
Но, как ты понимаешь, madVR — это, по сути, просто рендер, и без видеоплеера его использовать невозможно. Наверное, кто-то ещё помнит — Media Player Classic, немного странный плеер с открытым исходным кодом, поддержка которого была прекращена в 2017 году.
Казалось, что его история на этом и закончилась, но нашлись энтузиасты, которые вяло, но всё же поддерживают его актуальность — новых, глобальных функций не добавят, но здесь скорее вопрос в том, что ещё можно добавить в видеоплеер, который изначально поддерживал кастомизацию и использовал открытые библиотеки декодирования информации. Библиотек, которые стабильно обновляются и по сегодняшний день.
Поэтому, пока ты смотришь потоковое видео с битрейтом, съедающим все нюансы, я, как настоящая душевнобольная, продолжаю использовать связку MPC-HC + madVR + XySubFilter:
Актуальную версию форка MPC спокойно можно скачать с гитхаба по следующей ссылочке:
Устанавливаем его, но не запускаем, потому что следующим шагом необходимо скачать сам madVR:
Архив, лучше всего распаковать в корень диска C:\madVR, тыкунть на install.bat и успешно его установить.
Следующим шагом скачиваем XySubFilter — плагин для точного отображения субтитров:
Архив распаковываем в папку с madVR, тыкаем на Install_XySubFilter.bat и радуемся, что на этом наши мучения ещё даже и не думают закончиться:Р
Запускаем MPC-HC, нажимаем клавишу O (англ. раскладка или Вид>Настройки) и настраиваем всё в соответствии с изображение ниже:
Поздравляю! Вы умнички:) Но, если тебе кажется, что заячья нора ещё не настолько глубока, то запускай любое видео, жми правую клавишу и тыкай в "Фильтры>madVR>Edit settings".
Добро пожаловать в меню тонкой настройки рендера madVR. Здесь нас интересует только пункты, связанные с scaling algorithms.
Для image downscaling и Image upscaling выбираем DXVA, который позволяет нам задействовать аппаратное ускорение при помощи твоей видеокарты (GPU)
А вот с chroma upscaling всё сложнее, потому что в данном случае, качество будет напрямую зависеть от мощности твоего железа.
Я советую использовать следующие алгоритмы: Lanczos, Jinc или NGU. Конечно, лучше вообще эти настройки не трогать, но если уж вы туда полезли, то советую, после каждого изменения нажимать Ctrl+J и пристально наблюдать за значением — Dropped frames.
Единственная проблема, с которой вы столкнётесь — воспроизведение HDR.
Вадим, как там твой телевизор?