MAJ : Le script a été mis à jour, et il est maintenant capable de muxer tout les formats de vidéos en mkv. Toujours selon le même principe, il cherche les vidéos dans le dossier d'exécution et les convertie en mkv. Il réencode la piste son des fichier AVI, WMV et FLV en vorbis de façon systématique, tout les autres formats pris en charge sont muxé directement sans réencodage du son ou de la vidéo.
---------------------
Bonjour à tous,
Si vous êtes comme moi et que vous avez tendance à convertir toute les vidéos que vous avez entre les mains au format mkv avec l'outils mkvtoolnix, vous devez probablement être agacé par le fait que cet outil ne supporte pas les formats wmv et flv.
Voilà un problème qui est maintenant résolu avec ce script, il vous suffit de copier le script dans un répertoire où se situent les vidéos à convertir, de l'exécuter, et de laisser le charme agir, il trouvera comme un grand les vidéos wmv ou flv et les convertira sans réencoder la vidéo au format mkv. Pour la piste son, il la réencode en vorbis.
Notez qu'on peut ainsi gagner un poid conséquent grâce au réencodage de la piste son, sans perte de qualité notable (jusqu'à 30 % de moins).
Pour les dépendances, il vous faudra avoir d'installé sur votre machine les paquets suivant :
* mkvtoolnix
* ffmpeg
* vorbis-tool
* mencoder
* file
Vous pouvez les installer avec la commande suivante :
sudo aptitude install mkvtoolnix ffmpeg vorbis-tools mencoder file
Voici le script, à copier dans un fichier texte à rendre exécutable
#!/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"
}
## 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
for file in *
do
echo "$file"
convertion
done
Le script est basique dans son fonctionnement et ne supporte aucune option, vous pouvez changer la qualité d'encodage du vorbis directement dans le script. Une fois le script rendu exécutable, vous pouvez l'exécuter en double cliquant dessus, et l'exécuter en console ou non suivant que vous voulez surveiller l'exécution du script (un gros fichier peut prendre un certain nombre de temps à être convertie, il faut un peu plus de 5 min pour une vidéo de 1 heure).