From 6fec2f42c2d4cd051283c24d560a7f88f654a40b Mon Sep 17 00:00:00 2001 From: polo Date: Fri, 7 Apr 2023 00:12:13 +0200 Subject: extract_audio --- extract_audio.sh | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ extract_audio.txt | 13 +++++++++++ 2 files changed, 82 insertions(+) create mode 100755 extract_audio.sh create mode 100644 extract_audio.txt diff --git a/extract_audio.sh b/extract_audio.sh new file mode 100755 index 0000000..d506f4c --- /dev/null +++ b/extract_audio.sh @@ -0,0 +1,69 @@ +#!/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) diff --git a/extract_audio.txt b/extract_audio.txt new file mode 100644 index 0000000..676021d --- /dev/null +++ b/extract_audio.txt @@ -0,0 +1,13 @@ +## extract_audio.sh ## + +Ce script simplifie l'utilisation de ces deux commandes: + +1/ obtenir le codec audio utilisé: +ffmpeg -i | grep Stream.*Audio + +retourne quelque chose comme ça, on a obtenu l'info recherchée: "aac" +Stream #0:0(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 95 kb/s (default) + +2/ extraction de l'audio dans un nouveau fichier sans réencodage +l'effet est rapide mais nécessite de saisir correctement le format obtenu derrière "Audio:" +ffmpeg -loglevel 24 -i -vn -acodec copy -- cgit v1.2.3