Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 :

1363942327.png

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 tongue

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