#1 Le 28/06/2009, à 19:06
- Koon
[Script] Convertir des vidéos en mkv
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).
Dernière modification par Koon (Le 10/07/2009, à 19:23)
Hors ligne
#2 Le 10/07/2009, à 19:26
- Koon
Re : [Script] Convertir des vidéos en mkv
Mise à jour du script, pour ceux qui ça intéresserait.
Hors ligne
#3 Le 17/07/2009, à 13:41
- Miam Miam
Re : [Script] Convertir des vidéos en mkv
Salut
merçi pour ce script , depuis les nouvelles balises je cherchais un moyen simple de convertir mes vidéos.
Je vais tester ^^
A vaincre sans péril, on triomphe sans gloire.
Hors ligne
#4 Le 17/07/2009, à 13:45
- Miam Miam
Re : [Script] Convertir des vidéos en mkv
oups je crois avoir mal compris le but de ce script. Je crois que je vais me renseigner sur les formats
A vaincre sans péril, on triomphe sans gloire.
Hors ligne
#5 Le 03/07/2011, à 16:58
- the--jigsaw
Re : [Script] Convertir des vidéos en mkv
merci beaucoup je cherchais justement ça pour tout convertir je vais tester ça
Hors ligne
#6 Le 03/07/2011, à 21:04
- Compte anonymisé
Re : [Script] Convertir des vidéos en mkv
Dis-moi Koon, quel est l'avantage du format mkv par rapport aux autres ? Enfin je veux dire, que gagnons-nous à convertir nos fichiers .avi par exemple en .mkv ?
#7 Le 03/07/2011, à 21:51
- Hizoka
Re : [Script] Convertir des vidéos en mkv
je vois pas l'interet non plus...
l'interet du mkv est qu'il peut muxer pleins de pistes (videos, audio, sous titres, chapitres, images...) et ne sert à rien pour un fichier avi 1 video + 1 audio... au pire un fichier .ogm (video + vorbis)...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#8 Le 03/07/2011, à 23:02
- vvf
Hors ligne
#9 Le 04/07/2011, à 00:51
- Hizoka
Re : [Script] Convertir des vidéos en mkv
oui j'aime le mkv (voir ma signature), mais l’intérêt de convertir toutes ses vidéos en mkv...
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#10 Le 05/07/2011, à 12:07
- the--jigsaw
Re : [Script] Convertir des vidéos en mkv
gain de place .... je suis entrain de convertir +/- 300 films et je vous le dit le gain de place se compte en quelques Go de plus le format est libre ce qui est un plus !
Hors ligne
#11 Le 05/07/2011, à 12:34
- Compte anonymisé
Re : [Script] Convertir des vidéos en mkv
Ouais c'est vrai qu'il y a un léger gain de place. Un petit exemple sur un fichier .avi que j'ai passé en .mkv, il est passé de 701,2Mo à 676,1Mo. Soit un gain de place de près de 3.6%.
Edit : Sur 3 fichiers convertis j'observe un gain de place de l'ordre de 4.1 % de moyenne.
Dernière modification par titou345 (Le 05/07/2011, à 13:07)
#12 Le 05/07/2011, à 15:51
- the--jigsaw
Re : [Script] Convertir des vidéos en mkv
ici j'ai déja converti 214 films qui faisaient une taille de 151.9 GO
ces 214 MKV représentent maintenant 143.6 Go
l'air de rien c'est pas si mal
Hors ligne
#13 Le 05/07/2011, à 16:18
- the--jigsaw
Re : [Script] Convertir des vidéos en mkv
il manque quand même une option récursive ...
Hors ligne
#14 Le 05/07/2011, à 18:05
- Hizoka
Re : [Script] Convertir des vidéos en mkv
ouais mais combien de temps de compression ?
quelle utilisation processeur/energie ?
et quelle perte de qualité ?
10go avec 215 films...
quand on voit que les 2To valent 60€ (ici par ex)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#15 Le 05/07/2011, à 18:12
- the--jigsaw
Re : [Script] Convertir des vidéos en mkv
en fait niveaux processeur je m'en fou un peux c'est sur le serveur et lui à de la marge pour le temps ça prend 5min par film et y'a pas de pertes de qualités voyante fait le test avec un film tu verra que tu n'y perd rien de flagrant et je fait ça car par exemple pour mes séries j'ai déjà un 2To qui est remplis à moitié donc si avec ça je peux gagner quelques % ça m'arrange
de plus je fait ça dans un soucis du libre et de me défaire de microsoft car les .avi sont la création de cette entreprise
Hors ligne
#16 Le 05/07/2011, à 18:20
- Hizoka
Re : [Script] Convertir des vidéos en mkv
ouais m'enfin le format est peut etre libre mais je doute un peu de la legalité de leur contenu....
m'enfin bon, chacun fait ce qu'il veut.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#17 Le 05/07/2011, à 18:22
- the--jigsaw
Re : [Script] Convertir des vidéos en mkv
tu m'offre les coffrets ?
merci d'avance et si tu veux mon numéro de compte ça peux se faire aussi ...
Hors ligne
#18 Le 05/07/2011, à 18:40
- Hizoka
Re : [Script] Convertir des vidéos en mkv
on va pas parler piratage car ce n'est pas le sujet.
ce que je signale juste c'est l'aberrance : j'utilise un conteneur libre pour y mettre des images proprio...
de meme pourquoi toucher aux ogm alors que le format est libre aussi ?
la perte de qualité vidéo ne sera présent que dans le cas du wmv en fait (j'avais pas lu le script vraiment).
Dernière modification par Hizoka (Le 05/07/2011, à 18:40)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#19 Le 05/07/2011, à 19:02
- Compte anonymisé
Re : [Script] Convertir des vidéos en mkv
ouais m'enfin le format est peut etre libre mais je doute un peu de la legalité de leur contenu....
m'enfin bon, chacun fait ce qu'il veut.
Petit troll en passant : C'était tellement bien envoyé.
#20 Le 05/07/2011, à 19:46
- the--jigsaw
Re : [Script] Convertir des vidéos en mkv
bref sur ce je cherche toujours à le faire récursif ...
Hors ligne
#21 Le 05/07/2011, à 19:50
- Compte anonymisé
Re : [Script] Convertir des vidéos en mkv
Je ne suis absolument pas adepte de la programmation donc je ne peux pas t'aider mais je suis d'accord avec toi.
#22 Le 06/07/2011, à 07:28
- Hizoka
Re : [Script] Convertir des vidéos en mkv
change par ex :
for file in *
do
echo "$file"
convertion
done
en :
while read file
do
echo "$file"
convertion
done < <(find "${PWD}" -type f)
il recherche tous les fichiers dans ton dossier et sous dossiers.
le case du script fera le tri.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#23 Le 15/07/2011, à 15:48
- the--jigsaw
Re : [Script] Convertir des vidéos en mkv
merci Hizoka
je teste ça
edit : ça ne fonctionne malheureusement pas
dans un dossier comme celui ci (crée pour le test)
Conversion Episode 01 Episode 02 Episode 03 Episode 04 Episode 05 Episode 06 X.S01E06.avi
./Episode 01:
X.S01E01.avi
./Episode 02:
X.S01E02.avi
./Episode 03:
X.S01E03.avi
./Episode 04:
X.S01E04.avi
./Episode 05:
X S01E05.mkv
Conversion étant le script il n'à converti que l'épisode 05 puis sais arrêté
edit : je test ceci
for file in *
do
while read file
do
echo "$file"
convertion
done < <(find "${PWD}" -type f)
done
il m'a fait 3fichiers avi puis est parti --*
Dernière modification par the--jigsaw (Le 15/07/2011, à 17:15)
Hors ligne
#24 Le 15/07/2011, à 18:05
- Hizoka
Re : [Script] Convertir des vidéos en mkv
il t( renvoyé quoi ?
y a les echo normalement, il t'a affiché tous tes fichiers ?
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)
s'il te trouve bien tes fichiers, alors ça fonctionne, c'est que ça vient de ton script de convertion... (une variable à reinitialiser peut etre...)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#25 Le 15/07/2011, à 19:53
- the--jigsaw
Re : [Script] Convertir des vidéos en mkv
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
Dernière modification par the--jigsaw (Le 15/07/2011, à 19:55)
Hors ligne