วิธีการเล่นภาพยนตร์ฟังเพลงสองแทร็คพร้อมกัน?


10

ฉันมีไฟล์ภาพยนตร์พร้อมแทร็กเสียงหลายแทร็ค (ในคอนเทนเนอร์ MKV) ฉันต้องการดูภาพยนตร์ในขณะที่ส่งภาษาหนึ่งไปยังลำโพง (สำหรับเด็ก ๆ ) และภาษาอื่นไปยังหูฟัง (สำหรับตัวฉันเอง) ทำให้แทร็คซิงค์กันถ้าภาพยนตร์หยุดชั่วคราวและอื่น ๆ

สมมติว่าระบบของฉันมีเอาต์พุตเสียงสองตัวที่กำหนดค่าไว้อย่างเหมาะสมแล้ว

มีวิธีทำเช่นนี้กับเครื่องเล่นสื่อใน Linux? ฉันได้ตรวจสอบ MPlayer และ VLC แล้วและพวกเขาสนับสนุนเฉพาะการเลือกหนึ่งในแทร็กเสียงที่มีอยู่


1
คุณกำลังถามคำถามนอกหัวข้อ (การช็อปปิ้งซอฟต์แวร์) คำถามที่กำลังมองหาคำแนะนำเกี่ยวกับผลิตภัณฑ์บริการหรือการเรียนรู้อยู่นอกหัวข้อ โปรดดูในหัวข้อ ลองsoftwarerecs.stackexchange.com แต่โปรดอ่านอะไรเป็นสิ่งจำเป็นสำหรับคำถามเพื่อให้มี "ข้อมูลที่เพียงพอ"
DavidPostill

บางทีคุณอาจเข้ารหัสไฟล์อีกครั้งโดยรวมเสียงทั้งสองเข้าไว้ในที่เดียว ดังนั้นหากหนึ่งคือ 5.1 และอื่น ๆ เป็นสเตอริโอคุณจะมีสตรีม 8 ช่อง คุณสามารถแมปช่องสัญญาณเหล่านี้กับอุปกรณ์ส่งออกที่แตกต่างกันโดยใช้ Soundflower บน OS X แต่ฉันไม่รู้เกี่ยวกับ Linux ฟังดูไม่สะดวกมาก คุณสามารถใช้อะไรบางอย่างเช่น Adobe Premiere หรือ NLE อื่นเพื่อแมปแทร็กเสียงที่แตกต่างกันไปยังเอาท์พุทที่แตกต่างกัน
เอลเลียต B

ฉันกลัวว่า the_ "kids" _ ได้เรียนรู้ภาษาอื่นแล้ว ... อย่างน้อยฉันก็หวังว่า :-)
Hastur

คุณสามารถผสมแทร็กเสียงเป็นสเตอริโอแล้วใส่ลงในแทร็กเสียง 5.1 (โดยไม่สนใจช่องกลาง / ซับวูฟเฟอร์) จากนั้น mux กลับเข้าไปในภาพยนตร์ จากนั้นคุณสามารถเล่นกับการ์ดเสียง 5.1 ใด ๆ เพียงเสียบหูฟังและลำโพงเข้ากับเอาต์พุตที่เหมาะสม
JonasCz - Reinstate Monica

คำตอบ:


3

ความคิด

หรือที่รู้จักวิธีที่จะทำลาย (เนย) บินบนล้อ [ บิน ]

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 [ 2 ]หรือคุณสามารถเล่นกับ 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

สตรีมมิ่งโซลูชันมีข้อเสียเปรียบ - ลูกค้าใช้แคชและพวกเขาสามารถซิงค์ได้ มันเกิดขึ้นกับฉัน

อีกวิธีหนึ่งในการใช้งานสองแทร็คที่แตกต่างกันซึ่งฉันคิดว่ามีประโยชน์สำหรับฉันคือการใช้ VLC สองอินสแตนซ์และซิงค์การเล่นของพวกเขา แต่ฉันไม่สามารถทำได้อย่างถูกต้องหากไม่มีระบบอัตโนมัติ (การดำเนินการด้วยตนเองทำทีละตัวซึ่งทำให้เกิดความล่าช้า)

วิธีแก้ไขคือควบคุมอินสแตนซ์ 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"

ข้อมูลเพิ่มเติมเกี่ยวกับคำสั่ง

ในกรณีดังกล่าวสิ่งที่คุณต้องทำคือการสร้างโปรแกรม / สคริปต์ที่ส่งคำร้องขอ HTTP ไปยัง URI ทั้งสองพร้อมกัน ฉันเขียนโปรแกรม golang ง่าย ๆ (นี่คือซอร์สโค้ด ) JS เป็นอีกหนึ่งตัวเลือกที่ดีสำหรับวัตถุประสงค์นั้น ยิ่งไปกว่านั้นยังสามารถสร้างคำสั่งเพิ่มเติมกำหนดการเชื่อมโยงคีย์ส่วนกลางให้กับโปรแกรม / สคริปต์

ประเด็นหลักที่วิธีการใช้งานได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.