Bagaimana cara memutar film mendengarkan dua trek suara secara bersamaan?

10

Saya memiliki file film dengan beberapa trek audio (dalam wadah MKV). Saya ingin menonton film sambil mengirim satu bahasa ke speaker (untuk anak-anak) dan bahasa lain ke headphone (untuk saya sendiri), menjaga trek tetap sinkron jika film dijeda, dll.

Asumsikan sistem saya sudah memiliki dua output audio yang dikonfigurasi dengan benar.

Apakah ada cara untuk melakukan ini dengan pemutar media di Linux? Saya telah memeriksa MPlayer dan VLC sejauh ini, dan mereka hanya mendukung memilih salah satu trek audio yang tersedia.

Martin Vidner
sumber
1
Anda mengajukan pertanyaan di luar topik (belanja perangkat lunak). Pertanyaan yang mencari rekomendasi produk, layanan, atau materi pembelajaran di luar topik. Lihat Di Topik . Coba softwarerecs.stackexchange.com tetapi harap baca terlebih dahulu Apa yang diperlukan untuk pertanyaan mengandung "informasi yang cukup" .
DavidPostill
Mungkin Anda bisa menyandikan ulang file tersebut, menggabungkan kedua stream audio menjadi satu. Jadi, jika satu adalah 5.1 dan yang lainnya stereo, Anda akan memiliki aliran 8 saluran. Anda dapat memetakan saluran-saluran ini ke perangkat output yang berbeda menggunakan Soundflower di OS X, tapi saya tidak tahu tentang Linux. Kedengarannya sangat merepotkan. Anda juga dapat menggunakan sesuatu seperti Adobe Premiere atau NLE lainnya untuk memetakan trek audio yang berbeda ke output yang berbeda.
Elliott B
Saya takut bahwa "anak-anak" _ sudah mempelajari bahasa lain ... setidaknya saya harap. :-)
Hastur
Anda juga dapat mencampur trek audio ke stereo, kemudian memasukkan semuanya ke trek audio 5.1 (mengabaikan saluran tengah / subwoofer), dan kemudian menyatukannya kembali ke dalam film. Kemudian Anda dapat memainkannya di kartu suara 5.1 apa saja, cukup colokkan headphone & speaker ke output yang sesuai.
JonasCz

Jawaban:

3

Ide

aka Cara memecahkan (mentega) terbang di atas roda [ Terbang ] .

Anda dapat melakukan streaming secara lokal seluruh film dengan semua trek audio dan subtitle, misalnya dengan vlc.
Maka akan "cukup" untuk menghubungkan dua klien ke aliran itu, memilih bahasa (dan / atau subtitle) dan output audio yang berbeda (yang kami anggap sudah dikonfigurasi).

Terlebih lagi dengan televisi, tablet, atau ponsel baru, tidak perlu menjalankan klien di komputer ... dan ketika Anda menghentikan sementara streamer, Anda menghentikan sementara semua ... dan itu harus bekerja dengan windows juga (selalu diasumsikan output audio sudah dikonfigurasi mungkin dengan program bagian ketiga, jika Anda ingin menjalankan dua klien di komputer).

Beberapa kata lagi

Baris perintah streaming yang khas dapat serupa dengan

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

Diperlukan opsi --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)

Baca vlc -Huntuk memiliki beberapa petunjuk untuk opsi (ton) lainnya yang tersedia.

Untuk "memainkan" arus

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

di mana x adalah jumlah aliran audio yang ingin Anda dengarkan pada klien itu.
Semua harus mudah dilakukan dari GUI server / klien juga ...

Referensi dan bacaan lebih lanjut
Anda mungkin ingin membaca lebih banyak dari halaman blog Luuk "Gunakan VLC untuk memutar beberapa klip video pada banyak komputer secara bersamaan" [ 1 ] , Anda akhirnya dapat mencoba menambahkan trek audio eksternal mulai dari halaman wiki ini dari videolan [ 2 ] , atau Anda dapat bermain dengan Gstreamer dan output berbeda seperti yang disarankan oleh Antonio dalam jawaban ini [ 3 ] .

GStreamer:
# Jumlah dan urutan trek harus diketahui ...

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″

Perintah Gstreamer di atas bisa menjadi jawaban yang bekerja minimal dengan sendirinya atau jalan untuk menyelamatkan lalat (mentega) ...
... tetapi jarang saya tergoda untuk mempertahankan nama panggilan saya sendiri.

Cepat
sumber
Perhatikan bahwa IP RST harus berada dalam kisaran 224.0.0.0 hingga 239.255.255.255 (rentang IP multicast) atau Anda tidak akan dapat menghubungkan lebih dari klien ke sana. Sepertinya IP seperti itu hanya akan berfungsi.
chx
@ chx Beri tahu saya jika idenya berhasil dengan masalah Anda yang lain ...
Hastur
Ya itu! Saya menulisnya superuser.com/a/1422462/41259 tapi saya pikir detail ini layak disebutkan di sini.
chx
0

Solusi streaming memiliki kelemahan - klien menggunakan cache dan mereka dapat keluar dari sinkronisasi. Itu terjadi pada saya.

Pendekatan lain untuk menjalankan dua trek berbeda secara simultan yang menurut saya berguna untuk diri saya adalah menjalankan dua instance VLC dan menyinkronkan pemutarannya. Tetapi saya tidak dapat dilakukan dengan benar tanpa otomatisasi (tindakan manual dibuat satu-per-satu yang menyebabkan penundaan).

Solusinya adalah mengontrol kedua instance VLC secara sinkron menggunakan antarmuka web. Itu dapat diaktifkan melalui GUI atau konsol:

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

Untuk setiap instance VLC gunakan port yang berbeda. Untuk mengontrol pemutaran, satu perintah sudah cukup - jeda toggle: http://:[email protected]:8081/requests/status.xml?command=pl_pause"

Info lebih lanjut tentang perintah.

Dalam hal ini yang harus Anda lakukan adalah membuat program / skrip yang mengirimkan permintaan HTTP ke kedua URI secara bersamaan. Saya menulis program golang yang sangat sederhana untuk itu (di sini adalah kode sumbernya ). JS adalah kandidat lain yang baik untuk tujuan itu. Lebih jauh memungkinkan untuk membuat lebih banyak perintah, menetapkan ikatan kunci global untuk program / skrip itu.

Poin utama bahwa pendekatan tersebut berfungsi dengan baik.

Valera Leontyev
sumber