¿Cómo reproducir una película escuchando dos pistas de sonido simultáneamente?

9

Tengo archivos de películas con varias pistas de audio (en el contenedor MKV). Quiero ver una película mientras envío un idioma a los altavoces (para los niños) y otro idioma a los auriculares (para mí), manteniendo las pistas sincronizadas si la película está en pausa, etc.

Supongamos que mi sistema ya tiene dos salidas de audio configuradas correctamente.

¿Hay alguna manera de hacer esto con un reproductor multimedia en Linux? He comprobado MPlayer y VLC hasta ahora, y solo admiten la selección de una de las pistas de audio disponibles.

Martin Vidner
fuente
1
Usted está haciendo una pregunta fuera de tema (compras de software). Las preguntas que buscan recomendaciones de productos, servicios o materiales de aprendizaje están fuera de tema. Ver En tema . Tratar softwarerecs.stackexchange.com pero por favor lee primero Lo que se requiere para que una pregunta contenga "suficiente información" .
DavidPostill
Tal vez podría volver a codificar el archivo, combinando ambos flujos de audio en uno. Entonces, si uno es 5.1 y el otro es estéreo, tendrías un flujo de 8 canales. Puede asignar estos canales a diferentes dispositivos de salida utilizando Soundflower en OS X, pero no sé sobre Linux. Suena muy incómodo. También puede usar algo como Adobe Premiere u otro NLE para asignar diferentes pistas de audio a diferentes salidas.
Elliott B
Me temo que los "niños" _ ya han aprendido el otro idioma ... al menos eso espero. :-)
Hastur
También puede mezclar las pistas de audio en estéreo, luego ponerlas todas en una pista de audio 5.1 (ignorando los canales centrales / subwoofer), y luego mezclarlas nuevamente en la película. Luego puede reproducirlo en cualquier tarjeta de sonido 5.1, simplemente conecte los auriculares y el amplificador; altavoces en la salida adecuada.
JonasCz

Respuestas:

3

La idea

alias Como romper una (mariposa en la rueda). El Volar ] .

Puede transmitir localmente toda la película con todas las pistas de audio y subtítulos, por ejemplo. con vlc.
Entonces será "suficiente" para conectar dos clientes a ese flujo, seleccionando el idioma (y / o subtítulos) y la salida de audio diferente (que suponemos que ya está configurada).

Además, con un nuevo televisor, tableta o teléfono móvil no es necesario ejecutar los clientes en la computadora ... y cuando pone en pausa el transmisor, pone en pausa todo ... y también debería funcionar con Windows (siempre asumiendo que la salida de audio ya configurada tal vez con programas de terceros, en el caso de que desee ejecutar los dos clientes en la computadora).

Algunas palabras mas

Una línea de comando de transmisión típica puede ser similar a

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

Se necesita la opción. --sout-all El ASI QUE ]

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

Leer vlc -H tener algunos consejos para las otras (toneladas de) opciones disponibles.

A "jugar" la corriente

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

donde x es el número de la transmisión de audio que desea escuchar en ese cliente.
Todo debe hacerse fácilmente desde la GUI del servidor / cliente también ...

Referencias y lecturas adicionales
Es posible que desee leer más de la página del blog de Luuk "Use VLC para reproducir múltiples clips de video en múltiples computadoras en sincronización" El 1 ] , puedes eventualmente intentar agregar pistas de audio externas a partir de esta página wiki de videolan El 2 ] , o puedes jugar con Gstreamer y diferentes salidas como lo sugiere Antonio en esta respuesta El 3 ] .

GStreamer:
# El número y orden de las pistas deben ser conocidos ...

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″

El comando Gstreamer anterior puede ser una respuesta de trabajo mínima por sí misma o una ruta para salvar la mosca (mantequilla) ...
... pero rara vez estoy tentado de defender mi propio apodo.

Hastur
fuente
0

La solución de transmisión tiene un inconveniente: los clientes usan el caché y pueden perder la sincronización. Me pasó a mi.

Otro método para ejecutar dos pistas diferentes a la vez que me pareció útil es ejecutar dos instancias de VLC y sincronizar su reproducción. Pero no se puede hacer correctamente sin la automatización (acciones manuales hechas una por una que causan retrasos).

La solución es controlar ambas instancias de VLC de forma sincrónica mediante la interfaz web. Se puede habilitar a través de GUI o consola:

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

Para cada instancia de VLC use diferentes puertos. Para controlar la reproducción, un comando es suficiente - pause toggle: http://:[email protected]:8081/requests/status.xml?command=pl_pause"

Más información en los comandos.

En ese caso, todo lo que tiene que hacer es crear un programa / script que envíe la solicitud HTTP a ambos URI simultáneamente. Escribí un programa de golang muy simple para él (aquí está el código fuente ). JS es otro buen candidato para ese propósito. Yendo más allá, es posible hacer más comandos, asignar enlaces de teclas globales a ese programa / script.

El punto principal es que el enfoque funciona bien.

Valera Leontyev
fuente