#!/bin/bash # on veut 1 paramètre if [ $# != 1 ]; then printf "%b\n" "erreur, ce script attend 1 unique paramètre: le nom du fichier source." >&2 exit 1 fi # obtenir le format de la piste audio # - les parenthèses nous épargent d'utiliser des antislashs \ # - l'info qu'on recherche est dans la sortie d'erreur standard (stderr), # on la redirige dans la sortie standard (stdout) # - syntaxe regex: grep recherche "Stream" puis n'importe quoi puis "Audio" echo -e "\n-- Format audio et extension du nouveau fichier--\n" echo -e "Saisir le nom du format retourné ci-dessous juste après le mot \"Audio:\"" ffmpeg -i "$1" 2>&1 | grep Stream.*Audio echo -e "\nCe sera l'extension du nouveau fichier sauf dans ces cas particuliers:\nSi le format est vorbis, l'extension sera ogg.\nSi le format est aac, l'extension sera m4a.\nSi le format est wmav2, l'extension sera wma." # saisie utilisateur printf "\nQuel est le format? " read format # cas particuliers if [ $format == vorbis ]; then format=ogg elif [ $format == aac ]; then format=m4a elif [ $format == wmav2 ]; then format=wma fi # nom sans extension # $1 est le nom du fichier original en paramètre # rev inverse les caractères de la chaîne # 2- permet de cibler les champs aux positions 2 et supérieures # note: basename fait la même chose, nécessite le paquet 'coreutils' name=`echo $1 | rev | cut -f 2- -d "." | rev` nameNew="$name"."$format" echo -e $1 echo -e $nameNew # renommage de l'ancien fichier si l'extension ne change pas # permet de conserver le fichier original comme dans l'autre cas # évite à ffmpeg d'échouer et de retourner une erreur if [ "$1" == "$nameNew" ]; then nameOld=$1"-old" mv "$1" "$nameOld" else nameOld=$1 fi # création du nouveau fichier # -loglevel 24 rend ffmpeg silencieux sauf "warning" et "error" ffmpeg -loglevel 24 -i "$nameOld" -vn -acodec copy "$nameNew" echo -e "\nSi aucun message d'erreur n'apparaît, un nouveau fichier devrait avoir été créé:\n "$nameNew if [ "$1" == "$nameNew" ]; then echo -e "Le fichier original devrait avoir été renommé:\n "$nameOld"." fi #echo "Ce processus devrait être très rapide (pas de réencodage), signifiant que la qualité du son n'a pas été dégradée." # En cas d'échec de ffmpeg # - extensions différentes: le fichier original est conservé # - même extension: le fichier original est renommé (pas top mais au moins c'est dit)