Programmer l’enregistrement d’un flux MP3
Tags : mp3, mplayer, ogg, stream, webradio
Les Webradio c'est bien, surtout lorsqu'il s'agit également de radios libres hertziennes. Cependant, toutes ne proposent pas de podcasts ou d'enregistrements Ogg ou MP3 des émissions. Il faut donc se rabattre sur l'enregistrement et l'encodage du flux. Comme cela ne suffit pas, il faut, bien sûr, le faire alors que l'on ne dispose pas d'une machine connectée sous la main.
Pour réussir cette recette, vous aurez besoin :
- d'Mplayer ou de n'importe quel lecteur capable d'envoyer le flux audio dans un fichier de type WAV
- d'un peu de place (dépendant de la durée d'enregistrement)
- d'un encodeur Ogg ou MP3 comme lame
Le reste est dans n'importe quel Unix digne de ce nom. Enregistrer le flux dans un fichier est relativement simple avec Mplayer :
% mplayer -cache 128 -ao \ pcm:waveheader:file=/tmp/audio.wav \ -vc dummy -vo null \ http://url/du/flux.mp3
On pourra interrompre l'opération avec un petit CTRL+C. Reste ensuite à encoder le fichier audio.wav avec lame par exemple :
% lame tmp/audio.wav \ /tmp/MonFichier-`date +'%d_%B-%Hh%Mm%Ss'`.mp3
Comme nous sommes des gens intelligents, on utilise directement la chaîne formatée retournée par la command date pour nommer le fichier. Ceci nous évitera tout écrasement de fichiers et facilitera le classement.
Pour automatiser, on place tout cela dans un script Shell :
#!/bin/sh # mplayer détaché du terminal mplayer -cache 128 -ao \ pcm:waveheader:file=/mnt/WDext/audio.wav \ -vc dummy -vo null \ http://live.radio-gresivaudan.org:8000/RadioSaintAffrique & # durée de l'enregistrement sleep $1
# arrêt mplayer killall mplayer
#encodage lame /mnt/WDext/audio.wav \ /mnt/WDext/MonFichier-`date +'%d_%B-%Hh%Mm%Ss'`.mp3
# ménage rm -rf /mnt/WDext/audio.wav
Maintenant, le script peut être lancé avec en argument le nombre de secondes correspondant à la durée de l'enregistrement. Comme nous ne sommes pas là, nous faisons appel à la commande at :
% at 17h55 > ~/le_script 2400 >^D
Et c'est fini. Notez qu'il est possible de se passer de la commande killall qui fait un peu tache en utilisant l'option -endpos 00:00:14 de la commande mplayer. Celle-ci permet de spécifier directement une durée d'enregistrement. La méthode killall présente l'avantage de fonctionner avec n'importe quel outil d'enregistrement.
Complément de dernière minute : mplayer peut avoir des difficultés à fonctionner depuis un job at ou un script d'init. Cela vient du fait qu'il cherche à détecter le type de terminal et à réagir en conséquence (Terminal type unknown is not defined.). La méthode la plus simple pour corriger le problème est tout simplement d'utiliser </dev/null en fin de ligne. Exemple :
% echo "/usr/bin/mplayer -cache 128 -ao pcm:waveheader"\ ":file=/mnt/WDext/tmp/j3/audio19.wav -vc"\ " dummy -vo null -endpos 00:35:00"\ " http://live.radio-gresivaudan.org:8000/RadioSaintAffrique"\ " < /dev/null" | at 20h00