Wie spielt man einen Film ab, der gleichzeitig zwei Tonspuren abspielt?

1087
Martin Vidner

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 den Kopfhörer (für mich) schicke und die Spuren synchron hält, wenn der Film angehalten ist usw.

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

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

8
Sie stellen eine Off-Topic-Frage (Software-Shopping). Fragen, die Produkt-, Service- oder Lernmaterialempfehlungen suchen, sind nicht thematisch. Siehe [Zum Thema] (http://superuser.com/help/on-topic). Versuchen Sie http://softwarerecs.stackexchange.com/, aber lesen Sie zuerst [Was ist erforderlich, damit eine Frage "genug Informationen enthält"] (http://meta.softwarerecs.stackexchange.com/questions/336/what-is- Erforderlich-für-eine-Frage-enthalten-genug-Informationen). DavidPostill vor 8 Jahren 1
Vielleicht könnten Sie die Datei neu codieren und beide Audioströme 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 unterschiedlichen Ausgabegeräten zuordnen, aber ich kenne Linux nicht. Hört sich sehr unbequem an. Sie können auch etwas wie Adobe Premiere oder ein anderes NLE verwenden, um verschiedene Audiospuren unterschiedlichen Ausgängen zuzuordnen. Elliott B vor 8 Jahren 0
Ich fürchte, dass die "Kinder" die andere Sprache bereits gelernt haben ... zumindest hoffe ich. `:-)` Hastur vor 7 Jahren 0

2 Antworten auf die Frage

2
Hastur

The Idea

aka How to break a (butter)fly on the wheel [Fly].

You can stream locally the whole movie with all the audio and subtitle tracks, e.g. with vlc.
Then it will be "enough" to connect two clients to that stream, selecting the language (and/or subtitles) and the different audio output (that we assume already configured).

Moreover with a new television, tablet or mobile phones it is not needed to run the clients on the computer... and when you put in pause the streamer you put in pause all... and it should work with windows too (always assumed the audio output already configured maybe with third part programs, in the case you want to run the two clients on the computer).

Some words more

A typical streaming command line can be similar to

vlc "movie.mkv" --sout-all --sout="#rtp" 

It is needed the option --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) 

Read vlc -H to have some hints for the other (tons of) options available.

To "play" the stream

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

where x is the number of the audio stream you want to listen on that client.
All should be easily done from the server/client GUI too...

References and further readings
You may want to read more from the Luuk's blog page "Use VLC to play multiple video clips on multiple computers in sync" [1], you can eventually try to add external audio track starting from this wiki page of videolan [2], or you can play with Gstreamer and different output as suggested by Antonio in this answer [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″ 

The above Gstreamer command can be a minimal working answer by itself or a path to save the (butter)fly...
... but seldom I'm tempted to defend my own nickname.

0
Valera Leontyev

Die Streaming-Lösung hat einen Nachteil: Clients verwenden Cache und können ihre Synchronisierung beenden. Es ist mir passiert.

Ein anderer Ansatz, um zwei verschiedene Spuren gleichzeitig auszuführen, war für mich nützlich, zwei Instanzen von VLC auszuführen und deren Wiedergabe zu synchronisieren. Ohne Automatisierung kann ich jedoch nicht richtig gemacht werden (manuelle Aktionen, die einzeln ausgeführt werden und zu Verzögerungen führen).

Die Lösung besteht darin, beide VLC-Instanzen synchron über das Webinterface zu steuern. Es kann über GUI oder 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, genügt ein Befehl - Pause umschalten: http://:any_password@127.0.0.1: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. Darüber hinaus ist es möglich, weitere Befehle zu erstellen und diesem Programm / Skript globale Tastenzuordnungen zuzuweisen.

Der Hauptpunkt, dass der Ansatz gut funktioniert.