Mot-clé - encoder

Fil des billets - Fil des commentaires

vendredi, 4 septembre 2009

Convertir WMA vers OGG

J'ai retrouvé, il y a peu, quelques vestiges de ma (lointaine) époque sous Windows: des répertoires entiers remplis de fichiers WMA.

J'ai donc entrepris de réaliser un script me permettant d'encoder rapidement tout ça et d'en faire des fichiers au format ogg. Comme vous allez le voir dans le script il faut procéder en deux étapes et encoder le fichier une première fois en wav pour ensuite convertir ce même fichier au format final ogg.

Voici donc ce que j'ai utilisé pour réaliser cette opération.

#!/bin/sh
start_script=$(date +'%T')
###
# On récupère le chemin
###
PATH_DIR="$1"
CHECK="" 
###
# Au besoin on ajoute un / a la fin du chemin fourni
###
if [ -d ${PATH_DIR} ] && [ -z $(echo ${PATH_DIR} | grep -e '/$') ]
then 
	PATH_DIR=$1"/"
fi
 
function usage() {
echo "
$0 /path/dir/[file.wma]
$0 doit etre suivi d'un fichier ou repertoire contenant les fichiers wma à convertir
"
}
 
###
#On verifie les arguments passés aux script
###
if [[ $# -lt 1 ]]
	then
	echo "argument manquant"
	usage
	exit 1
fi
 
###
# On vérifie le chemin mentionné
###
 
 
if [ ! -f "${PATH_DIR}" ] && [ ! -d "${PATH_DIR}" ]
	then
	echo "Le chemin spécifié n'existe pas"
	exit 1
fi
 
###
# On génère la liste des fichiers à encoder
###
 
find "${PATH_DIR}" -iname "*.wma" | sed -e 's/^\.\///g' > $PATH_DIR"files_list"
 
###
# On récupère le nombre de fichiers à encoder
###
file_total=$(awk 'END { print NR }' "${PATH_DIR}"files_list)
 
 
###
# Pour chaque fichier wma trouvé
###
 
while [[ i -lt $file_total ]]
do
	echo ""
	((i++))
	file_name=$(awk 'NR=='$i'{print $0}' "${PATH_DIR}"files_list)
	start_file=$(date +'%T')
	echo "echo 'extraction du fichier source'; mplayer -vo null -ao pcm:file=\""$file_name".wav\" \""$file_name"\" 1>/dev/null; echo 'OK'" | sh
	echo "echo 'conversion au format OGG'; oggenc -q  5 -o \"$(echo ${file_name} | cut -d. -f1).ogg\" \""$file_name".wav\" 2>/dev/null; echo 'OK'" | sh
 
###
# Suppression du fichier temporaire
###
	rm -f "$file_name".wav
	end_file=$(date +'%T')
	diffSec=$(( $(date --date $end_file +%s) - $(date --date $start_file +%s) ))
	echo "fichier extrait : $(echo ${file_name} | cut -d. -f1).ogg"
	echo "durée de l'encodage : "$((diffSec%60))sec
done
 
end_script=$(date +'%T')
###
# Bilan de l'action
###
diffSec=$(( $(date --date $end_script +%s) - $(date --date $start_script +%s) ))
echo " durée du traitement : "$((diffSec/60))"min"$((diffSec%60))sec
echo "nombre de fichiers convertis : "$file_total
 
 
rm -f $PATH_DIR"files_list"

Voila; le script est relativement commenté; et certainement perfectible. pour ma part j'ai rencontré un bug pour les fichiers dont le nom comporte plus d'un espace consécutif( " "). il est largement envisageable de rajouter une fonction visant a renommer les fichiers posant problèmes et supprimer les esapces en trop.

En éspérant que ça puisse aider/inspirer des gens.

Très Cordialement :)