Pull to refresh

Разработчик представил более эффективный видеоплеер для терминала

Reading time2 min
Views5.9K
Сравнение кадра из видеоплеера с роликом запуска Starship и культовым «telnet towel.blinkenlights.nl».

Разработчик под ником TheRealOrange опубликовал на GitHub исходный код своей версии видеоплеера tvp для терминала, который эффективно кодирует от 4 до 11 пикселей видеопотока с помощью одного символа юникода. Правда, пиксели все еще не являются независимыми, а каждый символ юникода при прорисовке по-прежнему ограничен двумя цветами. Также разработчику удалось оптимизировать свой способ для правильного изменения цвета текста или фона на видео, даже в случаях, когда несколько пикселей рядом достаточно похожи.

Автор выложил проект под открытой лицензией GPL-3.0. Код видеоплеера для терминала написан на С++ (440 строк).

Разработчик рекомендует для тестов использовать версию эмулятора терминала alacritty, так как там tvp работает с оптимальной производительностью. В своем проекте разработчик для декодирования видео использует не FFmpeg, а библиотеку OpenCV.

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



Разработчик в итоге смог увеличить эффективное разрешение в четыре раза по горизонтали и в два раза по вертикали по сравнению с вариантом кодирования двух пикселей на символ юникода. Видеоплеер tvp ограничен двумя цветами на пиксель. Его алгоритм можно подогнать под каждое видео с помощью оптимальной ручной настройки опции threshold [0-255] (по умолчанию значение — 10), уменьшающей максимальную разницу между цветами, которые будут сделаны одинаковыми; затем необходима установка их цвета при отображении на средний. Сильное снижение значения опции threshold, как правило, приводит к увеличению числа перерисовок, и в итоге видео становится более прерывистым.

Пример работы видеоплеера для терминала.
image

Пользователи оценили задумку автора. «Хорошо работает на kitty (размер терминала 317x86, поэтому 640p), очень хорошо воспроизводит анимацию. Тестировал на Ghost in the Shell, иногда производительность падала до 20 кадров в секунду, когда много чего происходит на видео. Качество изображения лучше, чем у vlc в режиме caca», — написал участник обсуждения этого проекта на Reddit.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
Total votes 33: ↑33 and ↓0+33
Comments8

Other news