Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/06/2009, à 20: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, à 20:23)

Hors ligne

#2 Le 10/07/2009, à 20: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, à 14:41

Miam Miam

Re : [Script] Convertir des vidéos en mkv

Salut big_smile
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, à 14: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 big_smile


A vaincre sans péril, on triomphe sans gloire.

Hors ligne

#5 Le 03/07/2011, à 17:58

the--jigsaw

Re : [Script] Convertir des vidéos en mkv

merci beaucoup je cherchais justement ça pour tout convertir je vais tester ça smile

Hors ligne

#6 Le 03/07/2011, à 22: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, à 22: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 04/07/2011, à 00:02

vvf

Re : [Script] Convertir des vidéos en mkv

mkv est un format multiplate-forme et ouvert (cf wikipedia et mkv)

"Le conteneur MKV est perçu comme le successeur de l'AVI, majoritairement en raison de sa capacité à encapsuler des contenus en haute définition 720p ou 1080p."


Kubuntu Desktop 14.04  64 Bits

Hors ligne

#9 Le 04/07/2011, à 01: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, à 13: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, à 13: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, à 14:07)

#12 Le 05/07/2011, à 16: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, à 17: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, à 19: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, à 19: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, à 19: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, à 19: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, à 19: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, à 19:40)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#19 Le 05/07/2011, à 20:02

Compte anonymisé

Re : [Script] Convertir des vidéos en mkv

Hizoka a écrit :

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é. big_smile

#20 Le 05/07/2011, à 20: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, à 20: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, à 08: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, à 16: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, à 18:15)

Hors ligne

#24 Le 15/07/2011, à 19: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, à 20: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, à 20:55)

Hors ligne