2つのサウンドトラックを同時に聞いて映画を再生する方法


10

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

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

Linuxのメディアプレーヤーでこれを行う方法はありますか?これまでにMPlayerとVLCを確認しましたが、サポートされているのは使用可能なオーディオトラックの1つだけです。


1
トピック外の質問をしている(ソフトウェアショッピング)。製品、サービス、または学習資料の推奨事項を求める質問はトピックから外れています。トピックを参照してください。softwarerecs.stackexchange.comを試して ください。最初に、質問に「十分な情報」を含めるには何が必要かをお読みください。
DavidPostill

おそらく、両方のオーディオストリームを1つに結合して、ファイルを再エンコードできます。したがって、1つが5.1でもう1つがステレオの場合、8チャネルストリームになります。OS XのSoundflowerを使用して、これらのチャネルをさまざまな出力デバイスにマッピングできますが、Linuxについては知りません。とても不便に聞こえます。Adobe Premiereや別のNLEなどを使用して、さまざまなオーディオトラックをさまざまな出力にマッピングすることもできます。
Elliott B

_ "子供" _は既に他の言語を学んでいると思います...少なくとも私は願っています。:-)
Hastur 2016年

また、オーディオトラックをステレオにミックスダウンしてから、それらをすべて5.1オーディオトラックに入れ(センター/サブウーファーチャネルは無視)、それらをムービーに多重化することもできます。その後、ヘッドフォンやスピーカーを適切な出力に接続するだけで、5.1サウンドカードで再生できます。
JonasCz-モニカを'25年

回答:


3

アイデア

別名[ バタフライ ]をホイールで破る方法 [ フライ ]

たとえば、を使用して、すべてのオーディオトラックと字幕トラックを含むムービー全体をローカルにストリーミングできます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 ]、または、Antonioがこの回答で提案したように、Gstreamerやさまざまな出力で遊ぶことができます[ 3 ]

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

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

2つの異なるトラックを同時に実行するもう1つの方法は、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://:any_password@127.0.0.1:8081/requests/status.xml?command=pl_pause"

コマンドの詳細

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

アプローチがうまく機能する主なポイント。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.