Немного теории:
Сжатые видеофайлы, помимо прочих, имеют также такой параметр, как "яркостный диапазон". Связано это с тем, что алгоритмы кодирования видео, как правило, сохраняют полную информацию о исходной яркости, а информации о цвете пикселей после сжатия, как правило, остаёстя в несколько раз меньше. Такой подход к сжатию полагается на то, что человеческое зрение более чувствительно к изменениям яркости, чем к цветам.
Соотношение информации о яркости и цвете также является одним из параметров видеофайлов, и называется "цветовая субдискретизация". Чаще всего используется субдискретизация насыщенности 4:2:0, что означает сохранение полного яркостного разрешения, и уменьшение горизонтального и вертикального цветового разрешения в два раза.
Яркостный диапазон же таких видеоданных, как TV передачи или фильмы на Blu-ray составляет 16-235, так называемый узкий "TV Range" диапазон. Когда как вывод изображения на PC производится в полном "PC/full range" диапазоне 0-255. При несоответствии диапазонов видеофайла и устройства вывода, изображение будет выводиться с большими искажениями, поэтому декодер при необходимости должен выполнять преобразование из 16-235 в полный 0-255 диапазон, либо наоборот.
Но плеер VLC выполняет такое преобразование далеко не всегда.
В результате видео воспроизводится с искажениями, т.к. узкий "TV range" диапазон выводится на PC без преобразования в полный "PC/full range". На практике это выглядит как огромная потеря в контрастности и "белая пелена" над всем изображением, что лучше всего заметно на тёмных сценах (в этом случае вместо чёрного мы вовсе получаем лишь светло-серый цвет).
В левой половине показан пример вывода Blu-ray фильма через VLC, в правой — корректный вывод:
Примечательно, что этот баг существует в Windows версии VLC уже много лет. Разработчики же почему-то не считают необходимым исправлять его, и дают странные комментарии по этому поводу:
Это что-то вроде того, что их плеер всё правильно отображает и преобразование не требуются, когда как остальные плееры якобы выполняют излишнее преобразование, и отображают неправильно.
Но это, конечно, не согласуется с реальностью — когда даже "чёрные полосы" отображаются не чёрными, то вывод явно некорректен.
Распространённость бага:
За багом была замечена только Windows версия VLC. Но зато этот баг тянут из версии в версию уже много лет. Хотя даже на Windows баг проявляется не всегда: есть зависимость от заданных настроек и используемого оборудования. В моём случае, например, с настройками по умолчанию при выводе через интегрированную графику Intel, баг проявляется, но если подключить монитор к дискретной видеокарте nVidia, то баг исчезает.
Итоги:
Данный баг проявляется не у всех и не всегда, но если вы используете VLC плеер на Windows, то стоит лишний раз проверить, корректно ли воспроизводятся у вас видеофайлы. Например, глянуть файл с узким диапазоном на какой-нибудь тёмной сцене или на "врезанных" чёрных полосах (как в примере из скриншота). Ведь если баг всё-таки проявится, то влияние на качество изображения будет огромным, поэтому важно знать о такой особенности VLC.
Обнаружил наличие данного бага, когда сменил старый кинескопный монитор на новый ЖКИ, с калиброванными на заводе цветами. Затем обнаружил, что в панели управления nVidia на вкладке "Регулировка параметров цвета для видео" можно включить "С настройками NVIDIA" и включить полный диапазон (0-255) и у VCL черные полосы становятся чёрными и картинка выглядит лучше. К сожалению для других видеоплееров картинка лучше выглядит когда включен пункт "С настройками видеоплеера".