le script
while read file
do
file_type=$(file -b -L "$file")
conteneur= #réinitialise $conteneur
mpeg="MPEG"
avi="AVI"
mp4="MP4"
mkv="MKV"
flv="FLV"
ogm="OGM"
ogg="Ogg/Theora"
wmv="WMV"
###boucle de détection
case "$file_type" in
#Video MPEG
*"MPEG sequence"*) conteneur="$mpeg";;
#Video AVI
*"AVI"*) conteneur="$avi" ;;
#Video MP4
*"MPEG v4 system"*) conteneur="$mp4" ;;
#Video MKV
*"Matroska data"*) conteneur="$mkv" ;;
#Video FLV
*"Macromedia Flash Video"*) conteneur="$flv" ;;
#Video OGM
*"OGM video"*) conteneur="$ogm" ;;
#Video OGG Theora
*"Theora "*) conteneur="$ogg" ;;
#Vidéo WMV
*"ASF"*) conteneur="$wmv" ;;
esac
[[ ${conteneur} ]] && echo "le fichier : ${file} a pour conteneur : ${conteneur}"
done < <(find "${PWD}" -type f)
m'affiche bien toutes les vidéos dans les dossier il fait bien la fonction "récursive" mais le script
#!/bin/bash
#Script de multiplexage des fichiers vidéo vers mkv, avec réencodage du son en vorbis si nécessaire.
#Licence GPL - Auteur Goldy <goldy@goldenfish.info>
## Variables de configurations
# Éditez les variables pour modifier la configuration.
#Qualité vorbis (entre -1 et 10)
vorbis_q=4
## Définition du type de conteneur
##fonction
analyse_conteneur () {
#Définition de la variable sur la sortie de la commande "file"
file_type="`file -b -L "$file"`"
conteneur= #réinitialise $conteneur
mpeg="MPEG"
avi="AVI"
mp4="MP4"
mkv="MKV"
flv="FLV"
ogm="OGM"
ogg="Ogg/Theora"
wmv="WMV"
###boucle de détection
case "$file_type" in
#Video MPEG
*"MPEG sequence"*)
conteneur="$mpeg"
;;
#Video AVI
*"AVI"*)
conteneur="$avi"
;;
#Video MP4
*"MPEG v4 system"*)
conteneur="$mp4"
;;
#Video MKV
*"Matroska data"*)
conteneur="$mkv"
;;
#Video FLV
*"Macromedia Flash Video"*)
conteneur="$flv"
;;
#Video OGM
*"OGM video"*)
conteneur="$ogm"
;;
#Video OGG Theora
*"Theora "*)
conteneur="$ogg"
;;
#Vidéo WMV
*"ASF"*)
conteneur="$wmv"
;;
esac
#Affichage du conteneur
case "$conteneur" in
"$mpeg"|"$mp4"|"$ogm"|"$ogg")
echo "Le conteneur de $file est au format $conteneur, il sera directement convertie"
direct=1
;;
"$wmv"|"$flv"|"$avi")
echo "Le conteneur de $file est au format $conteneur, il sera convertie"
;;
#Fichiers non pris en charge
*)
echo "Le fichier n'est pas pris en charge"
error=1
;;
esac
}
#Sequence de conversion sonore
sound_conv () {
filewav=""$file".wav"
fileogg=""$file".ogg"
if ffmpeg -i "$file" "$filewav"
then
if oggenc "$filewav" -q"$vorbis_q" -o "$fileogg"
then
sounderror=0
else
sounderror=1
fi
else
sounderror=1
fi
}
#Séquence de conversion wmv to avi
wmv_to_avi () {
fileavi=""$file".avi"
if mencoder "$file" -ovc copy -nosound -of avi -o "$fileavi"
then
error=0
else
error=1
fi
}
## Séquence de multiplexage mkv
mkv_mux () {
filemkv="${file%.*}.mkv"
filenosoundmkv="${file%.*}[no_sound].mkv"
if [ $sounderror -eq "0" ]
then
if [ $direct -eq "1" ]
then
mkvmerge "$file" -o "$filemkv"
else
mkvmerge "$fileavi" "$fileogg" -o "$filemkv"
fi
else
mkvmerge "$fileavi" -o "$filenosoundmkv"
fi
}
#Séquence de ménage
menage () {
rm "$fileavi" "$fileogg" "$filewav" "$file"
}
## Séquence de conversion
convertion () {
error=0
direct=0
sounderror=0
analyse_conteneur
if [ $error -eq "0" ]
then
if [ $direct -eq "1" ]
then
mkv_mux
else
sound_conv
wmv_to_avi
if [ $error -eq "0" ]
then
mkv_mux
menage
else
echo "erreur, le fichier $file ne sera pas traité"
fi
fi
else
echo "erreur, le fichier $file ne sera pas traité"
fi
}
## Séquence d'execution
while read file
do
echo "$file"
convertion
done < <(find "${PWD}" -type f)
ne fait que la première et puis s'arrête
edit : sorry mais ce n'est pas du tout mon script je ne fait que le modifier pour ne pas devoir le copier dans chaque dossier et que ça prenne un temps fou