我有多个音轨的电影文件(在MKV容器中)。我希望在向扬声器(为孩子们)发送一种语言和向耳机(对我自己)发送另一种语言时观看电影,如果电影暂停,则保持音轨同步等。
假设我的系统已经正确配置了两个音频输出。
有没有办法在Linux中使用媒体播放器?到目前为止,我已经检查了MPlayer和VLC,他们只支持选择一个可用的音轨。
:-)
我有多个音轨的电影文件(在MKV容器中)。我希望在向扬声器(为孩子们)发送一种语言和向耳机(对我自己)发送另一种语言时观看电影,如果电影暂停,则保持音轨同步等。
假设我的系统已经正确配置了两个音频输出。
有没有办法在Linux中使用媒体播放器?到目前为止,我已经检查了MPlayer和VLC,他们只支持选择一个可用的音轨。
:-)
Answers:
又如何打破(黄油)飞轮 [ 飞 ]。
您可以使用所有音频和字幕轨道在本地流式传输整部电影,例如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命令本身可以是一个最小的工作答案,也可以是一个保存(黄油)飞行的路径
......但我很少想要捍卫自己的昵称。
流式传输解决方案有一个缺点 - 客户端使用缓存,它们可能会不同步。它发生在我身上。
我发现同时运行两个不同轨道的另一种方法是运行两个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是另一个很好的候选人。更进一步,可以创建更多命令,为该程序/脚本分配全局键绑定。
该方法运作良好的要点。