9

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

Предположим, что моя система уже имеет два правильно настроенных аудиовыхода.

Есть ли способ сделать это с помощью медиаплеера в Linux? До сих пор я проверял MPlayer и VLC, и они поддерживают только выбор одной из доступных звуковых дорожек.

2 ответа2

3

Идея

aka Как сломать (масло) летать на колесе [ Fly ].

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

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

Еще несколько слов

Типичная потоковая командная строка может быть похожа на

vlc "movie.mkv" --sout-all --sout="#rtp{dst=239.255.100.100,port=5004,mux=ts}"

Нужна опция --sout-all [ SO ]

 --sout-all, --no-sout-all  Enable streaming of all ES (default disabled)
 Stream all elementary streams (video, audio and subtitles) (default disabled)

Прочитайте vlc -H чтобы получить подсказки для других (тонн) доступных опций.

"Играть" в стрим

vlc rtp://239.255.100.100:5004  --audio-track=x

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

Ссылки и дальнейшие чтения
Возможно, вы захотите прочитать больше на странице блога Luuk "Используйте VLC для синхронного воспроизведения нескольких видеоклипов на нескольких компьютерах" [ 1 ], в конечном итоге вы можете попытаться добавить внешнюю звуковую дорожку, начиная с этой вики-страницы videolan [ 2 ], или вы можете играть с Gstreamer и другим выводом, как это было предложено Антонио в этом ответе [ 3 ].

GStreamer:
# Количество и порядок следов должны быть известны ...

gst-launch-1.0 \
filesrc location=example.mkv ! decodebin name=decoded \
decoded.src_0 ! queue ! autovideosink \
decoded.src_1 ! queue ! audioconvert ! alsasink device=”hw:1,0″ \
decoded.src_2 ! queue ! audioconvert ! alsasink device=”hw:2,0″

Приведенная выше команда Gstreamer может быть минимальным рабочим ответом сама по себе или путем для сохранения (сливочного) муха ...
... но редко я испытываю желание защитить свой псевдоним.

0

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

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

Решение состоит в том, чтобы управлять обоими экземплярами VLC синхронно, используя веб-интерфейс. Его можно включить через графический интерфейс или консоль:

vlc --extraintf=http --http-host 127.0.0.1 --http-port 8081 --http-password any_password

Для каждого экземпляра VLC используйте разные порты. Для управления воспроизведением достаточно одной команды - переключение паузы:http://:any_password@127.0.0.1:8081/requests/status.xml?command=pl_pause"

Больше информации о командах.

В этом случае все, что вам нужно сделать, это создать программу / скрипт, который отправляет HTTP-запрос на оба URI одновременно. Я написал очень простую программу для golang (вот исходный код). JS является еще одним хорошим кандидатом для этой цели. Если пойти дальше, можно сделать больше команд, назначить глобальные привязки клавиш для этой программы / скрипта.

Главное, что подход работает хорошо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .