diff options
author | polo <ordipolo@gmx.fr> | 2023-04-07 00:12:13 +0200 |
---|---|---|
committer | polo <ordipolo@gmx.fr> | 2023-04-07 00:12:13 +0200 |
commit | 6fec2f42c2d4cd051283c24d560a7f88f654a40b (patch) | |
tree | 016bd11fc309703a6f2d3705746c0533446b315c /extract_audio.sh | |
download | ffmpeg-6fec2f42c2d4cd051283c24d560a7f88f654a40b.zip |
extract_audio
Diffstat (limited to 'extract_audio.sh')
-rwxr-xr-x | extract_audio.sh | 69 |
1 files changed, 69 insertions, 0 deletions
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 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | # on veut 1 paramètre | ||
4 | if [ $# != 1 ]; then | ||
5 | printf "%b\n" "erreur, ce script attend 1 unique paramètre: le nom du fichier source." >&2 | ||
6 | exit 1 | ||
7 | fi | ||
8 | |||
9 | # obtenir le format de la piste audio | ||
10 | # - les parenthèses nous épargent d'utiliser des antislashs \ | ||
11 | # - l'info qu'on recherche est dans la sortie d'erreur standard (stderr), | ||
12 | # on la redirige dans la sortie standard (stdout) | ||
13 | # - syntaxe regex: grep recherche "Stream" puis n'importe quoi puis "Audio" | ||
14 | echo -e "\n-- Format audio et extension du nouveau fichier--\n" | ||
15 | echo -e "Saisir le nom du format retourné ci-dessous juste après le mot \"Audio:\"" | ||
16 | ffmpeg -i "$1" 2>&1 | grep Stream.*Audio | ||
17 | |||
18 | 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." | ||
19 | |||
20 | # saisie utilisateur | ||
21 | printf "\nQuel est le format? " | ||
22 | read format | ||
23 | |||
24 | # cas particuliers | ||
25 | if [ $format == vorbis ]; then | ||
26 | format=ogg | ||
27 | elif [ $format == aac ]; then | ||
28 | format=m4a | ||
29 | elif [ $format == wmav2 ]; then | ||
30 | format=wma | ||
31 | fi | ||
32 | |||
33 | # nom sans extension | ||
34 | # $1 est le nom du fichier original en paramètre | ||
35 | # rev inverse les caractères de la chaîne | ||
36 | # 2- permet de cibler les champs aux positions 2 et supérieures | ||
37 | # note: basename fait la même chose, nécessite le paquet 'coreutils' | ||
38 | name=`echo $1 | rev | cut -f 2- -d "." | rev` | ||
39 | |||
40 | nameNew="$name"."$format" | ||
41 | |||
42 | echo -e $1 | ||
43 | echo -e $nameNew | ||
44 | |||
45 | # renommage de l'ancien fichier si l'extension ne change pas | ||
46 | # permet de conserver le fichier original comme dans l'autre cas | ||
47 | # évite à ffmpeg d'échouer et de retourner une erreur | ||
48 | if [ "$1" == "$nameNew" ]; then | ||
49 | nameOld=$1"-old" | ||
50 | mv "$1" "$nameOld" | ||
51 | else | ||
52 | nameOld=$1 | ||
53 | fi | ||
54 | |||
55 | # création du nouveau fichier | ||
56 | # -loglevel 24 rend ffmpeg silencieux sauf "warning" et "error" | ||
57 | ffmpeg -loglevel 24 -i "$nameOld" -vn -acodec copy "$nameNew" | ||
58 | |||
59 | echo -e "\nSi aucun message d'erreur n'apparaît, un nouveau fichier devrait avoir été créé:\n "$nameNew | ||
60 | |||
61 | if [ "$1" == "$nameNew" ]; then | ||
62 | echo -e "Le fichier original devrait avoir été renommé:\n "$nameOld"." | ||
63 | fi | ||
64 | |||
65 | #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." | ||
66 | |||
67 | # En cas d'échec de ffmpeg | ||
68 | # - extensions différentes: le fichier original est conservé | ||
69 | # - même extension: le fichier original est renommé (pas top mais au moins c'est dit) | ||