2012-01-20 4 views
11

VLC가 닫힐 때까지 기다리지 않고 스크립트를 사용하여 Linux 셸 스크립트로 VLC를 조작 할 수있는 방법이 있습니까?Linux 쉘 : VLC 프로그래밍

cvlc test.mp3 
echo "Now playing!" 
sleep 200 
cvlc://pause:60 

이 코드는 파일이 완료 될 때까지 VLC를 계속 실행하고 분명 늦었 파일을 일시 중지 할 것입니다.

+4

'cvlc test.mp3'와 같은 백그라운드에서 명령을 실행하려 했습니까? – user219882

답변

15

당신은 VLC의 DBUS 인터페이스를 사용해야합니다.

enter image description here

지금, 당신은 VLC의 mpris 인터페이스를 사용할 수 있습니다. 그것은 클레멘 타인, 밴시, 송 버드, 등등과 같은 대부분의 플레이어를위한 표준입니다.

그래서, 현재 재생중인 노래를 일시 중지하고 싶다고 가정 해 보겠습니다.

dbus-send --print-reply --session --dest=org.mpris.vlc /Player org.freedesktop.MediaPlayer.Pause 

는 노래를 재생하려면

dbus-send --print-reply --session --dest=org.mpris.vlc /Player org.freedesktop.MediaPlayer.Play 

내가 일반적으로 나에게 사용할 수있는 DBUS 인터페이스에 대해 알고 qdbusviewer를 사용합니다.

+5

당신의 솔루션이 올바른 방향으로 나를 가리켰음에도 불구하고 현재 VLC는 약간 다른 구현만을 허용합니다. 예를 들면 다음과 같습니다.'dbus-send --session --type = method_call --print-reply --dest = org.mpris.MediaPlayer2.vlc/org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause' –

+0

Cool. 내 대답은 도움이 되었기 때문에 다행이다. –

+0

qdbusviewer를 언급 해 주셔서 감사합니다. – exic

2

표준 입력 또는 명명 된 파이프에서 리디렉션 할 수있는 것처럼 보입니다. 더 복잡한 것들을 위해서 libvlc를 사용할 수 있습니다.

http://wiki.videolan.org/Uncommon_uses

2

Dbus는 단방향이지만 dbus는 모든 시스템에 존재하지 않습니다. 더 일반적인 방법은 RC 인터페이스를 사용하는 것입니다 :

cvlc -I rc --rc-host localhost:11337 -d

그런 다음 하나는 TCP 소켓에 파이프 명령에 netcat을 사용할 수 있습니다. 예를 들면 :

vlc -I rc --rc-host localhost:11337 test.mp3 -d & 
echo "Now playing!" 
sleep 200 
echo pause | netcat localhost 11337 

편집 : 나는 oldrc 인터페이스를 발견 한 몇 가지 다른 인터페이스를 테스트 한 후 UNIX 도메인 소켓 따라서 다음 밖으로 방화벽 함께 놀러 또는 걱정할 필요와 함께 잘 작동합니다 받아

귀하의 vlc 인스턴스를 망칠 네트워크의 다른 모든 사람들에 대해서.

vlc -I oldrc --rc-unix /var/run/vlc.sock -d 
echo "Now Playing!" 
sleep 200 
echo "pause" | netcat -U /var/run/vlc.sock