Convertir WMA vers OGG
Par flo|va-nu-pied le Le vendredi 4 septembre 2009, 13:36 - bash - Lien permanent
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 :)
Commentaires
Couillon de la lune !