#1 Le 17/03/2013, à 07:26
- classdroogies
[Script]RecNow - Script pour la capture audio
Salut,
RecNow est un script bash permettant d'enregistrer en wav, mp3 et ogg toute les sources de captures de la carte son mais également tout ce qui en sort :
On a le choix entre plusieurs logiciels, en backend pour la capture :
ffmpeg - sox - gstreamer
Pas certain que ça serve a beaucoup vu le nombre de prog existant...Mais comme je fais mumuse avec bash et zenity, je partage
Impossible de faire fonctionner l'encodage flac avec ffmpeg sous ubuntu si quelqu'un à une idée....
Je n'ai pas de problème pour le faire avec sox et gstreamer, mais du coup je ne l'ai pas mis dans le script.
Le script sauvegarde les paramètres du dernier enregistrement dans :
~/.recnow.conf
Et vérifie la présence des logiciels pouvant être utilisés comme backend pour la capture :
#! /bin/bash
#
# RecNow est un script qui permet d'enregistrer toute les sources de la carte
# son avec 3 logiciels au choix :
#
# ffmpeg - sox - gstreamer
#
# Il permet également d'enregistrer ce que vous écoutez -> choisir Source : 'Mix'
#
# Il permet d'encoder en plusieurs formats différents :
# wav - ogg - mp3
#
# Les paramètres utilisés lors de la dernières captures sont mémorisés dans :
# ~/.recnow.conf
#
# Les dépendances :
# zenity - alsa-utils - ffmpeg ou sox ou gstreamer(avec gstreamer0.10-tools)
#
#
# -------------------------------------------------------------------> Par ClassDroogies
#
########################################################################################
# PARAMETRES
########################################################################################
PARAMTYPE=("Emplacement" "Nom" "Format" "Source" "Logiciel")
# Récupération de l'id du controls des sources de capture
CAPID=`amixer controls | grep 'Capture Source'| cut -d"," -f1`
# Récupération de la liste des périphériques de capture
CAPLIST=(`amixer cget "$CAPID" | grep "#" | cut -d"#" -f2 | sed "s/\ /-/2"`)
########################################################################################
# VERIFICATION LOGICIEL DE CAPTURE
########################################################################################
if [[ -e "/usr/bin/gst-launch-0.10" ]]; then
SOFTLIST[${#SOFTLIST[@]}]="gstreamer"
fi
if [[ -e "/usr/bin/ffmpeg" ]]; then
SOFTLIST[${#SOFTLIST[@]}]="ffmpeg"
fi
if [[ -e "/usr/bin/rec" ]]; then
SOFTLIST[${#SOFTLIST[@]}]="sox"
fi
# Si aucun logiciel n'est présent on affiche un message
if [[ "${#SOFTLIST[@]}" -eq 0 ]]; then
zenity --error --title="Aucun logiciel de capture" --no-wrap \
--text="<span font='15'><b>Aucun logiciel de capture requis pour RecNow n'est présent !</b></span>\n\nInstaller l'un des logiciels suivant : \n\n\t> ffmpeg\n\n\t> sox\n\n\t> gstreamer"
exit
fi
########################################################################################
# CHARGEMENT CONFIGURATION
########################################################################################
if [[ -e "$HOME/.recnow.conf" ]]; then
PARAM=(`cat "$HOME/.recnow.conf"`)
else
PARAM=("$HOME" "rec_now" "wav" "${CAPLIST[1]}" "${SOFTLIST[0]}")
for ELEM in "${PARAM[@]}"; do
echo "$ELEM">>"$HOME/.recnow.conf"
done
fi
########################################################################################
# MAIN LOOP
########################################################################################
CONTINUER=0
while [ $CONTINUER -eq 0 ]
do
# Tableau de paramètres
PARAMLIST=`for (( i = 0; i < "${#PARAMTYPE[@]}"; i++ )); do
echo "${PARAMTYPE[$i]}" "${PARAM[$i]}"
done`
# Menu principal
MENUSELECT=`zenity --list --title="RecNow" --text="<span><b>Modifer les paramètres en double cliquant sur la ligne.</b></span>" \
--width=400 --height=250 --ok-label="Démarrer l'enregistrement" --cancel-label="Quitter" \
--column="PARAMETRES" --column="VALEURS" \
$PARAMLIST`
# Sous menu pour la configuration
case $MENUSELECT in
"Emplacement")
PATHFILE=`zenity --file-selection --directory --title="Emplacement du fichier d'enregistrement"`
if [[ -n $PATHFILE ]]; then
PARAM[0]=$PATHFILE
fi
;;
"Nom")
NAME=`zenity --entry --title="Nom de votre enregistrement" --width="500" --text="Nom du fichier (sans l'extension) :" | tr " " "_"`
if [[ -n $NAME ]]; then
PARAM[1]=$NAME
fi
;;
"Format")
FORMAT=`zenity --list --title="Choix du format" --text="Sélectionner le format de sortie :" \
--hide-header --column="" --radiolist --column="Formats" TRUE "wav" FALSE "mp3" FALSE "ogg"`
if [[ -n $FORMAT ]]; then
PARAM[2]=$FORMAT
fi
;;
"Source")
SRC=`zenity --list --title="Choix de la source" --text="Sélectionner la source à enregistrer :" \
--print-column=2 --hide-header --column="Number" --column="Name" ${CAPLIST[@]}`
if [[ -n $SRC ]]; then
PARAM[3]=$SRC
fi
;;
"Logiciel")
SOFT=`zenity --list --title="Choix du logiciel" --text="Sélectionner le logiciel à utiliser pour la capture :" \
--hide-header --column="Name" ${SOFTLIST[@]}`
if [[ -n $SOFT ]]; then
PARAM[4]=$SOFT
fi
;;
*)
# Traitement
CONTINUER=$?
if [[ CONTINUER -eq 0 ]]; then
echo "${PARAM[0]}">"$HOME/.recnow.conf"
for (( i = 1; i < "${#PARAM[@]}"; i++ )); do
echo "${PARAM[$i]}">>"$HOME/.recnow.conf"
done
amixer set "`echo ${PARAM[3]} | tr "-" " "`" cap>/dev/null
# Url complète du fichier de sortie
FILEOUT="${PARAM[0]}/${PARAM[1]}.${PARAM[2]}"
case "${PARAM[4]}" in
"gstreamer")
case "${PARAM[2]}" in
"wav")
gst-launch-0.10 alsasrc ! audioconvert ! wavenc ! filesink location="$FILEOUT"&
;;
"mp3")
gst-launch-0.10 alsasrc ! audioconvert ! lame ! filesink location="$FILEOUT"&
;;
"ogg")
gst-launch-0.10 alsasrc ! audioconvert ! vorbisenc ! oggmux ! filesink location="$FILEOUT"&
;;
esac
;;
"ffmpeg")
case "${PARAM[2]}" in
"wav")
ffmpeg -f alsa -i hw:0 -y "$FILEOUT"&
;;
"mp3")
ffmpeg -f alsa -i hw:0 -acodec libmp3lame -y "$FILEOUT"&
;;
"ogg")
ffmpeg -f alsa -i hw:0 -acodec libvorbis -y "$FILEOUT"&
;;
esac
;;
"sox")
rec "$FILEOUT"&
;;
esac
zenity --info --title="Enregistrement..." --text="Enregistrement en cours. Cliquer pour arrêter." --ok-label="Arrêter l'enregistrement"
case "${PARAM[4]}" in
"gstreamer")
killall gst-launch-0.10
;;
"ffmpeg")
killall ffmpeg
;;
"sox")
killall rec
;;
esac
fi
;;
esac
done
Dernière modification par classdroogies (Le 22/03/2013, à 10:29)
Hors ligne