One think I have wanted to figure out for a along time is how to run vlc from cron to do recording of video streams on the net. The task is trivial with mplayer, but I do not really trust the security of mplayer (it crashes too often on strange input), and thus prefer vlc. I finally found a way to do it today. I spent an hour or so searching the web for recipes and reading the documentation. The hardest part was to get rid of the GUI window, but after finding the dummy interface, the command line finally presented itself:
URL=http://www.ping.uio.no/video/rms-oslo_2009.ogg SAVEFILE=rms.ogg DISPLAY= vlc -q $URL \ --sout="#duplicate{dst=std{access=file,url='$SAVEFILE'},dst=nodisplay}" \ --intf=dummy
The command stream the URL and store it in the SAVEFILE by duplicating the output stream to "nodisplay" and the file, using the dummy interface. The dummy interface and the nodisplay output make sure no X interface is needed.
The cron job then need to start this job with the appropriate URL and file name to save, sleep for the duration wanted, and then kill the vlc process with SIGTERM. Here is a complete script vlc-record to use from at or cron:
#!/bin/sh set -e URL="$1" SAVEFILE="$2" DURATION="$3" DISPLAY= vlc -q "$URL" \ --sout="#duplicate{dst=std{access=file,url='$SAVEFILE'},dst=nodisplay}" \ --intf=dummy < /dev/null > /dev/null 2>&1 & pid=$! sleep $DURATION kill $pid wait $pid