Comment lire un film en écoutant deux pistes sonores simultanément?

10

J'ai des fichiers vidéo avec plusieurs pistes audio (dans le conteneur MKV). Je veux regarder un film tout en envoyant une langue aux haut-parleurs (pour les enfants) et une autre langue aux écouteurs (pour moi), en gardant les pistes synchronisées si le film est en pause, etc.

Supposons que mon système dispose déjà de deux sorties audio correctement configurées.

Existe-t-il un moyen de le faire avec un lecteur multimédia sous Linux? J'ai vérifié MPlayer et VLC jusqu'à présent, et ils ne prennent en charge que la sélection d'une des pistes audio disponibles.

Martin Vidner
la source
1
Vous posez une question hors sujet (achats de logiciels). Les questions à la recherche de recommandations de produits, de services ou de matériel d'apprentissage sont hors sujet. Voir sur le sujet . Essayez softwarerecs.stackexchange.com mais veuillez d'abord lire ce qui est requis pour qu'une question contienne "suffisamment d'informations" .
DavidPostill
Vous pouvez peut-être ré-encoder le fichier en combinant les deux flux audio en un seul. Donc, si l'un est 5.1 et l'autre stéréo, vous auriez un flux à 8 canaux. Vous pouvez mapper ces canaux à différents périphériques de sortie à l'aide de Soundflower sur OS X, mais je ne connais pas Linux. Cela semble très gênant. Vous pouvez également utiliser quelque chose comme Adobe Premiere ou un autre NLE pour mapper différentes pistes audio à différentes sorties.
Elliott B
J'ai peur que les_ "gamins" _ aient déjà appris l'autre langue ... du moins j'espère. :-)
Hastur
Vous pouvez également mélanger les pistes audio en stéréo, puis les mettre toutes dans une piste audio 5.1 (en ignorant les canaux central / subwoofer), puis les multiplexer dans le film. Ensuite, vous pouvez le jouer sur n'importe quelle carte son 5.1, branchez simplement des écouteurs et des haut-parleurs dans la sortie appropriée.
JonasCz

Réponses:

3

L'idée

aka Comment briser une mouche (beurre) sur la roue [ Fly ] .

Vous pouvez diffuser localement tout le film avec toutes les pistes audio et de sous-titres, par exemple avec vlc.
Il suffira alors de " connecter" deux clients à ce flux, en sélectionnant la langue (et / ou les sous-titres) et les différentes sorties audio (que nous supposons déjà configurées).

De plus, avec un nouveau téléviseur, une tablette ou des téléphones portables, il n'est pas nécessaire d'exécuter les clients sur l'ordinateur ... et lorsque vous mettez en pause le streamer, vous mettez en pause tout ... et cela devrait aussi fonctionner avec Windows (toujours supposé la sortie audio déjà configurée peut-être avec des programmes tiers, dans le cas où vous souhaitez exécuter les deux clients sur l'ordinateur).

Quelques mots de plus

Une ligne de commande de streaming typique peut être similaire à

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

Il faut l'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)

Lisez vlc -Hpour avoir des conseils sur les autres (tonnes de) options disponibles.

Pour "jouer" le flux

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

où x est le numéro du flux audio que vous souhaitez écouter sur ce client.
Tout devrait aussi être fait facilement à partir de l'interface graphique du serveur / client ...

Références et lectures supplémentaires
Vous pouvez lire la page du blog de Luuk "Utiliser VLC pour lire plusieurs clips vidéo sur plusieurs ordinateurs en synchronisation" [ 1 ] , vous pouvez éventuellement essayer d'ajouter une piste audio externe à partir de cette page wiki de videolan [ 2 ] , ou vous pouvez jouer avec Gstreamer et différentes sorties comme suggéré par Antonio dans cette réponse [ 3 ] .

GStreamer:
# Le nombre et l'ordre des pistes doivent être connus…

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″

La commande Gstreamer ci-dessus peut être une réponse de travail minimale en soi ou un chemin pour sauver la mouche (beurre) ...
... mais rarement je suis tenté de défendre mon propre surnom.

Hastur
la source
Notez que l'IP RST doit être compris entre 224.0.0.0 et 239.255.255.255 (plage IP multicast) ou vous ne pourrez pas vous y connecter plus que le client. On dirait qu'une telle IP fonctionnera tout simplement.
chx
@chx Faites-moi savoir si l'idée fonctionne avec votre autre problème ...
Hastur
Oui! Je l'ai écrit superuser.com/a/1422462/41259 mais j'ai pensé que ce détail méritait d'être mentionné ici.
chx
0

La solution de streaming présente un inconvénient: les clients utilisent le cache et peuvent se désynchroniser. Cela m'est arrivé.

Une autre approche pour exécuter deux pistes différentes simultanément que j'ai trouvé utile pour moi est d'exécuter deux instances de VLC et de synchroniser leur lecture. Mais je ne peux pas faire correctement sans automatisation (les actions manuelles effectuées une par une entraînent des retards).

La solution consiste à contrôler les deux instances VLC de manière synchrone à l'aide de l'interface Web. Il peut être activé via l'interface graphique ou la console:

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

Pour chaque instance VLC, utilisez des ports différents. Pour contrôler la lecture, une seule commande suffit - bascule pause: http://:[email protected]:8081/requests/status.xml?command=pl_pause"

Plus d'informations sur les commandes.

Dans ce cas, tout ce que vous avez à faire est de créer un programme / script qui envoie une requête HTTP aux deux URI simultanément. J'ai écrit un programme golang très simple pour cela (voici le code source ). JS est un autre bon candidat à cet effet. En allant plus loin, il est possible de créer plus de commandes, d'assigner des liaisons de touches globales à ce programme / script.

Le point principal que l'approche fonctionne bien.

Valera Leontyev
la source