2012-01-20 27 views
11

LinuxシェルスクリプトでVLCを操作し、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

クール。私の答えが助けになったことをうれしく思っています。 –

+0

qdbusviewerに言及してくれてありがとう。 – exic

2

標準入力または名前付きパイプからリダイレクトできるようです。より複雑なものについては、libvlcを使用することができます。

http://wiki.videolan.org/Uncommon_uses

2

Dbusは一方向ですが、dbusはすべてのシステムに存在しません。より一般的な方法は、RCインターフェースを使用することであろう。

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

は、1つは、TCPソケットにパイプコマンドへのnetcatを使用することができます。たとえば、次のように

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

EDIT:

私は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 
関連する問題