mpv player — а как смотреть кино


Для просмотра фильмов на компьютере у каждого пользователя есть свой любимый player:

  • тот к которому он привык;
  • тот который он настроил под себя любимого;
  • player, который не подведет.

И вопрос «а как смотреть кино» для него давно уже закрыт.
Но прогресс не стоит на месте, появляется новый софт, новые подходы к обработке изображений, старые библиотеки получают обновления. Поэтому предлагаю взглянуть на один opensource проект, который получил широкое распространение в узких кругах:-)

Встречайте, mpv media player.

История

История mpv player начинается с 2012 года, когда группа энтузиастов решила делать свой вариант проигрывателя медиафайлов. Но начали делать не с нуля, а «форкнули» великий и могучий MPlayer, который на тот момент был стандартом «de facto» для просмотра видюшек в мире бесплатного софта. Иными словами взяли исходные коды MPlayer и на основе их начали строить свое приложение. В мире открытого софта это обычная практика и ничего зазорного в этом нет. Главное соблюсти все формальности с лицензионными соглашениями.

Mpv активно развивается. Следующая команда показывает нам, что за 2 неполных месяца с начала года было сделано 248 commit’ов, что косвенно указывает на активную разработку. Самая свежая стабильная версия датируется 14/02/2018.

git clone https://github.com/mpv-player/mpv.git
git log --since="2018-01-01" | egrep "Author:" | wc -l

MPlayer уже давно не выпускал обновлений (последняя стабильная версия датируется 16/02/2016). В девелоперской ветке идут какие-то движения, но не так активно, как хотелось бы:

svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
svn log --limit 100 | egrep 2018 | wc -l
8 commit'ов

всего лишь 8 commit’ов.

Преимущества

Основным преимуществом mpv для меня являются:

  • поддержка всевозможных видеоформатов (все кодеки берутся из FFmpeg);
  • нет необходимости устанавливать приложение (скачал файл и сразу пользуйся);
  • поддержка видеоускорителей;
  • работа с Vaporsynth ( об этом позже);
  • поддержка Linux и Windows;
  • поддержка пользовательских скриптов (интерфейс, видеофильтры, статистика);

Ну и как бонус, внушающий доверия и придающий весомости и серьезности всему проекту это библиотеки. Mpv по сути является framework’ом поэтому пользователю предоставляется не только возможность скачать player и смотреть фильмы, но и воспользовавшись библиотеками написать свой media player (кстати, многие так и поступили). а потом продать его.

Установка

Установка MPV ничем не отличается от установки других медиаплейеров. Можно устанавливать готовые пакеты (Linux, Windows), а можно и собрать из исходников.

Готовые пакеты

Ubuntu

Установка в Ubuntu не вызывает никаких вопросов. Последовательность действий стандартная: добавили репо, проапдейтили, установили пакет.

sudo add-apt-repository ppa:mc3man/mpv-tests
sudo apt-get update
sudo apt-get install mpv

CentOS

Те же действия и в CentOS:

yum -y install http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum update
yum install vlc smplayer ffmpeg mpv

Windows

MPV под Windows распространяется в виде исполняемого файла и нескольких вспомогательных библиотек. Установщика как такового нет. Ничего инсталлировать не нужно. Скачиваем необходимую сборку с этой страницы: https://mpv.srsfckn.biz/. И сразу же можно смотреть кино:

Просто запустите mpv.exe и в появившееся окно перетащите мышкой файл с фильмом.

Android

Mpv имеет свой порт под Android. Скачать приложение можно с Play Market:

https://play.google.com/store/apps/details?id=is.xyz.mpv&hl=ru

Сборка из исходников

Тут самое интересное 🙂 MPV зависит от нескольких пакетов, например FFmpeg и libass. Прежде чем собрать MPV придется сначала собрать и установить в системе зависимости. А потом зависимости зависимостей и так далее. Это же Linux 🙂 Чтобы не возиться с этим можно скачать из сети сборочный скрипт, который сам все это сделает (ну почти все).

Но до скрипта, необходимо установить NVidia драйверы и SDK. Это только в том случае если вы хотите просматривать фильмы с использованием gpu.

Качаем самый свежий SDK для вашей платформы:

https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64

И затем запускаем инсталлятор, который все сделает сам:

cuda_9.1.85_387.26_linux.run

Качаем скрипт с github, о котором я говорил выше и который поможет нам со сборкой mpv из исходников:

git clone https://github.com/mpv-player/mpv-build.git

Скрипт сам «подтянет» необходимые зависимости, но что-то придется установить самостоятельно:

sudo apt-get install autoconf automake libfribidi-dev libasound2-dev libegl1-mesa-dev libfontconfig-dev libfreetype6-dev libfribidi-dev libgl1-mesa-dev libtool libx11-dev libxext-dev libxinerama-dev libxrandr-dev libxv-dev pkg-config python x11proto-core-dev nasm yasm libxss-dev

Переходим в папку mpv-build

cd mpv-build

И запускаем процесс сборки на 4-х ядрах:

./rebuild -j4

Во время сборки скрипт выкачивает самые свежие версии библиотек, собирает их, а затем статически (что значит «статически» можно прочитать здесь) собирает mpv используя эти библиотеки.

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

Результатом работы скрипта будет один файл: mpv. Находится он здесь:

cd mpv/build

Размер файла внушительный, потому что все кодеки были «влинкованы» в player:

25868848 Feb 15 11:19 mpv/build/mpv
nvidia-smi dmon

Просмотр фильма

Теперь самое интересное — а как смотреть кино?

Использование CPU

Для просмотра фильма с помощью mpv в командной строке достаточно набрать:

mpv имя_файла.mp4

Но я рекомендую записывать log файл, чтобы в случае проблем можно было найти причину ошибки:

./mpv ~/sample4kvideo.mp4 --log-file mpv.log

Если запускать mpv с настройками по умолчанию (без использования дополнительных ключей), то раскодированием видеопотока будет заниматься процессор. Если процессор маломощный то он может не справиться с decoding’ом и движение в кадре будет дерганным, появятся дропы «drops». Не справляясь с нахлынувшей на него информацией процессор начнет пропускать кадры. Например, в следующем примере видно, как Intel i-7 не может обработать все кадры 4k video и начал «drop»-ать. Вот, например, вывод команды mpv в консольке:

$ ./mpv  ~/sample4kvideo.mp4 --log-file mpv.log
[osd/libass] can't find selected font provider

AV: 00:00:24 / 00:01:47 (23%) A-V:  0.421 Dropped: 8

Audio/Video desynchronisation detected! Possible reasons include too slow
hardware, temporary CPU spikes, broken drivers, and broken files. Audio
position will not match to the video (see A-V status field).

AV: 00:00:33 / 00:01:47 (31%) A-V:  0.403 Dropped: 22

Audio/Video desynchronisation detected! Possible reasons include too slow
hardware, temporary CPU spikes, broken drivers, and broken files. Audio
position will not match to the video (see A-V status field).

AV: 00:00:34 / 00:01:47 (31%) A-V:  0.573 Dropped: 28

Записанный log файл показывает, что для раскодирования фидео был выбран центоальный CPU и строка «Using software decoding» прямо указывает на это:

[   0.149][v][vd] Using software decoding.
[   0.149][v][vd] Detected 8 logical cores.
[   0.149][v][vd] Requesting 9 threads for decoding.
[   0.151][v][vd] Selected codec: h264 (H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10)

Использование GPU

Mpv позволяет задействовать мощности графического ускорителя для просмотра фильма. Всю работу по раскодированию видео потока берет на себя графическое ядро. На системах со слабым центральным процессором (CPU) помощь gpu может оказаться существенной, особенно при просмотре 4K видео. Фактически можно избавиться от «drop»-ов, как в случае с использованием CPU.

В mpv за поддержку gpu отвечает ключ «hwdec». При «—hwdec=auto» mpv сам найдет оптимальный способ запуска на графическом ускорителе:

./mpv --hwdec=auto --vo=opengl ~/sample4kvideo.mp4 --log-file mpv.log

В output никаких «drop»-ов. А в логе строчка » Using hardware decoding (nvdec)» явно указывает на то, что мы задействовали нашу видеокарту дле раскодирования видеопотока:

[   0.287][i][vd] Using hardware decoding (nvdec).
[   0.287][v][vd] Decoder format: 3840x2160 cuda[nv12] bt.709/bt.709/bt.1886/limited/auto CL=mpeg2/4/h264 (auto 0.000000/0.000000/0.000000)
[   0.287][v][vf] [in] 3840x2160 cuda[nv12] bt.709/bt.709/bt.1886/limited/display SP=1.000000 CL=mpeg2/4/h264

Помимо просмотра лог файла есть еще один способ, что был задействован gpu. Для этого во время просмотра фильма запустите «nvidia-smi» с ключиком dmon. В колонке «dec» будет указан % нагрузки на gpu при раскодировании video:

GUI для mpv

На базе библиотеки mpv построено ряд media player’ов с привычной графичской оболочкой. Так что если вас не прельщает запуск player’а из консоли с кучей параметров, то есть привычный метод с GUI (окошечки, кменюшечки и кнопочки) 🙂

Baka

Простенький player  с минимальным набором регулируемых опций. Подойдет начинающим пользователям. Инсталляционные пакеты для Linux и Windows можно найти здесь:
http://bakamplayer.u8sand.net/installation.php

gnome-mpv

Такой же лаконичный, как и предыдущий. Минимум настроек. Зато входит в стандартный репозитарий Ubuntu.

sudo apt-get update
sudo apt-get install gnome-mpv

SMPlayer

По сравнению с предыдущими плеерами на базе библиотеки mpv этот просто монстр. Позволяет настраивать, как внешний (шкурки), так и продвинутые опции видеодекодера. Есть сборки для Linux и Windows:

https://www.smplayer.info/en/downloads

Выводы

В этой статье мы познакомились с mpv player’ом — бесплатной программой для проигрывания видео и аудио контента. Рассмотрели способы установки под Linux и Windows. Собрали mpv player из исходников. Рассмотрели способ просмотра видео с помощью графического ускорителя.

Что не вошло в этот обзор:

  • использование скриптов для настройки интерфейса и свойств видеодекодера;
  • настройка продвинутых параметров mpv для графического ускорителя;
  • расширенные опции при сборке из исходников;
  • связка с Vaporsynth.