30 juillet 2007

Programmer l’enregistrement d’un flux MP3

Tags : , , , ,

posté dans Outils Unix |

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
Article posté on Lundi, 30 juillet 2007 à 16:53 dans Outils Unix. Vous pouvez suivre les commentaires sur cet article via un feed RSS 2.0. Vous pouvez laisser un commentaire. Le Ping n'est actuellement pas autorisé.

Il y a actuellement 4 réponses pour “Programmer l’enregistrement d’un flux MP3”

  1. 1 Le 30 juillet 2007, kolter à écrit :

    C’est vrai que le killall est très barbare surtout si on utilise ce script pour faire 2 enregistrements simultanés auquel cas on tue tout et c’est pas top. Petit indice d’amélioration, faire des tests autour de la variable $! (pid du dernier processus lancé) avant et après l’exécution de "mplayer –blah … &", ainsi un kill tout court sur le processus sera parfait :).

    M.

  2. 2 Le 30 juillet 2007, Rahan à écrit :

    D’après ce que je vois, tu fais du MP3->WAV->MP3. C’est pas très optimal comme chaîne… Tu pourrais utiliser la commande dumpstream de Mplayer qui te donne directement le MP3 d’origine.

  3. 3 Le 1 août 2007, colis à écrit :

    sinon un outil qui peut être utile pour les pipes et les conversions à la volée (si par exemple on avait voulu transformer le wav (la sortie de mplayer) en mp3 ou ogg en même temps), c’est "vbuf" (vrb.slashusr.org/ ), qui évite les blocages si on lit plus vite qu’on encode.

  4. 4 Le 1 août 2007, Lefinnois à écrit :

    En effet, je fais habituellement du MP3->WAV->MP3 car j’édite souvent le WAV avec audacity pour le nettoyer, le couper, etc. Certes dans le cas présent la double conversion et/ou la suppression du WAV est en trop. Merci pour dumpstream que je ne connaissais pas.

Laisser un commentaire

*
Pour prouver que vous n'êtes pas un bot, recopiez le code ci-dessous
Anti-Spam Image