Wie kann man einen Film abspielen, der zwei Tonspuren gleichzeitig hört?

10

Ich habe Filmdateien mit mehreren Audiospuren (im MKV-Container). Ich möchte einen Film ansehen, während ich eine Sprache an die Lautsprecher (für die Kinder) und eine andere Sprache an die Kopfhörer (für mich selbst) sende, um die Titel synchron zu halten, wenn der Film angehalten wird usw.

Angenommen, mein System verfügt bereits über zwei ordnungsgemäß konfigurierte Audioausgänge.

Gibt es eine Möglichkeit, dies mit einem Media Player unter Linux zu tun? Ich habe MPlayer und VLC bisher überprüft und sie unterstützen nur die Auswahl einer der verfügbaren Audiospuren.

Martin Vidner
quelle
1
Sie stellen eine Off-Topic-Frage (Software-Shopping). Fragen, die nach Produkt-, Service- oder Lernmaterialempfehlungen suchen, sind nicht zum Thema. Siehe Zum Thema . Versuchen Sie es mit softwarerecs.stackexchange.com, aber lesen Sie zuerst, was erforderlich ist, damit eine Frage "genügend Informationen" enthält .
DavidPostill
Möglicherweise können Sie die Datei neu codieren und beide Audiostreams zu einem kombinieren. Wenn also einer 5.1 und der andere Stereo ist, hätten Sie einen 8-Kanal-Stream. Sie können diese Kanäle mit Soundflower unter OS X verschiedenen Ausgabegeräten zuordnen, aber ich kenne Linux nicht. Klingt sehr unpraktisch. Sie können auch Adobe Premiere oder einen anderen NLE verwenden, um verschiedene Audiospuren unterschiedlichen Ausgaben zuzuordnen.
Elliott B
Ich fürchte, die "Kinder" haben bereits die andere Sprache gelernt ... zumindest hoffe ich. :-)
Hastur
Sie können die Audiospuren auch in Stereo mischen, sie dann alle in eine 5.1-Audiospur einfügen (ohne die Center- / Subwoofer-Kanäle zu beachten) und sie dann wieder in den Film einbinden. Dann können Sie es auf jeder 5.1-Soundkarte abspielen. Schließen Sie einfach Kopfhörer und Lautsprecher an den entsprechenden Ausgang an.
JonasCz - Wiedereinstellung Monica

Antworten:

3

Die Idee

aka Wie man eine (Butter-) Fliege auf dem Rad bricht [ Fliege ] .

Sie können den gesamten Film lokal mit allen Audio- und Untertitelspuren streamen, z vlc. B. mit .
Dann ist es "genug" , zwei Clients mit diesem Stream zu verbinden und die Sprache (und / oder Untertitel) und den unterschiedlichen Audioausgang (von dem wir annehmen, dass er bereits konfiguriert ist) auszuwählen.

Darüber hinaus ist es bei einem neuen Fernseher, Tablet oder Mobiltelefon nicht erforderlich, die Clients auf dem Computer auszuführen ... und wenn Sie den Streamer pausieren, pausieren Sie alle ... und es sollte auch mit Windows funktionieren (immer vorausgesetzt) Der bereits ausgegebene Audioausgang ist möglicherweise mit Programmen von Drittanbietern konfiguriert, falls Sie die beiden Clients auf dem Computer ausführen möchten.

Einige Worte mehr

Eine typische Streaming-Befehlszeile kann ähnlich sein

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

Es wird die Option --sout-all [ SO ] benötigt

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

Lesen Sie vlc -H, um einige Hinweise für die anderen (Tonnen) verfügbaren Optionen zu erhalten.

Den Stream "abspielen"

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

Dabei ist x die Nummer des Audiostreams, den Sie auf diesem Client hören möchten.
Alles sollte auch einfach über die Server / Client-GUI erledigt werden können ...

Referenzen und weitere Lesungen
Vielleicht möchten Sie mehr von der Blog-Seite von Luuk lesen. "Verwenden Sie VLC, um mehrere Videoclips synchron auf mehreren Computern abzuspielen" [ 1 ] . Sie können eventuell versuchen, eine externe Audiospur hinzuzufügen, beginnend mit dieser Wiki-Seite von Videolan [ 2 ] , oder Sie können mit Gstreamer und anderen Ausgaben spielen, wie von Antonio in dieser Antwort vorgeschlagen [ 3 ] .

GStreamer:
# Die Anzahl und Reihenfolge der Tracks muss bekannt sein…

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″

Der obige Gstreamer-Befehl kann eine minimale funktionierende Antwort für sich sein oder ein Weg, um die (Butter-) Fliege zu retten ...
... aber selten bin ich versucht, meinen eigenen Spitznamen zu verteidigen.

Hastur
quelle
Beachten Sie, dass die RST-IP im Bereich von 224.0.0.0 bis 239.255.255.255 (Multicast-IP-Bereich) liegen muss, da Sie sonst nur eine Verbindung zum Client herstellen können. Scheint, als würde eine solche IP einfach funktionieren.
chx
@chx Lassen Sie mich wissen, ob die Idee mit Ihrem anderen Problem funktioniert ...
Hastur
Ja tut es! Ich habe es auf superuser.com/a/1422462/41259 geschrieben, aber ich dachte, dieses Detail wäre hier erwähnenswert.
chx
0

Die Streaming-Lösung hat einen Nachteil: Clients verwenden den Cache und können nicht mehr synchron sein. Es ist mir passiert.

Ein anderer Ansatz zum gleichzeitigen Ausführen von zwei verschiedenen Tracks, den ich für nützlich hielt, besteht darin, zwei Instanzen von VLC auszuführen und deren Wiedergabe zu synchronisieren. Aber ohne Automatisierung kann ich nicht richtig vorgehen (manuelle Aktionen nacheinander, die zu Verzögerungen führen).

Die Lösung besteht darin, beide VLC-Instanzen synchron über die Webschnittstelle zu steuern. Es kann über die GUI oder die Konsole aktiviert werden:

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

Verwenden Sie für jede VLC-Instanz unterschiedliche Ports. Um die Wiedergabe zu steuern, reicht ein Befehl aus - Pause umschalten: http://:[email protected]:8081/requests/status.xml?command=pl_pause"

Weitere Informationen zu Befehlen.

In diesem Fall müssen Sie lediglich ein Programm / Skript erstellen, das gleichzeitig eine HTTP-Anforderung an beide URIs sendet. Ich habe ein sehr einfaches Golang-Programm dafür geschrieben (hier ist der Quellcode ). JS ist ein weiterer guter Kandidat für diesen Zweck. Wenn Sie weiter gehen, können Sie weitere Befehle ausführen und diesem Programm / Skript globale Tastenkombinationen zuweisen.

Der Hauptpunkt, dass der Ansatz gut funktioniert.

Valera Leontyev
quelle