MPlayer - программа для проигрывания видео файлов. Он был написан для Linux, но в общем может работать на большинстве OC семейства UNIX, и даже на других архитектурах таких как OSX, QNX и (более или менее) на Windows (!).
Хотя эта программа предназначена для обычных пользователей, она не столь дружелюбна по отношению к ним, как того хотелось бы. Некоторое время назад, я даже предлагал новичкам (переходящим с Windows) использовать xine вместо элегантной командной строки MPlayer.
Но все в этом мире развивается, не стал исключением и Mplayer. Так, недавно вышедший Mplayer 0.90 RC наделен очень красивым, удобным, поддерживающим скины графическим интерфейсом с типичной для графического интерфейса функциональностью и некоторыми пока не задокументированными сюрпризами и пасхальными яйцами. В качестве примера можно привести новейшие возможности полосы прокрутки. А стоит вам переместить мышь в нижнюю среднюю часть экрана (в полноэкранном режиме), и вы увидите вращающуюся мини-панель, которая позволит вам управлять воспроизведением. (Примечание: к сожалению, в настоящее время это возможно только со скином, заданным по умолчанию).
Даже скептикам придется признать, что работать с MPlayer стало проще, но настройка "окружающей среды" (драйверов, ОС и т.д) для MPlayer иногда не является тривиальной задачей. В этой короткой статье я попробовал описать основные этапы установки и конфигурирования MPlayer в Linux для получения наилучшего соотношения качества/производительности. Попрошу обратить внимание, что всё, что здесь написано, имеется в гораздо более подробной форме в документации Mplayer.
Немного о драйверах звуковой карты.
Вам, наверное, интересно, почему я начал именно с этого. Дело в том, что именно драйвера звуковой карты являются основной причиной проблем с производительностью. Причем - причиной не очевидной. Главное - учесть, что проигрывание только звука (например, mp3), это не проигрывание видеофайла, так как в случае проигрывания видеофайла проигрывателю приходится синхронизировать звук с видеорядом. При этом возникают задержки в аудио потоке. Так как все звуковые карты/драйвера имеют буферизацию, задержка должна компенсироваться. Так, что при первом рассмотрении это не кажется большой проблемой. И ALSA и OSS имеют функцию проверки состояния буфера, и текущей звуковой задержки. К сожалению, многие звуковые драйвера (в основном это OSS, включенные в ядро) не делают этого (кажется, что авторы драйверов реализуют только то, что нужно для проигрывания mp3) или, что хуже - производят проверку, но при этом допускают ошибки, сообщая неправильные значения. Я даже где-то слышал, что некоторые драйвера рушат ядро при запросе задержки.
Именно поэтому я, к сожалению, должен отвести драйверам звуковых карт первое место в рейтинге проблем при воспроизведении видео в Linux. Так как эта проблема связана с системой в целом, то она проявляется не только в Mplayer, но и в большинстве других проигрывателей и даже в играх (!). Возможно, Mplayer более чувствителен к этой проблеме, так как он синхронизирует со звуком всё, поэтому плохие драйвера могут стать причиной воспроизведения рывками, зависания и даже падения системы. Воспроизведение рывками (вызванное неверными сообщениями о задержках буфера в драйвере) может быть устранена с помощью новой функции Mplayer - "-autosync", но всё же с очень плохими драйверами придется разбираться непосредственно. Я настоятельно рекомендую использовать ALSA 0.9. Они намного надежнее, чем включенные в ядро OSS - даже в случае, когда они эмулируют OSS. Если ваша звуковая карта не поддерживается ALSA, попробуйте коммерческие драйверы от 4Front Technologies. Придется заплатить несколько долларов, но они того стоят. Они выполняют OSS правильно в целом и предоставляют контроль буфера и времени задержки поверх свободных драйверов.
Видеокарта
Самые современные графические платы (произведенные за прошедшие несколько лет) имеют поддержку аппаратного масштабирования и прямую поддержку YUV colorsapace. Вы должны обратить внимание на эти характеристики, если вы хотите получить высококачественное (идеальное, с сглаживанием цветов) и быстрое (аппаратное ускорение) полноэкранное воспроизведение. Обратите внимание - недостаточно, чтобы ваша видеокарта аппаратно поддерживала всё это. Чтобы всё работало, необходим быстрый драйвер для Linux, поддерживающий её возможности. Последнее - наиболее важно, только несколько видео карт имеют хорошую поддержку и только несколько видео карт имеют хотя и несовершенные, но по крайней мере - стабильные и работающие драйвера. Для видеокарт от Maxtor и ATI вы можите использовать драйвера VIDIX. Для остальных - остается надеяться, что карта поддерживается XFree 4.x и драйвер поддерживает расширения Xvideo (для проверки запустите "xvinfo"). Насколько нам известно, у чипов S3 Savage, Trident, и Neomagic имеются серьезные проблемы с Xv, в то же время как некоторые другие (такие как nVida и 3dfx) в основном работают нормально, и только иногда могут возникнуть маленькие проблемы и ограничения. Выбор видео режима в MPlayer осуществляется с помощью параметра -vo (для более детальной информации по конкретным драйверам загляните в справочную систему). Попробуйте каждый видеорежим, чтобы найти лучшее соотношение качества и скорости.
Скорость процессора.
Ваш процессор достаточно быстр для воспроизведения DivX ? Это зависит от поддержки операционной системой видеокарты. Почему ? Давайте рассмотрим два случая. Для тестирования у меня имеется PII 250MHz , с видеокартой Matrox G200 AGP, и на нем я могу просматривать DVD в полноэкранном режиме (даже DivX файл размером 720х576). У моего друга 1GHz PIII с S3 Trio3D. Он не может проиграть DVD в полноэкранном режиме, так как у его видеокарты нету "родительских" драйверов, и даже нет поддержки Xv, и DGA не функционирует. Работает только чистый X11.
Он вынужден использовать программное масштабирование, а это означает, что приходится передавать большее количество данных по медленной шине AGP и большую загруженность для процессора. Благодаря лучшим драйверам видеокарты для Windows, он может смотреть DVD под Windows с загрузкой процессора меньшей, чем 50 процентов.
Итак, если у вас имеется достаточно хорошая видеокарта, с достаточно хорошей поддержкой Linux, подойдет любой процессор с частотой по крайней мере 250-300 МГц и выше. Однако, вы можите просматривать маленькие (512х384) DivX файлы даже на P1 166 c MMX! Единственный случай, когда имеет значение мощность процессора, это когда вы используете фильтры (-vop) - такие, как postprocess, deinterlace, blur/sharpen, denoise, и т.д. Они могут съесть большее количество мощности процессора для того, чтобы обработать изображение.
Direct Rendering
"Воспроизведение напрямую" (не путать с DRI в XFree 4.x (!))
Воспроизведение напрямую (Direct rendering, DR) означает обращение к памяти видео карты напрямую, минуя все "бесполезные прослойки" - XFree и/или драйвера. Итак, какие выгоды сулит DR? При воспроизведении напрямую кодек не будет создавать буфер в памяти компьютера, а будет декодировать изображения непосредственно в память видео карты (hard DR) или передавать драйверу (soft DR). Обход пути "RAM-to-RAM" не может дать слишком большое улучшение производительности. Память и так достаточно быстра, чтобы использовать только несколько процентов мощности процессора. Реальное преимущество заключается в том, что от кадра к кадру меняется не целое изображение, а только его часть. В среднем меняется только 20-40% (за исключением случаев, когда изображение трясется или зумируется). Это означает, что придется передавать только 20-40% изображения на медленную видео память и такую же медленную PCI/AGP шину. И это даёт огромное увеличение производительности на медленных системах (таких, как старый AMD K6). Вы можете активировать DR с помощью параметра -dr при запуске MPlayer (по умолчанию DR отключен). Обратите внимание, что даже если вы активируете DR, он может не работать, поскольку требуется ряд условий (кодек, фильтры, и поддержка видеодрайвером) для его работы. Чтобы увидеть, работает ли DR, запустите MPlayer с параметром -v.
Учтите следующие недостатки воспроизведения напрямую:
-
Требуется поддержка "hard DR" драйвером видеокарты (VIDIX, mga_vid, DGA, VESA, или fbdev)).
-
DR не работает в случае двойной буферизации.
-
DR иногда не работает при воспроизведении с субтитрами.
Smooth playback (Сглаживание)
По умолчанию параметры аудио-видео синхронизации MPlayer`а не подстраиваются под конкретный видео файл. Параметры аудио-видео синхронизации настроены на работу с большинством (не очень качественным большинством) файлов. Если же у вас есть высококачественный видеофайл, вы можите захотеть ограничить корректировку аудио-видео синхронизации для того, чтобы получить возможность гладкого воспроизведения. Наиболее важный параметр для работы с аудио-видео синхронизацией - это "-mc" ("mc" расшифровывается как "max A-V корректировка за кадр", и по умолчанию параметр имеет значение 0,01). В случае хорошего видеофайла, вы можете уменьшить его даже до 0,0001, но в большинстве случаев достаточно значения 0,001. Обратите внимание, что уменьшение этого параметра делает воспроизведение более гладким, но замедляет реакцию в случае рассинхронизации изображения (поломок/пропущенных кадров и т.д.)
Если уделять синхронизации столько внимания, то нужно позаботиться и о видео таймерах. Нужно убедиться, что используется аппаратный таймер RTC (часы реального времени) (проверьте сообщения MPlayer). И обратите внимание, что для использования RTC в старых ядрах требуются права "root". С 2.4.19pre8 вы можете позволить использовать RTC и обычным пользователям:
echo 1024 > /proc/sys/dev/rtc/max-user-freq
(Обратите, внимание, что это должно быть разрешено при конфигурации ядра)
Если у вас не совершенная звуковая карта/драйвер (хотя я еще пока не видел идеальной :), вы должны так же немного "сгладить" звуковой таймер. Для начала попробуйте "-autosync 30". Большее значение означает большее количество сглаживания, постарайтесь не использовать слишком высокие значения, поскольку это приведет к рассинхронизации изображения и звука.
Фильтры
Если источник видео несовершенен (с шумом, артефактами, и т.д), а ваш центральный процессор не до конца загружен, попробуйте фильтры MPlayer.
В случае эффекта "переплетания" (interlaced video - когда в случае быстрого перемещения изображения на экране каждая вторая строка изображения перемещается, создавая эффект гребенки), вы должны попробовать параметр "-vop pp=0x20000". Если это не поможет, попробуйте 0x10000, 0x40000, и 0x80000. Для плохо преобразованного NTSC фильма попробуйте "-vop dint" или "vop pp=fd:c" или "-vop lavcdeint". Если у вас не достаточно процессорноой мощности (а фильтр против "переплетения" - очень ресурсоёмок), попробуйте один из "дешевых" фильтров: "-vop halfpack" или "-vop field".
В случае появления "квадратиков (block)" (наиболее часто это происходит с DivX/WMV с низким битрейтом и с низкокачественным (S) VCD) попробуйте использовать фильтры против них и (опционально) "deringing-фильтр". Только для избавления от "квадратиков" используйте "-vop pp=0x33", для избавления от "квадратиков"+dering попробуйте "-vop pp=0x77". Стоит отметить, что вы можете комбинировать параметры против "квадратиков" и против "переплетания" ("-vop pp = 0x20077", может быть полезным для SVCDS) и получать эффект обоих фильтров в одно и тоже время. Если вам не нравится двоичный код, Вы можете использовать более "человеческие" параметры для -vop pp. Чтобы узнать больше, смотрите "mplayer -pphelp".
В случае шума (даже некоторые старые DVD диски содержат много шума), попробуйте использовать "-vop denoise3d". Параметры фильтра по умолчанию (4:3:6) - не самые лучшие для конкретного видеофайла. Вероятно, вы захотите увеличить/уменьшить пространственный коэффициент и величину искажения в зависимости от уровня шума. Первый параметр - пространственный коэффициент (luma spatial coefficient) и чем он выше, тем изображение более гладкое, но расплывчатое. (Можно сравнить его с фильтром smartblur). Второй параметр влияет на цвет. Я рекомендую использовать половину коэффициента для цветности для MPEG видео. Последний вид фильтрации - это временная. Она наиболее эффективна в случае "шумного" видеофайла без размывания/сглаживания картинки, но вызывает много побочных эффектов - быстрые движения происходят рывками, и в некоторых случаях появляется эффект границы возле движущегося предмета. Если у вас достаточно мощности процессора, попробуйте "-vop hqdn3d" - наиболее точный из фильтров (Он доступен только в "основной" CVS версии).
Относительно программного масштабирования: даже если ваша видеокарта и её драйвер поддерживают аппаратное масштабирование, вы можете захотеть попробовать программное масштабирование (SwScale) для получения лучшего качества картинки (за это придется расплачиваться большей нагрузкой на процессор). Стоит обратить внимание, что программное масштабирование тоже производит фильтрацию (размытие/фокусировка, изменение цвета). Для масштабирования используйте параметр -ssf. С его помощью можно выбрать несколько методов масштабирования: от nearest-neighbor (появляются пиксели) до bicubic spline (очень милого).
Итог:
MPlayer - очень масштабируемый проигрыватель. Его можно использовать, уже начиная с low-end систем на базе P1 и кончая самым мощным современным процессором. Он позволяет выжать из вашей машины все возможное, только потребуется уделить время чтению документации и экспериментам.