Як відтворити фільм, слухаючи дві звукові доріжки одночасно?


10

У мене є фільми з декількома звуковими записами (у контейнері MKV). Я хочу переглянути фільм, надсилаючи одну мову мовцям (для дітей), а іншу мову в навушники (для себе), зберігаючи доріжки синхронізовано, якщо фільм призупинено тощо.

Припустимо, у моїй системі вже є два аудіовиходи, правильно налаштовані.

Чи можна це зробити з медіаплеєром в Linux? Я перевірив MPlayer і VLC досі, і вони підтримують лише вибір однієї з доступних аудіозаписів.


1
Ви ставите запитання поза темою (покупки програмного забезпечення). Питання щодо рекомендацій щодо товарів, послуг або навчальних матеріалів поза темою. Дивіться тему . Спробуйте softwarerecs.stackexchange.com але , будь ласка , спочатку прочитайте , що потрібно для питання , щоб утримувати «достатньо інформації» .
DavidPostill

Можливо, ви могли б перекодувати файл, поєднавши обидва аудіо потоки в один. Отже, якщо один - 5.1, а другий - стерео, у вас буде 8-канальний потік. Ви можете зіставити ці канали на різні пристрої виводу за допомогою Soundflower в OS X, але я не знаю про Linux. Звучить дуже незручно. Ви також можете використати щось на зразок Adobe Premiere або іншого NLE для відображення різних аудіозаписів на різні виходи.
Елліотт Б

Я боюся, що ті «діти» _ вже навчились іншої мови ... принаймні сподіваюся. :-)
Гастур

Ви також можете змішати аудіозаписи до стерео, а потім помістити їх у звукову доріжку 5.1 (ігноруючи центральний / сабвуферні канали), а потім повернути їх назад у фільм. Потім ви можете відтворити його на будь-якій звуковій карті 5.1, просто підключіть навушники та динаміки до відповідного виходу.
JonasCz

Відповіді:


3

Ідея

aka Як зламати (масло) муху на колесі [ Муха ] .

Ви можете передавати локально весь фільм з усіма звуковими записами та субтитрами, наприклад, за допомогою vlc.
Тоді буде "достатньо" підключити до цього потоку двох клієнтів, вибравши мову (та / або субтитри) та інший аудіо вихід (який, на нашу думку, вже налаштований).

Більше того, з новим телевізором, планшетом чи мобільними телефонами не потрібно запускати клієнтів на комп’ютері ... і коли ви вставляєте паузу, стример ви вставляєте в паузу все ... і він також повинен працювати з вікнами (завжди передбачається аудіо вихід вже налаштований, можливо, із програмами третьої частини, якщо ви хочете запустити двох клієнтів на комп’ютері).

Деякі слова більше

Типовий командний рядок потокового потоку може бути подібний до

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 ] , ви можете врешті спробувати додати зовнішню аудіозапис, починаючи з цієї сторінки вікі відеолану [ 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 одночасно. Я написав для нього дуже просту програму голанг (ось вихідний код ). JS - ще один хороший кандидат для цієї мети. У подальшому можна зробити більше команд, призначити глобальну прив'язку ключів до цієї програми / сценарію.

Головний момент, що підхід працює добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.