Como reproduzir um filme ouvindo duas faixas de som simultaneamente?

8

Eu tenho arquivos de filme com várias faixas de áudio (no contêiner MKV). Quero assistir a um filme enquanto envio um idioma para os alto-falantes (para as crianças) e outro para os fones de ouvido (para mim), mantendo as faixas sincronizadas se o filme estiver pausado, etc.

Suponha que meu sistema já tenha duas saídas de áudio configuradas corretamente.

Existe uma maneira de fazer isso com um media player no Linux? Verifiquei o MPlayer e o VLC até agora e eles só suportam a seleção de uma das faixas de áudio disponíveis.

    
por Martin Vidner 12.04.2016 / 21:25

2 respostas

2

A ideia

aka Como quebrar uma mosca (manteiga) na roda [ Fly ] .

Você pode transmitir localmente todo o filme com todas as faixas de áudio e legenda, por exemplo, com vlc .
Em seguida, será "suficiente" para conectar dois clientes a esse fluxo, selecionando o idioma (e / ou legendas) e a saída de áudio diferente (que assumimos já configurada).

Além disso, com uma nova televisão, tablet ou telefones celulares, não é necessário executar os clientes no computador ... e quando você coloca em pausa o streamer você colocar em pausa tudo ... e ele deve funcionar com o windows também (sempre assumiu que a saída de áudio já está configurada, talvez com programas de terceiros, no caso de você querer executar os dois clientes no computador).

Algumas palavras mais

Uma linha de comando típica de streaming pode ser semelhante a

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

É necessária a opção --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)

Leia vlc -H para ter algumas dicas para as outras (toneladas de) opções disponíveis.

Para "reproduzir" o fluxo

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

em que x é o número do fluxo de áudio que você deseja ouvir nesse cliente.
Tudo deve ser facilmente feito a partir da GUI do servidor / cliente também ...

Referências e outras leituras
Você pode querer ler mais na página do blog do Luuk "Use o VLC para reproduzir vários clipes de vídeo em vários computadores em sincronia" [1 ] , você pode eventualmente tentar adicionar faixa de áudio a partir desta página wiki de videolan [ 2 ] , ou você pode jogar com o Gstreamer e saída diferente, como sugerido por Antonio nesta resposta [ 3 ] .

GStreamer:
# The number and order of the tracks must be known…

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″

O comando Gstreamer acima pode ser uma resposta mínima de trabalho por si só ou um caminho para salvar a mosca (manteiga) ...
... mas raramente sou tentado a defender meu próprio apelido.

    
por 10.05.2016 / 18:17
0

A solução de streaming tem uma desvantagem - os clientes usam o cache e podem ficar fora de sincronia. Aconteceu comigo.

Outra abordagem para executar duas faixas diferentes ao mesmo tempo que achei útil para mim é executar duas instâncias do VLC e sincronizar sua reprodução. Mas eu não posso ser feito corretamente sem automação (ações manuais feitas uma a uma que causam atrasos).

A solução é controlar as instâncias do VLC de forma síncrona usando a interface web. Pode ser ativado via GUI ou console:

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

Para cada instância do VLC, use portas diferentes. Para controlar a reprodução, um comando é suficiente - alternar pausa: http://:[email protected]:8081/requests/status.xml?command=pl_pause"

Mais informações sobre comandos.

Nesse caso, tudo o que você precisa fazer é criar um programa / script que envie solicitação HTTP para ambos os URIs simultaneamente. Eu escrevi um programa golang muito simples para ele (aqui está o código-fonte ). JS é outro bom candidato para esse propósito. Indo mais longe, é possível fazer mais comandos, atribuir ligações de chave globais a esse programa / script.

O ponto principal de que a abordagem funciona bem.

    
por 30.09.2018 / 09:28