VLC — это не только плеер =)

Posted: 2012-10-13 in IT, Software
Метки:

В этой заметке я немного расскажу про VLC — продукте бесспорно уникальном. В основном он известен как медиа-плеер, причем умеющий и понимающий почти все существующие форматы и источники медиа. Аудио- и видео- файлы, видео-устройства, RTP-потоки, мультикастовое и уникастовое (HTTP-stream) вещание, и всё это — с нативной (sic!) поддержкой кучи кодеков и контейнеров. Но плеер — это лишь одна грань возможностей VLC. …

В основном вот в таком виде:

Обратите внимание на боковую менюшку в плейлисте: получить видео/аудиопотоки можно не только с привычных файлов или rtp-/http-источников, но и с любых установленных в системе видео- и аудио-устройств. Есть даже отдельный режим — запись видео прямо с окон запущенных приложений или экрана целиком! Если вы хорошо знаете возможности vlc — никакого палевного долбософта за 29.99$ вам не понадобится. Если залезть в настройки, и включить режим отображения расширенного списка настроек — можно выпасть в осадок. Настроек реально вагон, и половина из них — непонятны, если вы до этого никогда не занимались обработкой цифрового видео.

Кроме интерфейса в графике, есть ещё и консольный интерфейс на ncurses:

Запускается такая няка в двух случаях:

  1. запуск vlc в графическом терминале, в опциях был включен доп.интерфейс на ncurses.
  2. запуск командой `vlc -I ncurses`

Работает конечно так себе, и требует допилки. Есть у vlc и веб-интерфейс для дополнительного управления по сети:

Тоже местами требует допилки, но всё самое важное — работает.

Но самая няшка — это модули и опции командной строки. Для работы в таком режиме создан специальный модуль интерфейса — dummy, в котором никакие окна и псевдографика не рисуются, а в консоль сыпятся только диагностические сообщения. Потому что vlc — это, сцуко, не только плеер. Это ещё и перекодировщик, и сервер потокового вещания, и черт в ступе. Не зря говорят, что полное описание функций — талмуд на 500 страниц. Я же начал вот с этого мануала: https://www.ibm.com/developerworks/ru/edu/vlc/section4.html

Что меня подтолкнуло к изучению расширенных возможностей vlc ? А понадобилось мне несложная вообщем-то вещь — имея только ssh-доступ к рабочей машине, нагрузить её записью видео с одного IP-TV-канала, вещаемого в FullHD-формате посредством волшебных грибов протоколов IGMP и UDP (Multicast). Оказывается, запись без пережатия («как есть») в этом случае требует ровно двух вещей:

  1. Разрешений на файерволе для мультикаст-групп и IGMP-траффика.
  2. Запуска вот такой команды:
    vlc udp://@239.190.1.17:8008 -I dummy 
    --sout '#standard{access=file,mux=ts,dst=~/Video.avi}'

Все, прямо в домашний каталог будет писаться файл Video.avi, останов записи делается прибитем процесса. Ясен фиг, для регулярного использования всё это несложно скриптуется. Если используется просто запись видео — можно воспользоваться упрощённым синтаксисом:

vlc udp://@239.190.1.17:8008 -I dummy --sout file/ts:~/Video.avi

Естественно можно и даже нужно добавить в конец команды

1>/dev/null 2>/dev/null &

для подавления отладочных сообщений в шелле и запуске в фоновом режиме. Чем хороша запись без пережатия — так это малой нагрузкой на проц. Например, на моем скромном домашнем Core 2 Duo E6850 можно без проблем писать 3-4 Full-HD канала одновременно и пятый — смотреть как обычно на полном экране. Но гораздо круче запустить писать HD-каналы на рабочей машине (все равно там вечером вычислительные мощности простаивают), отдав команды по SSH, а дома заняться чем-нить более полезным 😀

Что занятно: модифицируя эту самую строчку —out, можно принятый поток не только записать в файл, но и засунуть его в какую-нить ещё более кривую жопу — например, ретранслировать по http. Кому интересно — восхититься красотой и простотой конструкции #duplicate, позволяющий один принятый поток начать вещать параллельно на несколько разнотипных источников сразу.

Теперь о сжатии на «лету». Для этого используется модуль #transcode. Настроек у него — наверное ещё больше, чем собственно в vlc. Наобум у меня не получилось нормально пережать Full-HD с приемлимым качеством — качество слишком сильно падало, явно не хватает опыта. Кроме того, модуль не во всех версиях vlc стабильно работает. На текущий момент я решил писать видео «как есть», а конвертировать — только по необходимости каким-нить mencoder-ом. Синтаксис для сжатия — только полный, вид примерно такой:

vlc udp://@239.190.1.17:8008 -I dummy 
--sout '#transcode{параметры_сжатия}:
standard{access=file,mux=ts,dst=~/Video.avi}'

Параметры сжатия — самое важное и сложное, что требует подборки. Если дойдут руки — напишу о своих изысканиях и в этой области.

- комментарии
  1. snippets:

    Originally posted by Aminux:

    Если дойдут руки — напишу о своих изысканиях и в этой области.

    Какбэ… хотелось бы… по крайней мере сегодня узнал, что такой плейер вообще существует :left: :right:

  2. anonymous:

    Алекс writes:Пользуюсь им больше 3-х лет. Им и только им.