How to play an audio file on the command line or as a cron job in Linux

Written by - 2 comments

Published on - Listed in Linux Multimedia


In October 2016 I already wrote how a multimedia file could be played with VLC and as a cron job (Play a multimedia file in VLC as cron job).

In this case we're still talking about the same idea as in my article from October 2016: The cron job should play the "It's coffee time" audio file. But opening a VLC player to play an audio file is kind of overkill.

Let's first create an audio file from the Youtube video using "youtube-dl":

$ youtoube-dl -x https://www.youtube.com/watch?v=6SRXUufvZUE

The -x parameter extracts the audio from the video file, leaving you with just the sound of the video: COFFEE-TIME-6SRXUufvZUE.m4a.

Now this file can be played using ffplay, which is a command from the package "ffmpeg":

$ /usr/bin/ffplay -nodisp -autoexit /home/myuser/Music/COFFEE-TIME-6SRXUufvZUE.m4a

Important parameters here:

-nodisp: Avoids opening a user interface to play the audio (we don't need this for a cron job in the background)
- autoexit: Automatically exit ffplay once the file finished, otherwise the command will continue to run

With these parameters we can now schedule the cron job:

00 09 * * 1-5 /usr/bin/ffplay -nodisp -autoexit /home/myuser/Music/COFFEE-TIME-6SRXUufvZUE.m4a

Definitely a much more lightweight and elegant solution than the previous one using VLC. 


Add a comment

Show form to leave a comment

Comments (newest first)

ck from Switzerland wrote on Jun 5th, 2021:

XiaoPanPanKevinPan, thanks for your comment. But this is certainly not a trap! However I agree, I should have mentioned that this cron job was created in a running X Session. If you have not started a graphical session, you need to set the DISPLAY variable, but I have not tried it this way. The machine I used this on is a monitoring computer running Linux Mint where a browser is opened to show the current monitoring status. So whenever the cron job is running, an X session is available.


XiaoPanPanKevinPan from Taiwan, ROC wrote on Jun 5th, 2021:

(Debian GNU/Linux 10 (buster), GNOME 3.30.2)
I'm here just to prevent more people from falling into the same trap.
I've been trying this method for half an hour, but it doesn't work - till I just add "DISPLAY=:1" between the time and the command. Now it is functioning.
BTW in some distro, the default "DISPLAY" is ":0".