두 개의 사운드 트랙을 동시에 듣는 영화를 재생하는 방법은 무엇입니까?


10

여러 개의 오디오 트랙이있는 동영상 파일이 있습니다 (MKV 컨테이너에 있음). 영화가 일시 정지 된 경우 트랙을 동기화 된 상태로 유지하면서 하나의 언어를 스피커 (어린 이용) 및 다른 언어를 헤드폰 (자체 용)에 보내는 동안 영화를보고 싶습니다.

시스템에 이미 2 개의 오디오 출력이 올바르게 구성되어 있다고 가정합니다.

리눅스에서 미디어 플레이어로 이것을 할 수있는 방법이 있습니까? 지금까지 MPlayer와 VLC를 확인했으며 사용 가능한 오디오 트랙 중 하나만 선택할 수 있습니다.


1
주제를 벗어난 질문을하고 있습니다 (소프트웨어 쇼핑). 제품, 서비스 또는 학습 자료 권장 사항을 찾는 질문은 주제가 맞지 않습니다. 주제를 참조하십시오 . 시도 softwarerecs.stackexchange.com을 하지만 먼저 읽어 보시기 바랍니다 "충분한 정보"를 포함하는 질문이 필요합니다 무엇 .
DavidPostill

두 오디오 스트림을 하나로 결합하여 파일을 다시 인코딩 할 수 있습니다. 따라서 하나는 5.1이고 다른 하나는 스테레오 인 경우 8 채널 스트림이됩니다. OS X에서 Soundflower를 사용하여 이러한 채널을 다른 출력 장치에 매핑 할 수 있지만 Linux에 대해서는 모르겠습니다. 매우 불편하게 들립니다. 또한 Adobe Premiere 또는 다른 NLE와 같은 것을 사용하여 다른 오디오 트랙을 다른 출력에 매핑 할 수 있습니다.
Elliott B

나는 "_ 아이들"_이 이미 다른 언어를 배웠을 까봐 두렵습니다. :-)
Hastur

오디오 트랙을 스테레오로 믹싱 한 다음 5.1 / 오디오 트랙 (중앙 / 서브 우퍼 채널 무시)에 모두 넣은 다음 영화에 다시 믹스 할 수도 있습니다. 그런 다음 모든 5.1 사운드 카드에서 재생할 수 있으며 헤드폰 및 스피커를 적절한 출력에 꽂기 만하면됩니다.
JonasCz-복원 모니카

답변:


3

아이디어

aka 휠에서 (버터) 파리를 끊는 방법 [ Fly ] .

예를 들어을 사용하여 모든 오디오 및 자막 트랙을 사용하여 전체 동영상을 로컬로 스트리밍 할 수 있습니다 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 ] 에서 더 많은 내용을 읽을 수 있습니다. 결국 videolan의이 위키 페이지에서 시작하여 외부 오디오 트랙을 추가 할 수 있습니다 . 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

스트리밍 솔루션에는 단점이 있습니다. 클라이언트는 캐시를 사용하며 동기화되지 않을 수 있습니다. 그것은 나에게 일어났다.

내가 유용하다고 생각한 두 개의 다른 트랙을 동시에 실행하는 또 다른 방법은 두 개의 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.