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.
linux
audio
video
media-player
Martin Vidner
sumber
sumber
:-)
Jawaban:
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
Diperlukan opsi
--sout-all
[ SO ]Baca
vlc -H
untuk memiliki beberapa petunjuk untuk opsi (ton) lainnya yang tersedia.Untuk "memainkan" arus
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 ] .
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.
sumber
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.
sumber