web-dev-qa-db-ja.com

2つのサウンドトラックを同時に聴いている映画を再生するにはどうすればよいですか?

複数のオーディオトラックを含むムービーファイルがあります(MKVコンテナ内)。ある言語をスピーカー(子供用)に、別の言語をヘッドホン(自分用)に送信したり、映画が一時停止した場合にトラックを同期させたりしながら、映画を見たいです。

私のシステムにはすでに2つのオーディオ出力が適切に構成されていると仮定します。

Linuxのメディアプレーヤーでこれを行う方法はありますか?これまでにMPlayerとVLCをチェックしましたが、利用可能なオーディオトラックの1つを選択することしかサポートしていません。

10
Martin Vidner

アイデア

別名ホイール上の(バター)フライを壊す方法 [ ハエ ]

すべてのオーディオトラックと字幕トラックを含む映画全体をローカルでストリーミングできます。 vlcを使用します。
次に、2つのクライアントをそのストリームに接続し、言語(および/または字幕)と異なるオーディオ出力(想定)を選択するのに「十分」になります。構成済み)。

さらに、新しいテレビ、タブレット、または携帯電話では、コンピューターでクライアントを実行する必要はありません...ストリーマーを一時停止すると、すべて一時停止します...ウィンドウでも機能するはずです(常に想定されています)コンピューターで2つのクライアントを実行する場合は、オーディオ出力が既に構成されている可能性があります。

もう少し

一般的なストリーミングコマンドラインは、次のようになります。

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 ]、または、この回答でアントニオが提案したように、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コマンドは、それ自体で最小限の実用的な答えにすることも、(バター)フライを保存するためのパスにすることもできます...
...しかし、自分のニックネームを守りたくなることはめったにありません。

3
Hastur

ストリーミングソリューションには欠点があります。クライアントはキャッシュを使用し、同期がとれない可能性があります。それは私に起こりました。

2つの異なるトラックを同時に実行する別のアプローチは、VLCの2つのインスタンスを実行し、それらの再生を同期することです。しかし、自動化なしでは適切に行うことはできません(手動アクションが1つずつ行われ、遅延が発生します)。

解決策は、Webインターフェイスを使用して両方のVLCインスタンスを同期的に制御することです。 GUIまたはコンソールを介して有効にできます。

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

VLCインスタンスごとに、異なるポートを使用します。再生を制御するには、1つのコマンドで十分です-一時停止トグル:http://:[email protected]:8081/requests/status.xml?command=pl_pause"

詳細 コマンドについて。

その場合、あなたがしなければならないのは、HTTPリクエストを両方のURIに同時に送信するプログラム/スクリプトを作成することだけです。私はそれのために非常に単純なgolangプログラムを書きました(ここに ソースコード があります)。 JSはその目的のためのもう一つの良い候補です。さらに進んで、より多くのコマンドを作成し、そのプログラム/スクリプトにグローバルキーバインディングを割り当てることができます。

アプローチがうまく機能するという要点。

0
Valera Leontyev