summaryrefslogtreecommitdiff
path: root/extract_audio.sh
blob: 548aec2c5f325ee1a6d9f5861dc2d30f586f6b7c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/bin/sh

# 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"

# debug
#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éé appelé:\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)