Mam pliki filmowe z wieloma ścieżkami audio (w kontenerze MKV). Chcę obejrzeć film, wysyłając jeden język do głośników (dla dzieci) i inny język do słuchawek (dla mnie), utrzymując synchronizację utworów, jeśli film jest wstrzymany itp.
Załóżmy, że mój system ma już poprawnie skonfigurowane dwa wyjścia audio.
Czy można to zrobić za pomocą odtwarzacza multimediów w systemie Linux? Do tej pory sprawdziłem MPlayera i VLC, a one obsługują tylko wybranie jednej z dostępnych ścieżek audio.
linux
audio
video
media-player
Martin Vidner
źródło
źródło
:-)
Odpowiedzi:
Pomysł
alias Jak rozbić muchę (masło) na kole [ Fly ] .
Możesz przesyłać strumieniowo lokalnie cały film ze wszystkimi ścieżkami audio i napisami, np
vlc
. Za pomocą .Wtedy wystarczy „ podłączyć” dwóch klientów do tego strumienia, wybierając język (i / lub napisy) oraz różne wyjście audio (które zakładamy, że zostało już skonfigurowane).
Co więcej, w przypadku nowego telewizora, tabletu lub telefonu komórkowego nie jest konieczne uruchamianie klientów na komputerze ... a po włączeniu pauzy streamer zostaje wstrzymany ... i powinien również działać z systemem Windows (zawsze zakładane wyjście audio już skonfigurowane może z programami trzeciej części, w przypadku, gdy chcesz uruchomić dwóch klientów na komputerze).
Kilka słów więcej
Typowa linia poleceń przesyłania strumieniowego może być podobna do
Potrzebna jest opcja
--sout-all
[ SO ]Przeczytaj,
vlc -H
aby uzyskać wskazówki dotyczące innych (ton) dostępnych opcji.Aby „odtworzyć” strumień
gdzie x jest liczbą strumienia audio, który chcesz słuchać na tym kliencie.
Wszystko powinno być łatwe do wykonania również z interfejsu GUI serwera / klienta ...
Referencje i dalsze odczyty
Możesz przeczytać więcej na stronie blogu Luuka „Użyj VLC do odtwarzania wielu klipów wideo na wielu komputerach w synchronizacji” [ 1 ] , możesz w końcu spróbować dodać zewnętrzną ścieżkę audio, zaczynając od strony wiki videolan [ 2 ] , lub możesz grać z Gstreamerem i innym wyjściem, jak sugeruje Antonio w tej odpowiedzi [ 3 ] .
Powyższe polecenie Gstreamera może być minimalną działającą odpowiedzią samą w sobie lub ścieżką do uratowania muchy (masła) ...
... ale rzadko mam ochotę bronić własnego pseudonimu.
źródło
Rozwiązanie przesyłania strumieniowego ma wadę - klienci używają pamięci podręcznej i mogą stracić synchronizację. Zdarzyło mi się.
Innym podejściem do jednoczesnego uruchamiania dwóch różnych ścieżek, które uznałem za przydatne, jest uruchomienie dwóch instancji VLC i zsynchronizowanie ich odtwarzania. Ale nie można tego zrobić poprawnie bez automatyzacji (ręczne działania wykonywane jeden po drugim, które powodują opóźnienia).
Rozwiązaniem jest kontrolowanie obu instancji VLC synchronicznie za pomocą interfejsu sieciowego. Można go włączyć za pomocą GUI lub konsoli:
vlc --extraintf=http --http-host 127.0.0.1 --http-port 8081 --http-password any_password
Dla każdej instancji VLC użyj różnych portów. Do sterowania odtwarzaniem wystarczy jedno polecenie - pauza przełącz:
http://:[email protected]:8081/requests/status.xml?command=pl_pause"
Więcej informacji na temat poleceń.
W takim przypadku wystarczy zrobić program / skrypt, który wysyła żądanie HTTP do obu identyfikatorów URI jednocześnie. Napisałem dla niego bardzo prosty program golang (tutaj jest kod źródłowy ). JS jest kolejnym dobrym kandydatem do tego celu. Idąc dalej, możliwe jest tworzenie większej liczby poleceń, przypisywanie globalnych powiązań klawiszy do tego programu / skryptu.
Główny punkt, w którym podejście działa dobrze.
źródło