如何播放同时收听两个音轨的电影?


9

我有多个音轨的电影文件(在MKV容器中)。我希望在向扬声器(为孩子们)发送一种语言和向耳机(对我自己)发送另一种语言时观看电影,如果电影暂停,则保持音轨同步等。

假设我的系统已经正确配置了两个音频输出。

有没有办法在Linux中使用媒体播放器?到目前为止,我已经检查了MPlayer和VLC,他们只支持选择一个可用的音轨。


1
你问一个非主题的问题(软件购物)。寻求产品,服务或学习材料建议的问题是偏离主题的。请参阅主题。请尝试使用softwarerecs.stackexchange.com, 但请先阅读问题所需的内容,以包含“足够的信息”
DavidPostill

也许你可以重新编码文件,将两个音频流合二为一。因此,如果一个是5.1而另一个是立体声,那么你将拥有一个8通道流。您可以使用OS X上的Soundflower将这些通道映射到不同的输出设备,但我不了解Linux。听起来很不方便。您还可以使用Adobe Premiere或其他NLE之类的东西将不同的音轨映射到不同的输出。
Elliott B

我害怕那些“孩子们”已经学会了另一种语言......至少我希望如此。:-)
哈斯图尔2016年

您还可以将音轨混合到立体声,然后将它们全部放入5.1音轨(忽略中央/低音炮声道),然后将它们复制回电影中。然后你可以在任何5.1声卡上播放它,只需将耳机和扬声器插入适当的输出即可。
JonasCz

Answers:


3

想法

如何打破(黄油)飞轮 [ ]

您可以使用所有音频和字幕轨道在本地流式传输整部电影,例如vlc
然后将两个客户端连接到该流,选择语言(和/或字幕)以及不同的音频输出(我们假设已经配置)将“足够”

此外,使用新的电视,平板电脑或移动电话,不需要在计算机上运行客户端......当你暂停所有暂停的流光时...它也应该与Windows一起使用(总是假设如果要在计算机上运行两个客户端,则已配置的音频输出可能包含第三方程序。

有些话更多

典型的流命令行可以类似于

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

需要选项--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)

阅读vlc -H以获得其他(吨)选项的一些提示。

“玩”

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

其中x是您要在该客户端上侦听的音频流的编号。
所有这些都应该很容易从服务器/客户端GUI完成...

参考资料和进一步阅读
您可能想要阅读Luuk的博客页面“使用VLC在多台计算机上同步播放多个视频剪辑” [ 1 ]中的更多内容,您最终可以尝试从videolan的这个wiki页面添加外部音频轨道[ 2 ],或者你可以按照安东尼奥在这个答案[ 3 ]中的建议玩Gstreamer和不同的输出。

GStreamer:
#必须知道曲目的数量和顺序......

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″

上面的Gstreamer命令本身可以是一个最小的工作答案,也可以是一个保存(黄油)飞行的路径
......但我很少想要捍卫自己的昵称。


请注意,RST IP需要在224.0.0.0到239.255.255.255(多播IP范围)范围内,否则您将无法连接到客户端。似乎任何此类IP都可以正常工作。
chx

@chx让我知道这个想法是否适用于你的另一个问题...
Hastur

是的,它确实!我把它写到了superuser.com/a/1422462/41259,但我认为这个细节值得一提。
chx

0

流式传输解决方案有一个缺点 - 客户端使用缓存,它们可能会不同步。它发生在我身上。

我发现同时运行两个不同轨道的另一种方法是运行两个VLC实例并同步它们的播放。但是,如果没有自动化,我就无法正常完成(手动操作一个接一个地导致延迟)。

解决方案是使用Web界面同步控制两个VLC实例。它可以通过GUI或控制台启用:

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

对于每个VLC实例,使用不同的端口。要控制播放一个命令就足够了 - 暂停切换: http://:any_password@127.0.0.1:8081/requests/status.xml?command=pl_pause"

有关命令的更多信息

在这种情况下,您所要做的就是创建一个程序/脚本,同时向两个URI发送HTTP请求。我为它编写了非常简单的golang程序(这里是源代码)。JS是另一个很好的候选人。更进一步,可以创建更多命令,为该程序/脚本分配全局键绑定。

该方法运作良好的要点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.