- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF144:codecs
Материал из Linuxformat.
- Linux как медиа-станция Cоздаем мощную универсальную среду – пусть всезаиграет
Медиа-станция Linux: Для всего!
- Что делать, если после «установки кодеков» все равно создается впечатление, что «чего-то не хватает»? Александр Толстой расскажет и покажет.
Linux как платформа для работы с мультимедиа уже давно выглядит более чем достойно, но так сложилось, что на форумах до сих пор с завидной регулярностью всплывают вопросы, которые, казалось бы, уже были решены. Суть проблемы обычно сводится к тому, что файл в определенном формате невозможно воcпроизвести, либо нужно конвертировать его в другой формат. При этом имеющиеся советы решают «точечные», единичные вопросы, в то время как глобально проблема остается.
В этой статье я постараюсь рассказать, как сделать из Linux-машины мощную универсальную среду для проигрывания всего и вся, не превращая ее в домашний медиа-сервер. Наша цель – не задумываться о том, будет ли правильно играть видеоролик, даже если он закодирован в редком проприетарном формате. Дополнительно мы затронем вопросы конвертации файлов в другие форматы и выбора проигрывателя, а также некоторые вопросы настройки системы.
Как все устроено
Прежде чем мы перейдем к способам воспроизведения наших файлов, нужно убедиться, что они в принципе поддерживаются в системе. В Linux по умолчанию обычно поставляются свободные кодеки для аудио и видео, такие как Vorbis и Theora для контейнера Ogg. В реальной жизни это создает ряд неудобств, так как закодированного таким образом контента мало, а большинство фильмов и музыки распространяются в проприетарных форматах. Каких именно? Вот несколько популярных форматов:
- MPEG4 (стандарт сжатия цифрового аудио и видео).
- Windows Media (*.wmv для видео и *.wma для звука, продвигается Microsoft).
- Quicktime (формат, продвигаемый Apple).
- H264 (высококачественный проприетарный формат, использующий сильное сжатие).
Тут логично спросить: как соотносится расширение файла с форматом кодирования? Чтобы разложить разрозненные догадки по полочкам, необходимо понять разницу между кодеком и контейнером. Это в основном относится к видеоданным. Итак, контейнер – это стандарт распространения медиа-файлов, имеющий известные спецификации и допускающий использование различных кодеков для сжатия видео- и аудиоданных. Кодек – это сам алгоритм сжатия. Поскольку в видеофайлах аудио и видео представлены двумя отдельными потоками, каждый из которых может быть закодирован произвольным кодеком, то комбинаций из этих кодеков может быть очень много. Забегая вперед, отметим, что по этой причине нередки случаи, когда фильм играет без звука (либо, наоборот, звук есть, а картинки нет). В ряде случаев расширение файлов указывает на контейнер (чаще для фильмов), но иногда и на сам кодек, напрямую (чаще для музыки). Соответственно, полезно знать основные контейнеры:
- AVI
- Advanced Systems Format (*.asf, *.wmv, *.wma)
- Matroska (*.mkv, *.mka)
- Flash Video (*.flv)
- Контейнеры, представленные организацией MPEG (*.mp4, *.vob, *.mpeg и другие)
- Quicktime (*.mov)
Однако в Linux по большому счету все равно, какой контейнер используется, так как система «зрит в корень» и интересуется именно кодеками, которые используются в самом контейнере. Кодеков много, и перечислять все нет особого смысла, тем более что в окружающей действительности используются лишь некоторые из них – приведем наиболее популярные.
Видео:
- DivX (основан на стандарте MPEG-4)
- x264 (реализация стандарта H.264)
- Кодеки проекта FFMpeg (MPEG-1, MPEG-2, MPEG-4, MJPEG, WMV2, H.264 и др.)
Аудио:
- MP3 (третий слой кодирования в MPEG)
- AAC (ISO/IEC 13818-7)
- WAV (несжатый звук)
Поддержка кодеков в Linux
Как уже было сказано, в стандартную поставку Linux по лицензионным соображениям входят лишь открытые кодеки, такие как Ogg Vorbis. Однако в нашей стране (и не только) можно совершенно легально доустановить проприетарные кодеки для личного использования. Исторически в Linux имеется несколько проектов, обеспечивающих воспроизведение тех или иных мультимедиа-форматов. Их называют «движками», либо бэкендами [back-end], либо просто библиотеками. Данные движки всегда сопровождаются плейером-фронтендом [front-end], но в целом система взаимодействия очень прозрачная: различные программы-плейеры могут использовать разные движки, а те, в свою очередь, могут дублировать функции друг друга. Чтобы навести порядок в этом «зоопарке», выделим основных игроков:
XINE
Это проект медиа-плейера, созданного вокруг библиотеки xine-lib. Xine использует библиотеки из других проектов (liba52, libmpeg2, FFmpeg, libmad, FAAD2 для файлов и libdvdcss для DVD).
Форматы-контейнеры 3gp, AVI, ASF, FLV, Matroska, MOV (QuickTime), MP4, NUT, Ogg, OGM, RealMedia
Видео-форматы и кодеки 3ivx, Cinepak, DivX, DV, H.263, H.264, HuffYUV, Indeo, MJPEG, MPEG-1, MPEG-2, MPEG-4, RealVideo, Sorenson, Theora, WMV, XviD
Аудио-форматы и кодеки AAC, AC3, ALAC, AMR, FLAC, MP3, RealAudio, Shorten, Speex, Vorbis, WMA
Среди плейеров, поддерживающих этот движок, имеются популярные Amarok, Kaffeine и gXine.
GSTREAMER
Это не только библиотека, но и каркас для перенаправления мультимедиа. К основе GStreamer прикрепляются кодеки, которые и обеспечивают реальную поддержку форматов. Существуют следующие группы кодеков для GStreamer:
gstreamer-ffmpeg Позволяет проигрывать контейнеры и форматы MPEG-1, MPEG-2, MPEG-4, H.261, H.263, H.264, RealVideo, MP3, WMV, FLV.
gstreamer-plugins-good Базовые операции с видео и звуком, поддержка ASCII-преобразования, цветокоррекции, деинтерлейсинга, разделения контейнера AVI; парсинг формата AAC/AC3, данных с DV-устройств и прочее.
gstreamer-plugins-ugly Кодеки, имеющие юридические ограничения на распространение, такие как Microsoft ASF (включая WMA и WMV), MP3 (декодирование с помощью библиотеки libmad, кодирование – через lame), формат Audio CD, видео MPEG-2, аудио всех 3 слоев MPEG-1, RealMedia, x264 и другие.
gstreamer-plugins-bad Кодеки, реализация которых не отличается высоким качеством, полнотой поддержки формата и удовлетворением прочим «профессиональным» требованиям. К таким кодекам относятся: AIFF, AMR, xVID (свободная реализация DivX), видео в формате IEEE1394, вывод видео в DirectFB, субтитры спутникового ТВ (DVB), декодирование AAC, все модули расширения LADSPA и другое.
Каркас и модули расширения GStreamer используются в таких плейерах, как Rhythmbox, Banshee и Totem, которые популярны в рабочей среде Gnome. В KDE 4 имеется поддержка GStreamer как движка звуковой подсистемы Phonon, и, таким образом, все приложения, которые используют для проигрывания Phonon (Amarok, Kaffeine…), также задействуют GStreamer.
VLC
По сути дела, VLC – это универсальный медиа-проигрыватель, вокруг которого выросла целая экосистема кодеков и даже самостоятельный каркас поддержки мультимедиа. Причиной тому можно назвать цель проекта VideoLAN, в рамках которого разрабатывался полностью самодостаточный проигрыватель. Вместе с плейером VLC поставляется отдельный набор кодеков, и этот набор по большей части не пересекается с системными кодеками других каркасов в Linux. По этой причине укажем полный перечень поддерживаемых форматов.
Контейнеры 3GP, ASF, AVI, FLV, Matroska, MIDI, QuickTime, MP4, Ogg, OGM, WAV, MPEG-2 (ES, PS, TS, PVA, MP3), AIFF, Raw audio, Raw DV, MXF, VOB.
Видео-форматы и кодеки Cinepak, Dirac, DV, H.263, H.264/MPEG-4 AVC, HuffYUV, Indeo 3, MJPEG, MPEG-1, MPEG-2, MPEG-4 Part 2, RealVideo 3 и 4 Sorenson (совместимость с некоторыми роликами из Youtube), Theora, VC-1, VP5, VP6, VP8, WMV (частично).
Аудио-форматы и кодеки AAC, AC3, ALAC, AMR, DTS, DV Audio, XM, FLAC, MACE, Mod, MP3, PLS, QDM2/QDMC, RealAudio, Speex, Screamtracker 3/S3M, TTA, Vorbis, WavPack, WMA (частично).
До недавнего времени VLC был достаточно жесткой связкой плейер-каркас, но с появлением движка vlc-phonon приложения KDE 4 (см. выше) теперь тоже могут использовать кодеки из состава VLC.
Mplayer
Это один из старейших медиа-проигрывателей для Linux, обеспечивающий очень хорошую поддержку самых разнообразных форматов. В основе программы лежит библиотека libavcodec из проекта FFMpeg. Уже этого одного достаточно для поддержки большинства фильмов в формате DivX, однако Mplayer не ог раничивается этим и поддерживает как общесистемные кодеки (например FAAC, OGG), так и двоичные DLL-библиотеки из Windows (32‑битной). Последнее является уникальным свойством Mplayer среди остальных плейеров для Linux. Вы можете скопировать кодеки для Windows в папку / usr/lib/win32 и наслаждаться их поддержкой в Linux.
Так как Mplayer тесно связан с проектом FFMpeg, то список поддерживаемых форматов у него похож на таковой у Xine (поэтому второй раз его приводить не нужно). Дополнительно, Mplayer особенно хорошо поддерживает субтитры и умеет проигрывать неполные файлы.
Как все это установить?
В разных дистрибутивах процессы установки мульдимедиа-кодеков и нужного инструментария различаются, поэтому остановимся на нескольких популярных дистрибутивах:
В последнее время в Ubuntu нет нужды подключать дополнительные репозитории Medibuntu или Multiverse, так как все пакеты имеются в стандартных репозиториях. Достаточно ввести команду
sudo apt-get install non-free-codecs vlc libxine1-ffmpeg gxine mencoder mpg321 mpg123 ffmpeg \ libmp4v2-0 totem-mozilla lame nautilus-script-audio-convert libquicktime1 flac faac faad \ liba52-dev mplayer gstreamer0.10-ffmpeg gstreamer0.10-fluendo-mp3 gstreamer0.10-plugins-bad-multiverse \ gstreamer0.10-plugins-ugly-multiverse totem-gstreamer
Пользователям Fedora, прежде чем устанавливать пакет, необходимо подключить репозиторий RPMFusion, доступный по адресу http://rpmfusion.org. Затем установим нужные пакеты через Yum:
sudo yum install mplayer mplayer-gui gecko-mediaplayer mencoder xine xine-lib-extras \ xine-lib-extras-freeworld gstreamer-plugins-ugly gstreamer-plugins-bad gstreamer-ffmpeg
Для OpenSUSE ситуация похожа, но отличается небольшими деталями. Сначала подключаем репозиторий Packman (http://packman.links2linux.org), затем даем команду от лица администратора системы:
zypper in -y -l ffmpeg gst-fluendo-mp3 libxine1-codecs phonon-backend-xine w32codec-all \ gstreamer-0_10-ffmpeg gstreamer-0_10-fluendo-mp3 gstreamer-0_10-plugins-good gstreamer-0_10-plugins-good-extra \ gstreamer-0_10-plugins-ugly vlc smplayer
Боремся с узкими местами
Если с популярными и распространенными кодеками все более-менее ясно, то давайте теперь обсудим менее очевидные, но актуальные темы поддержки медиа-форматов в Linux. Для удобства оформим эти случаи в форме «проблемы-решения»:
- Проблема Фильмы в формате Quicktime воспроизводятся локально, но на web-страницах – нет.
Решение Установите пакет mozilla-plugin-vlc для Firefox или mplayerplugin (он же mozilla-mplayer) для других браузеров. В настройках всех популярных браузеров (включая Opera и Chrome) предусмотрен раздел, где можно указать путь для сторонних модулей расширения. Обычно модули интеграции с браузерами от VLC, Mplayer и Totem автоматически «подхватываются» и не требуют настройки.
- Проблема Некоторые web-трансляции (например, Евровидение) все равно не воспроизводятся в браузере.
Решение В данном случае достаточно установить проприетарный, но бесплатно распространяемый модуль расширения Octoshape (http://www.eurovision.tv/js/lib/octoshape/).
- Проблема Часть файлов в формате AAC/M4A не воспроизводятся, несмотря на поддержку AAC в системе.
Решение В случае, если эти файлы не содержат защиты от копирования (такое бывает в iTunes), то скорее всего их удастся воспроизвести. Помните, что для этого есть несколько способов: с помощью FFMpeg/libavcodec, через VLC, через аудио-плейер с самостоятельной системой модулей расширения (например, Audacious) и, наконец, через запуск Windows-программы в Wine.
- Проблема Скопированный комакт-диск в формате APE+CUE воспроизводится одним большим куском, без разбивки на треки.
Решение Эта проблема решается правильным выбором плейера. Метаданные из файлов CUE поддерживаются в Amarok, а также в легковесном XMMS, за счет модуля расширения xmms-cue.
Конвертация
В ряде случаев текущий формат песни или фильма вас будет не устраивать, и появится желание сконвертировать файл в другой формат. Для этой задачи есть несколько решений, в том числе и таких, которые будут наиболее удобными для новичков. Опять же, в зависимости от требуемого действия, перечислим наиболее типичные сценарии.
1 Конвертация музыкального файла через контекстное меню файлового менеджера
Простое решение существует как для пользователей среды KDE, так и Gnome. Для KDE (3 и 4 версий) существует Perl Audio Converter (PACPL) – специальный скрипт, который интегрируется в контекстное меню Konqueror или Dolphin. Правый щелчок мыши по медиа-файлу содержит стандартное меню действий, в котором будет пункт PACPL и огромный выбор целевых форматов.
Аналогичный способ для Gnome представляет собой расширение к файловому менеджеру Nautilus под названием nautilus-sound-converter и входит в состав популярных дистрибутивов (хотя по умолчанию обычно не установлен).
2 Конвертация музыкальных файлов через специальное приложение с графическим интерфейсом
Обычно тут речь идет о каком-либо интерфейсе для массового преобразования файловых форматов – для тех, кто не хочет или не умеет пользоваться консольными командами. Для рабочих столов KDE и Gnome существуют два схожих приложения с почти одинаковыми названиями: SoundKonverter и SoundConverter. Первый использует все преимущества инструментария FFMpeg, а второй опирается на стандартный для Gnome каркаc GStreamer. Типичный вариант использования таких приложений – это перевод множества файлов (от альбома до всей фонотеки) в альтернативный формат. Например, из MP3 в OGG из идеологических соображений, или из WMV или AAC в MP3 для большей совместимости.
Тем, кто предпочитает иметь одно универсальное приложение в стиле «швейцарского ножа», лучше подойдет уже упомянутый плейер VLC. В его меню есть пункт Медиа > Конвертировать/Сохранить, который позволяет перекодировать любой поддерживаемый аудио- или видеофайл. В VLC используется система профилей с заранее заданными предустановками, но любую из них можно изменить и вручную установить битрейт, контейнер, кодеки и субтитры. Все операции поддерживаются и для папок, т. е. возможна массовая конвертация.
3 Конвертация любого медиа-файла средствами командной строки
Данный способ хорош тем, что предлагает наиболее богатый выбор инструментов и почти безграничный спектр настраиваемых параметров. Прежде всего нужно понимать, что один и тот же результат можно получить с помощью разных инструментов, например:
- ffmpeg (из одноименного инструментария)
- mencoder (разрабатывает вместе с Mplayer)
- transcode (самостоятельный проект)
- vlc (консольная версия)
Для примера укажем, как можно перекодировать видеофайл в контейнере AVI в универсальный и везде поддерживаемый MPEG-1:
- VLC
vlc исходный_файл.avi --sout='#transcode{vcodec=mp1v,acodec=mpga}:std{access=file, mux=mpeg1,url=целевой_файл.mpg}'
- FFMPEG
ffmpeg -i исходный_файл.avi -y -f vcd -vcodec mpeg1video -acodec mp2 -ab 224 -ar 44100 -ac 2 целевой_файл.mpg
- MENCODER
mencoder исходный_файл.avi -of mpeg -mpegopts format=mpeg1:tsaf:muxrate=2000 -o целевой_файл.mpg \ -oac lavc -lavcopts acodec=mp2:abitrate=224 -ovc lavc -lavcopts vcodec=mpeg1video
- TRANSCODE
transcode -i исходный_файл.avi -I 1 -C 1 -k -b 224 -z -e 44100 --export_asr 2 --export_prof vcd-pal \ -J normalize -o целевой_файл.mpg -y mpeg -F v
4 Захват трансляции в виде локального файла
У этого варианта использования есть нюанс: в ряде случаев есть возможность просто скачать поток в виде отдельного файла. Так, в частности, и поступают с роликами Youtube (для скачивания есть простейшие и очень удобные расширения для Opera и Firefox). Мы же рассмотрим ситуацию, когда захват нужно вести в реальном времени. Например, на плату видеозахвата транслируется футбольный матч либо идет оцифровка видео с пленки. Мы можем сразу же перенаправлять видео- и аудиопоток в файл и «на лету» кодировать данные в нужный формат. Рассматривать классическое цифровое вещание какого-либо потока не так интересно, так как все равно почти всегда можно «вытянуть» исходный файл. Например, поток ASF можно банально сохранить в виде локальной копии:
mplayer -dumpstream http://адрес_сайта/файл_потока.asf
Гораздо интереснее кодировать данные на лету. Предположим, что требуется записать данные с web-камеры:
mencoder tv:// -tv driver=v4l:device=/dev/video0:width=640:height=480:forceaudio -ovc lavc -oac lavc -lavcopts \ vcodec=mpeg4:acodec=mp3 -ffourcc divx -o файл.avi
Предполагается, что web-камера определяется системой как /dev/video0, а опция forceaudio запишет звук – в том случае, если он есть...
Правильные звук и видео
Бывают ситуации, когда в системе не играет звук (вообще), или картинка дергается и замирает. На этом этапе многие совершают ошибку и лезут в конфигурационные файлы, что на самом деле совершенно излишне.
При возникновении трудностей со звуком важнее всего грамотно провести диагностику неполадки.
В первую очередь, убедитесь, что используется нужное устройство вывода. В KDE это можно посмотреть в System settings > Мультимедиа > Устройства воспроизведения, в Gnome – в gstreamer-properties > Вывод. Не стоит сразу клясть подсистему Pulseaudio, ставшую стандартной в современном Linux: она уже давно работает стабильно, и как раз ее отключение может привести к проблемам.
Следующий шаг: переходим в настройки плейера и проверяем, куда выводится звук. VLC, Mplayer (и производные), Kaffeine и другие программы позволяют выводить звук на Pulseaudio, либо сразу на ALSA или OSS.
Если ничего не получается, проверьте, является ли проблема системной или пользовательской. Для этого создайте в системе нового пользователя и проиграйте файл под ним. Очень часто проблемы с воспроизведением вылезают наружу именно на этом этапе. Если у вас этот случай, то удалите в своей домашней директории все скрытые файлы и папки, имеющие отношение к звуку (.pulseaudio и подобное) и попробуйте снова.
Проблемы с воспроизведением видео, когда картинка дергается и тормозит, обычно связаны с плохой производительностью при отрисовке видео X-сервером. Проверьте, что ваш драйвер поддерживает DRI:
glxinfo | grep render
Если ответ – «No», то драйвер видеокарты лучше переустановить.
В случае видео высокой четкости подтормаживание указывает на отсутствие аппаратного декодирования видео. Современные видеокарты умеют декодировать некоторые форматы (например, H.264) прямо средствами GPU, для чего нужны фирменный драйвер и клиентская библиотека. Для видеокарт NVIDIA потребуется библиотека VDPAU, для чипов Intel и Ati/Amd – VAAPI. Когда все установлено, в настройках видеоплейера нужно выбрать устройство вывода VDPAU или VAAPI соответственно.