all07

Всего понемногу ...

Вселенский опыт говорит, что погибают царства не оттого, что тяжек быт или страшны мытарства.
А погибают оттого (и тем больней, чем дольше), что люди царства своего не уважают больше. (Булат Окуджава)

Те, кто готовы пожертвовать насущной свободой в обмен на то, чтобы получить временную безопасность, — недостойны ни свободы ни безопасности. (Бенджамин Франклин)

Война — это мир! Свобода — это рабство! Незнание — сила! (Джордж Оруэлл)

Просмотр видео на компьютере, часть III

 Просмотр видео на компьютере, часть III

Давно я не публиковал заметок, посвященным вопросам использования софта, в связи с чем попытаюсь заполнить этот досадный пробел кратким обзором программы видео плеера, которую я использую на данный момент для просмотра видео. Много воды утекло с момента написания предыдущей статьи (четыре года - как быстро летит время), которая была посвящена настройкам популярного на платформе Windows плеера MPC-HC, многое с той поры изменилось, причем кардинальным образом. На сей момент мой выбор остановился на mpv - весьма удобном, простом в настройке и практически безпроблемном плеере со свободным кодом, распространяемым по GPL.

Хотя mpv является мультиплатформным, и должен (по идеи) работать на Windows (что я лично не проверял), основной платформой для него все же является Linux, со всеми вытекающими особенностями. Спешу сказать, что даже при условии его идеальной работы на Windows, я лично для себя решил категорически (в свете малоприятных событий, имевших место быть совсем недавно) отказаться, без крайней на то необходимости, от использования данной системы. Тем паче в случае наличия софта превосходящего по качеству работы и удобству используемый мною на протяжении последних шести лет MPC-HC, который (прибит гвоздями) не перенесим на другие операционные системы, отличные от Windows.

Итак, для использования mpv потребуется:

  1. Самое главное: базовые знания и умения работы с системой Linux. В частности - сборка и установка пакетов для используемого дистрибутива из исходников, подразумевающая работу в консоли. Хочу сразу сразу предупредить - плеер также является консольным.
  2. Работающий дистрибутив Linux. В моем случае это current Slackware (в качестве WM использую i3).
  3. Опционно, но всячески приветствуется: наличие прямых рук, умения читать документацию и способности к разумному мыслительному процессу.

Проект mpv активно развивается, поэтому для доступа ко всем фитчам я рекомендую использовать свежие версии, не ожидая мантейнера данного пакета своего дистрибутива (сборка которого может опаздывать от текущей версии на полгода), а собирать пакет актуальной версии самостоятельно из исходников, которые можно взять из git-репозитория на GitHub.

Для удобства обновления стоит держать у себя на диске локальную копию репозитория (проверяя обновления командой git pull, синхронизируя локальную копию с удаленной), которая дает возможность работы с версиями. Если (вдруг) что-то окажется поломанным в текущей версии, легко можно откатить состояние на несколько коммитов назад и подождать стабилизации кода. Хотя, контрибъютеры не коммитят в мастер экспериментальный, и не проверенный или плохо отлаженный код, по крайней мере за весь срок (восемь месяцев) достаточно активных обновлений у меня ни разу не возникала необходимость отката на ранние версии по причине нестабильности. К слову сказать, mpv еще ни разу не падал и не вызывал иных проблем (при ежедневном использовании в течении указанного срока) в отличии от стабильных версий MPC-HC, которые иногда (редко) грешили непредсказуемым падежом, что говорит само за себя о качестве кода.

Для получения необходимого функционала при сборке mpv необходимо установить (или проверить наличие в системе) соответвующих библиотек, основной из которых является ffmpeg, (который также должен быть собран с необходимыми зависимостями), желательно не очень древней версии.

***

Так в чем же заключаются киллер-фитчи данного плеера? Что в нем такого особенного, чего нет у других? Попробую разобраться. Стоит начать с определения набора требований к функционалу - возможностям программы, которые делают ее использование удобным и приятным. Очевидно, у каждого пользователя складываются свои особенные требования к плеерам, как к особому классу ПО, поэтому не могу говорить за всех, но для себя, в течении многих годов использования софта данного типа, я сформировал вполне определенный список необходимых функций и характеристик, наличие и полнота реализации которых может служить критериями отбора.

В первую очередь выделю качество воспроизведения видео и звука и стабилность программы, без чего все остальные навороты и удобства использования бесполезны - больше, чем полностью. Под качеством я понимаю - отсутствие каких-либо артефактов воспроизведения: тиринга, пропуска/дублирования кадров, рассинхронизации A-V потоков и прочих факторов, отрицательно влияющих на изображение и звук. Приемлемое качество масштабирования, в основном - апскейла, для видео с разрешением ниже, чем разрешение экрана. Под стабильностью я понимаю корректную работу всех заявленных функций во всех режимах без крашей, зависаний, повышенного потребления ресурсов: процессорного времени и памяти.

Наверное самым больным и сложным вопросом из обозначенного списка является проблема пропуска/дублирования кадров, вызванная разностью скорости потока видео и частотой отображения кадров устройства воспроизведения - монитором (или телевизором - в моем случае, который с технической точки зрения мало чем отличается обычного монитора при цифровом подключении по HDMI-интерфейсу). Авторы проекта уделили особое внимание решению данной проблемы, ей посвящена отдельная статья на сайте проекта.

Вкратце, суть проблемы заключается в различие скоростей видеоряда (кадров за единицу времени с которой синхронизованы аудио треки) и реальной скоростью его воспроизведения на физическом устройстве, приводящая к накоплению рассинхронизации между ними, которая через определенных интервал (в случае 23.976/24.000 - примерно, раз в минуту) обязана компенсироваться, учитывая то, что устройство отображения (при отсутствии тиринга) воспроизводит кадр целиком. В указанном случае на показ одного кадра уходит меньшее время, чем необходимо, в результате, если не принять мер, в конечном итоге видео успеет "проиграться" полностью, а аудио все еще будет продолжать воспроизводиться - "отстанет" от видео.

Самый простой метод избежать этого неприятного явления - показывать "лишние" кадры с некоторым интервалом, что бы они "замедлили" общую скорость, не давая видео "обогнать" аудио. Откуда взять лишние кадры, которых нет в видеоряде? Просто продублировать существующие (или пропустить некоторые - в случае возникновения "избытка" при обратной ситуации), что в любом случае приводит к неприятному артефакту (дерганью) изображения, особенно хорошо заметному на сценах с плавным панорамированием и сценах с движением объектов ближнего плана относительно фоновых на дальнем плане.

Единственный способ качественной компенсации скорости воспроизведения видео - изменения скорости аудио, что сделать технически не так просто. Цифровое аудио состоит из семплов - отсчетов величины амплитуды сигнала, взятых с жестко заданным интервалом (частотой дискретизации), представленных в виде чисел. Как в случае видео, скорость воспроизведения аудио строго зависит от аппаратного декодера, частоту которого (скорость обработки семплов) не возможно изменить произвольным образом для плавной регулировки обшей скорости аудио. В результате, для ее изменения, аудио приходится подвергать дополнительной цифровой обработке - ресемплированию - вычислению новых величин значений семплов (в большем количестве, чем в оригинальном треке - для замедления, в меньшем - для ускорения, учитывая неизменность аппаратной частоты дискретизации) с помощью алгоритмов интерполяции исходных значений. Конечно, данная операция сказывается негативно на качестве аудио, но не настолько сильно, что бы приводить к заметным артефактам звука.

В MPC-HC проблему компенсации A-V рассинхрона решает Reclock, подключаемый в виде внешнего фильтра. В mpv - используется внутренний фильтр ресемплпрования аудио из пакета ffmpeg. Для использования данного режима служит опция --video-sync=display-resample, которая весьма успешно побеждает указанную проблему. Причем настолько успешно, что лучший результат достигается, как это не странно, на дефолтовой частоте телевизора в 60Гц, (режим дублирования кадров 232323...) то есть отпадает необходимость "играться" с частотой обновления экрана в зависимости от параметров видео, что приходилось делать под Windows, подстраиваясь под Reclock (сам по себе Reclock в штатном режиме мог компенсировать девиацию около 5%).

Данное (несколько неожиданное) поведение mpv скорее всего связано с особенностями аппаратной реализации "улучшайзера" плавности движения конкретной модели телевизора, которая успешно дополняет алгоритмы данного плеера. К слову сказать, подобная ситуация в точности повторяется при подключении аппаратного BD-плеера, который выдает картинку визуально лучшего качества (с точки зрения плавности и равномерности воспроизведения) на 60Гц, чем на 24, хотя по идеи, все должно быть наоборот.

Для обычных мониторов (без аппаратных фильтров сглаживания движения и устранения джудера) можно попытаться задействовать режим интерполяции промежуточных кадров, который не подходит для моего телевизора, по причине конфликта со встроенным интерполятором, который визуально обеспечивает лучшее сглаживание (я успел нему привыкнуть).

Резюмируя вышесказанное, могу с уверенность сказать - с точки зрения визуального качества воспроизведения, mpv дает результат, ни чем не уступающий MPC-HC, что дало повод для энтузиазма. Приблизительно три года назад я предпринимал несколько попыток найти удовлетворяющее меня альтернативное решение (в том числе на платформе Linux) не увенчавшиеся успехом, в результате я продолжал использование связки MPC-HC - Reclock (по принципу - от добра добра не ищут), как лучшее из возможных (на мой взгляд) решений для того времени. Как говориться, время не стоит на месте - все течет, все меняется, иногда - даже к лучшему, как это не странно.

***

На втором месте, после качества, стоит вопрос удобства использования программы. В данном плане mpv явно превосходит MPC-HC и с большим отрывом. Самой ценной для меня фитчей можно назвать тонкую подстройку отображения субтитров, позволяющая заменять параметры стилей, как полностью, так и частично, что позволяет в большинстве случаев (за исключением отдельных, весьма запущенных случаев) отказаться от полного конвертирования файлов субтитров с привлечением специализированного скрипта. Данная функция помогает сэкономить время в случае просмотра видео со встроенными в контейнер субтитров, избежав их извлечения.

К сожалению, тема культуры оформления любительских субтитров с применением скриптов субстейшен альфа формата, заслуживает отдельного обсуждения. Жестокая ирония заключается в том, что Уважаемые саберы проявляя чудеса прилежания и недюжинное упорство, достойное лучшего - конструктивного применения, тратят кучу собственного времени на засовывание кучи не просто сомнительных, а вредоносных эффектов (нескучные шрифты всех цветов радуги, двигающиеся надписи) в свои скрипты, делающих просмотр просто невозможным без лютой ненависти к излишне креативному творцу. В результате указанных вредительских действий, Ваш покорный слуга вынужден, в свою очередь тратить уже собственное время на безжалостную чистку испоганенного (изнасилованного!) скрипта от всех дурацких свистелок с перделками, по ходу проклиная на все лады создателей формата (жопой - хорошее не назовут), позволяющего заниматься такой фигней, вместо плодотворной работы. После возни с очередным "красивым до безобразия" дизайнерским поделием, начинаешь боготворить формат сабрип 'srt', обламывающий на корню неудержимый полет фантазии, очередного гениального оформителя.

В качестве вопиющих примеров вредительской деятельности саберов (не хочу применять обидное слово, в адрес людей, которые на голом энтузиазме занимаются переводами, как местных, так и англоязычных, но порой их образ виденья Идеального Саба, может вызывать неслабый когнитивный диссонанс, находящий проявление в необузданном бешенстве) могу привести саб, в котором цвет текста реплик персонажей соответствовал цвету их волос! Достаточно распространено заливание непрозрачным фоном участков кадра с надписями, на котором выводится текст их перевода, да еще в добавку с синхронным их перемещением по мере смещения кадра, в результате чего файл скрипта распухает в десяток раз, грозя приблизится к размеру видео. Когда логичнее (намного проще, эстетичнее и красивее!) вывести перевод надписи простой строкой в верху экрана и успокоится на этом.

Я промолчу про клоунские шрифты, самых невероятных размеров (или ни хрена не видно, или на пол-экрана - пожалейте мои бедные глаза) и самых разнообразных цветовых оттенков на которые невозможно смотреть без возникновения нервного тика! Или бешено скачущего караоке на опенингах и эндингах. Как будто кто-то (находясь в здравом, не помутненном рассудке) будет подпевать сам себе, смотря опенинг, который представляет собой урезанную девяносто секундную версию оригинальной композиции! Не понимаю: для чего тратить время на всю эту туфту? Интересующиеся переводом лирики OP-ED песен (за редким исключением, она являет собой бессмысленно-отвлеченный набор стандартных оборотов), могут удовлетворить свое любопытство на специализированных ресурсах. В результате складывается весьма стандартная ситуация: дизайн оформления - великолепный, но при этом тайминг безбожно болтается с интервалом в пару секунд, как экскременты в проруби! Ведь яркое, блестяще, переливающееся, цветастое караоке - это так круто! А тщательная подгонка тайминга - скучное и рутинное, на фиг ни кому не нужное занятие...

***

Второй по значимости фитчей для меня выступает поддержка плейлистов. В частности, весьма удобная функция одновременного запоминания позиции воспроизведения, как в файле, так и плейлисте, при завершении работы программы. Для продолжения воспроизведения достаточно запустить плеер с параметром имени файла плейлиста, для того что бы продолжить просмотр с точки выхода. Казалось бы - совершенно простая функция, но она повышает удобство программы в разы.

Третьей весьма полезной фитчей является возможность захвата кадров с детальной настройкой: формата, качества, места размещения и шаблона имени файла. Для создания галерей к своим заметкам мне требуется не столько сам кадр, сколько информация о тайминге сцены, к которой он принадлежит. Сам по себе захваченный кадр служит в качестве метки интересующей меня сцены и используется исключительно в целях навигации по видеоряду. В свою очередь, для включения в галерею я использую файлы, полученные покадровым декодированием (сохранением каждого кадра в отдельный файл) всей сцены целиком.

При использовании MPC-HC мне приходилось решать данную задачу буквально через глубокую задницу - путем установки паузы, затем переходом из полноэкранного режима в оконный - для включения информации со статус-бара плеера о полном пути к файлу и текущем таймингом в скриншот экрана, который создавался в буфере обмена. Для последующего сохранения скриншота в виде файла требовалась отдельная программа - менеджер буфера обмена, которая позволяла экспортировать захваченные скриншоты в отдельные файлы в автоматическом режиме. Такая сложность связана с именами файлов в структуре BD-диска. При захвате кадров штатными средствами, невозможно было различить одинаковые имена файлов относящиеся к разным дискам (при захвате кадра MPC-HC использует имя файла - но на разных дисках томов одного сериала имена одинаковые), что крайне не удобно и создает путаницу при изрядном количестве захваченных кадров, которое зачастую превышает сотню.

В mpv данная проблема решается простейшим скриптом:

#!/bin/bash
if [ $# -eq 0 ]; then
  mpv
else
  # автоматически создает директорию 'mpv_pic' в $HOME (если она не существует)
  # в которой, в свою очередь, создает одноименную директорию той, где находится
  # воспроизводимый файл
  SSDIR=$HOME/mpv_pic/$(basename "$(dirname "$(readlink -f "${@: -1}")")")
  mpv --screenshot-directory="$SSDIR" "$@"
fi

Последний аргумент, передаваемый скрипту - имя файла плейлиста, находящегося в директории, содержащей файлы сериала. В свою очередь, имя данной директории будет использовано для создания одноименной директории в которую будут помещаться файлы скриншотов. Для возможности различить кадры, захваченные из одноименных файлов (из разных директорий) в имя скриншота добавляется номер позиции файла в плейлисте: screenshot-template="%tY%tm%td%tH%tM-%{playlist-pos}-%F-%wH-%wM-%wS.%wT", который однозначно идентифицирует проигрываемый файл. В результате применения указанного выше паттерна, на выходе получится имя файла: 201512162226-0-01-00-01-41.351.jpg. Его можно "расшифровать": кадр захвачен 16 декабря 2015 в 22:26, из первого файла плейлиста (-0- нумерация ведется с нуля) с именем "01" (-01-), имеет тайминг: 00h 01m 41.351s

***

Четвертой фитчей можно назвать удобное конфигурирование. Параметры прописываются в традиционном текстовом файле. Кроме того имеется одна, весьма полезная особенность, - поддержка профайлов (которые прописываются, как разделы конфигурационного файла) для оперативного применения индивидуальных настроек для разных режимов работы, что создает дополнительное удобство при воспроизведении различных форматов.

Мой конфигурационный файл:

vo=opengl:scaler-resizes-only=yes:dither-depth=auto:deband=yes:deband-iterations=4:deband-grain=32
hwdec=no                          # софтвенное декодирование - более качественное, но не для слишком слабых процессоров
                                  # в моем i7-4930K (6 ядер) при декодировании High, level 41 загрузка ~ 4-5% * 12 потоков
                                  # так уж сложилось, что сервер компиляции пришлось использовать в качестве плеера :-)
framedrop=vo
video-sync=display-resample       # режим синхронизации дисплея 
video-sync-max-audio-change=0.1
video-sync-max-video-change=3
cache-default=2048000             # явный оверхед, но для системы с RAM 32G не жалко :-)
demuxer-lavf-analyzeduration=160  # для потоков с большим количеством языковых аудио-дорог и сабов ffmpeg ругается
demuxer-lavf-probesize=380000000
# audio ao=alsa softvol=no af=format=s32 audio-channels=stereo audio-pitch-correction=no
save-position-on-quit=yes # при выходе всегда запоминать позицию проигрывания fullscreen=yes # стартовать в полноэкранном режиме osd-font=Arial # оформление - на любителя osd-font-size=21 osd-color="#FFFF00" osd-border-color="#000000" osd-bold=no osd-border-size=2 osd-shadow-offset=1 osd-duration=8000 # время показа OSD сообщений osc=no # отключить псевдо GUI - я не использую для управления его возможности
screenshot-format=jpg screenshot-template="%tY%tm%td%tH%tM-%{playlist-pos}-%F-%wH-%wM-%wS.%wT" screenshot-directory=~/mpv_pic
sub-paths=subs:sub # относительные пути директорий субтитров
# substation alpha [subz] sub-pos=85 # люблю, когда сабы расположены чуть выше обычного, ~ на 1/5 высоты экрана ass-force-style=FontName=Arial,Fontsize=38,PrimaryColour=&H0000FFFF,SecondaryColour=&H00000000,OutlineColour=&H00000000,BackColour=&H00000000,Bold=1,Italic=0,ScaleX=1,ScaleY=1.3,Spacing=3,BorderStyle=1,Outline=4,Shadow=3,PlayResX=1920,PlayResY=1080,ScaledBorderAndShadow=yes,Collisions=Normal
[srt] sub-pos=85 sub-text-font=Arial sub-text-font-size=37 sub-text-border-color="#000000" sub-text-color="#FFFF00" sub-text-spacing=3 sub-text-border-size=3 sub-text-shadow-color="#000000" sub-text-shadow-offset=3

И в завершении, совсем коротенький input.conf, отвечающий за биндинг клавиш и их сочетаний:

y   show_text "${playlist}"       # отобразить плейлист в виде текстового списка, при листе, превышающим ~30 позиций
                                  # хвост "уходит" за нижний край экрана при моем размере шрифта OSD :-(
                                  # для более интеллектуального отображения надо писать скрипт на lua, да некогда разбираться
Y   show_text "${chapter-list}"   # чаптеры

Для отображения технической информации о параметрах воспроизведения удобно использовать этот скрипт.

***

Пятой фитчей можно считать - хорошую документацию. Все опции достаточно детально расписаны, для некоторых не очевидных - приведены примеры использования.

Шестая фитча - отсутствие GUI. По крайней мере для меня, GUI в программах-плеерах больше мешает, являя собой эталон абсолютно не нужной сущности, нежели помогает в работе с программой. Ведь в ста процентах времени использования плеера я смотрю видео на полном экране - не вижу GUI по определению.

Для чего может потребоваться использование графического интерфейса - ума не приложу. Для управления воспроизведением? Навряд ли. Все управление весьма удобно осуществляется при помощи легко настраиваемых клавиш, точно по тому же принципу, как это делается в MPC-HC. Для информации о файле и параметрах воспроизведения, служит не менее хорошо настраиваемый OSD. Для настроек? Смотрите пункт про четвертое достоинство. Для редактирования плейлиста? Но он, обычно, составляется автоматически с использованием консольной команды find и при острой на то необходимости редактируется любым текстовым редактором. Так зачем его изменять средствами плеера? Бред какой-то. Я понимаю некоторую полезность такой возможности в аудио плеере, но в случае с видео, плейлисты всегда статичны и воспроизводятся в строгом порядке следования эпизодов сериала. Если только вы не любитель смотреть серии в случайном порядке.

***

Обсуждать тонкости использования mpv можно еще долго, но, пожалуй, пришла пора закругляться, дабы не перегрузить заметку излишней информацией. Не получилось у меня короткого обзора основных особенностей, их слишком много. Последнее, что хочу добавить к своему обзору, пару слов про старичка MPC-HC в контексте сабжа. В свое время, ковыряясь с ним я убил в разы больше времнени на достижение того результата, который на удивление оказался доступным "из коробки" в mpv, без каких-либо лишних телодвижений, тем более без "плясок с бубнами", которые приходилось довольно часто устраивать (в особенности по началу) при попытках наладить достойную работу MPC-HC в составе моего простенького "домашнего кинотеатра".

Возможно, разработчики mpv сами в какой-то момент прошли через подобные проблемы, в результате чего они решили предотвратить их возникновение у пользователей своей программы. В результате вышел плеер, действительно предназначенный для людей, а не, как нынче принято - модное, стильное, молодежное - хипсторское нечто - обвешанное сияющей мишурой интерфейса, написанного на одной из последних версий трендового фреймворка, преманентно не до пиленое, перегруженное всякими ненужностями в ущерб реально востребованному функционалу, да еще жрущее, регулярно падающее и глючащее.

Другой его немаловажной заслугой стала констатация факта принципиальной ненужность Win* систем для удобного и качественного просмотра видео, чего не достигалось простым способом на Linux до его появления, несмотря на доступность множества разнообразных плееров, которые разрабатывались весьма продолжительное время. Я с полной ответственностью всем рекомендую mpv для просмотра видео, используйте - не пожалеете.

Еще нет комментариев к «Просмотр видео на компьютере, часть III»

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Captcha Обновить картинку Каптчи

Пожалуйста, введите символы,
показанные внутри треугольников