willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 477309

Linux Shell: VLC programming

Is there a way to manipulate VLC with a Linux shell script without the script waiting for VLC to close.

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

This code keeps running VLC until the file is completed, and then evidently it is to late to pause the file.

Upvotes: 13

Views: 9463

Answers (3)

Dwight Spencer
Dwight Spencer

Reputation: 1596

Dbus is one way but dbus does not exist on all systems. The more common method would be to use the rc interface:

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

Then one can use netcat to pipe commands into the tcp socket. For example:

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

EDIT:

After testing with a few other interfaces I have discovered the oldrc interface accepts UNIX domain sockets thus the following will work as well with out needing to play around with firewalls or worry about anyone else on the network messing around with your vlc instance.

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

Upvotes: 4

shadyabhi
shadyabhi

Reputation: 17234

You need to use dbus interface of VLC.

enter image description here

Now, you can use the mpris interface of VLC. It's a standard for most players like clementine, banshee, songbird, spotify etc.

So, lets suppose you want to Pause the currently playing song.

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

To play a song:

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

I generally use qdbusviewer to know about the dbus-interface available to me.

Upvotes: 18

Jeff M
Jeff M

Reputation: 101

It looks like you can redirect from standard input or a named pipe. For more complicated things you could use libvlc.

http://wiki.videolan.org/Uncommon_uses

Upvotes: 2

Related Questions