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 20/08/2008, à 20:44

WW

Script-nautilus pour extraire le son des vidéos

Salut à tous,

  Ce script permet d'extraire le son des vidéos. Les formats supportés par défaut sont : avi, divx, xvid, mpg, dat, ogm, flv, mov. Mais tous les formats supportés par ffmpeg peuvent l'être pour cela éditer la listeFormats du script. Les formats de sortie sont wav, ogg et mp3. Le son est encodé en Variable Bitrate, le choix de la qualité est proposé. Le script possède une interface graphique.

Ce script nécessite ffmpeg, lame et zenity. (Les installer en un clic)

Il est à sauvegarder sous ~/.gnome2/nautilus-scripts/ avec les droits d'exécution.

Par exemple si vous créez le fichier eXson sur le bureau :

mv ~/Desktop/eXson ~/.gnome2/nautilus-scripts/
chmod 755 ~/.gnome2/nautilus-scripts/eXson
#!/bin/sh
# Programmeur : WW
# 20/08/08
# Script permettant d'extraire le son d'une vidéo

#------- Déclaration des variables -------

listeFormats="*.avi *.divx *.xvid *.mpg *.dat *.ogm *.flv *.mov *.AVI *.DIVX *.XVID *.MPG *.DAT *.OGM *.FLV *.MOV" # Représente la liste des formats des vidéos à traiter dans le dossier

#------- Déclaration des fonctions -------

# Fonction qui traite les vidéos contenus dans un dossier
traitementDossier() {
	nombre=0

	for i in $listeFormats; do # On compte les vidéos
		if [ "${i%.*}" != "*" ]; then
			nombre=$(($nombre+1))
		fi
	done

	n=1

	(for i in $listeFormats; do
       		if [ "${i%.*}" != "*" ]; then # Permet d'éviter un traitement inutile quand aucun fichier n'est trouvé pour un format sans ce test *.ogm (ou autres) serai considéré comme un fichier lorsqu'il n'y a pas de fichier .ogm (ou autres) dans le dossier
			echo "# "$i;
			progression=$((100*n/nombre));
			echo $progression;
			n=$((n+1));
			traitementFichier "$i"
		fi
	done;)|zenity --height="350" --width="400" --progress --percentage=0;
}

# Fonction qui traite une vidéo à passer en paramètre
traitementFichier() {
	if [ -e "${1%.*}".$extension ]; then # Si le fichier existe déjà

		creation="faux" # On n'écrase pas

		zenity --question --title="~ Ecraser ~" --text="Le fichier ${1%.*}.$extension existe déjà. Voulez-vous l'écraser ?" # On pose la question
		if [ $? = "0" ]; then # Si la réponse est oui
			creation="vrai" # On écrase
		fi
	else
		creation="vrai" # Le fichier n'existe pas on veux forcément le créer
	fi

	if [ "$extension" != "wav" -a -e "${1%.*}".wav ]; then
		zenity --question --title="~ Ecraser ~" --text="Le fichier ${1%.*}.wav existe déjà. Voulez-vous l'écraser car la compression en $extension se fera à partir du fichier transitoire wav ?" # idem avec le wav
		if [ $? = "0" ]; then
			creation="vrai"
		else
			creation="faux" # Problème le wav existe déjà on ne l'écrase pas
		fi
	fi

	if [ "$creation" = "vrai" ]; then
		ffmpeg -y -i "$1" -vn -f wav "${1%.*}".wav 2>&1 | zenity --progress --pulsate --title="Extraction en cours" --text="Vidéo : $1" --auto-close --auto-kill;
		if [ "$extension" != "wav" ]; then # On compresse
			lame -V$qualitelame "${1%.*}".wav "${1%.*}".$extension 2>&1 | zenity --progress --pulsate --title="Compression en cours" --text="Vidéo : $1" --auto-close --auto-kill;
			rm "${1%.*}".wav # Dans ce cas le wav n'est que transitoire
		fi
	fi
}

# Fonction d'annulation requière un paramètre
annuler() {
	if [ "$1" = "" ]; then
        	exit 0;
	fi
}

#------- Fin des définitions de fonctions -------

# Choix de l'extension
extension=$(zenity --list --column="Choix" --column=" " --height="250" --width="300" --radiolist --text="Quel format voulez-vous pour le(s) fichier(s) de sortie ?" --title="Extensions" false "mp3" true "ogg" false "wav")

annuler $extension

if [ "$extension" != "wav" ]; then
	# Choix de la qualité (Variable BitRate)
	qualite=$(zenity --scale --text="Choix de la qualité ?" --value=4 --max-value="9")

	annuler $qualite
	qualitelame=`expr 9 - $qualite`
fi

while [ $# -gt 0 ]; do
    
	if [ -d "$1" ]; then    
		cd "$1" #On entre dans le dossier des vidéos à traiter
		traitementDossier
	else
		traitementFichier "$1"
	fi
	shift
done

Cette version nécessite lame car le ffmpeg des dépôts Ubuntu ne gère pas le mp3 pour des restrictions légales.

Je mettrerais une autre version utilisant le ffmpeg des dépôts Medibuntu qui se passera donc de lame.

Dernière modification par WW (Le 25/08/2008, à 11:52)


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#2 Le 23/08/2008, à 03:04

Ohw

Re : Script-nautilus pour extraire le son des vidéos

Justement je cherchais ça, quelle chance j'ai eu de tomber sur ce post, vu qu'il n'a été posté il n'y a que 3j.

Merci.

Hors ligne

#3 Le 23/08/2008, à 10:47

TraGiKomiK

Re : Script-nautilus pour extraire le son des vidéos

salut :-)

C'est aussi ce que je cherchais :-D merci ;-)


Merci de mettre [RESOLU] dans le titre de votre post une fois le  probleme reglé!

GNU/Linux -> \o/

Hors ligne

#4 Le 25/08/2008, à 10:16

WW

Re : Script-nautilus pour extraire le son des vidéos

Salut à tous les deux,

Heureux que ça vous plaise ! smile

N'hésiter pas à me faire part de vos suggestions/améliorations/attentes.

Remarque :
En effet je l'ai posté il y a peu de temps dans cette section mais une version plus ancienne était disponible ici.


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#5 Le 25/08/2008, à 21:18

WW

Re : Script-nautilus pour extraire le son des vidéos

Voici la version avec le paquet ffmpeg des dépôts Medibuntu ne nécessite pas lame :

Avec cette version il ne faut pas sélectionner une qualité pour le fichier de sortie supérieure à la qualité de la source. Cela dérange ffmpeg qui ne fera rien.
Donc si il ne se passe rien essayer avec une qualité plus faible.

#!/bin/sh
# Programmeur : WW
# 25/08/08
# Script permettant d'extraire le son d'une vidéo

#------- Déclaration des variables -------

listeFormats="*.avi *.divx *.xvid *.mpg *.dat *.ogm *.flv *.mov *.AVI *.DIVX *.XVID *.MPG *.DAT *.OGM *.FLV *.MOV" # Représente la liste des formats des vidéos à traiter dans le dossier

#------- Déclaration des fonctions -------

# Fonction qui traite les vidéos contenus dans un dossier
traitementDossier() {
	nombre=0

	for i in $listeFormats; do # On compte les vidéos
		if [ "${i%.*}" != "*" ]; then
			nombre=$(($nombre+1))
		fi
	done

	n=1

	(for i in $listeFormats; do
       		if [ "${i%.*}" != "*" ]; then # Permet d'éviter un traitement inutile quand aucun fichier n'est trouvé pour un format sans ce test *.ogm (ou autres) serai considéré comme un fichier lorsqu'il n'y a pas de fichier .ogm (ou autres) dans le dossier
			echo "# "$i;
			progression=$((100*n/nombre));
			echo $progression;
			n=$((n+1));
			traitementFichier "$i"
		fi
	done;)|zenity --height="350" --width="400" --progress --percentage=0;
}

# Fonction qui traite une vidéo à passer en paramètre
traitementFichier() {
	if [ -e "${1%.*}".$extension ]; then # Si le fichier existe déjà

		creation="faux" # On n'écrase pas

		zenity --question --title="~ Ecraser ~" --text="Le fichier ${1%.*}.$extension existe déjà. Voulez-vous l'écraser ?" # On pose la question
		if [ $? = "0" ]; then # Si la réponse est oui
			creation="vrai" # On écrase
		fi
	else
		creation="vrai" # Le fichier n'existe pas on veux forcément le créer
	fi

	if [ "$creation" = "vrai" ]; then
		ffmpeg -y -ab $qualite"k" -i "$1" -vn -f $extension "${1%.*}".$extension 2>&1 | zenity --progress --pulsate --title="Extraction en cours" --text="Vidéo : $1" --auto-close --auto-kill;
	fi
}

# Fonction d'annulation requière un paramètre
annuler() {
	if [ "$1" = "" ]; then
        	exit 0;
	fi
}

#------- Fin des définitions de fonctions -------

# Choix de l'extension
extension=$(zenity --list --column="Choix" --column=" " --height="250" --width="300" --radiolist --text="Quel format voulez-vous pour le(s) fichier(s) de sortie ?" --title="Extensions" false "mp3" true "ogg" false "wav")

annuler $extension

# Choix de la qualité (Variable BitRate)
qualite=$(zenity --scale --text="Choix de la qualité ?" --step="64" --value=192 --min-value="64" --max-value="320")

annuler $qualite

while [ $# -gt 0 ]; do
    
	if [ -d "$1" ]; then    
		cd "$1" #On entre dans le dossier des vidéos à traiter
		traitementDossier
	else
		traitementFichier "$1"
	fi
	shift
done

Remarque : Très peu de code change.


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#6 Le 25/08/2008, à 21:20

WW

Re : Script-nautilus pour extraire le son des vidéos

Puis la version avec mplayer ne nécessite pas lame.

Dans cette dernière on ne choisi pas la qualité :

#!/bin/sh
# Programmeur : WW
# 25/08/08
# Script permettant d'extraire le son d'une vidéo

#------- Déclaration des variables -------

listeFormats="*.avi *.divx *.xvid *.mpg *.dat *.ogm *.flv *.mov *.AVI *.DIVX *.XVID *.MPG *.DAT *.OGM *.FLV *.MOV" # Représente la liste des formats des vidéos à traiter dans le dossier

#------- Déclaration des fonctions -------

# Fonction qui traite les vidéos contenus dans un dossier
traitementDossier() {
	nombre=0

	for i in $listeFormats; do # On compte les vidéos
		if [ "${i%.*}" != "*" ]; then
			nombre=$(($nombre+1))
		fi
	done

	n=1

	(for i in $listeFormats; do
       		if [ "${i%.*}" != "*" ]; then # Permet d'éviter un traitement inutile quand aucun fichier n'est trouvé pour un format sans ce test *.ogm (ou autres) serai considéré comme un fichier lorsqu'il n'y a pas de fichier .ogm (ou autres) dans le dossier
			echo "# "$i;
			progression=$((100*n/nombre));
			echo $progression;
			n=$((n+1));
			traitementFichier "$i"
		fi
	done;)|zenity --height="350" --width="400" --progress --percentage=0;
}

# Fonction qui traite une vidéo à passer en paramètre
traitementFichier() {
	if [ -e "${1%.*}".$extension ]; then # Si le fichier existe déjà

		creation="faux" # On n'écrase pas

		zenity --question --title="~ Ecraser ~" --text="Le fichier ${1%.*}.$extension existe déjà. Voulez-vous l'écraser ?" # On pose la question
		if [ $? = "0" ]; then # Si la réponse est oui
			creation="vrai" # On écrase
		fi
	else
		creation="vrai" # Le fichier n'existe pas on veux forcément le créer
	fi

	if [ "$creation" = "vrai" ]; then
		mplayer -dumpaudio -dumpfile "${1%.*}".$extension "$1" 2>&1 | zenity --progress --pulsate --title="Extraction en cours" --text="Vidéo : $1" --auto-close --auto-kill;
	fi
}

# Fonction d'annulation requière un paramètre
annuler() {
	if [ "$1" = "" ]; then
        	exit 0;
	fi
}

#------- Fin des définitions de fonctions -------

# Choix de l'extension
extension=$(zenity --list --column="Choix" --column=" " --height="250" --width="300" --radiolist --text="Quel format voulez-vous pour le(s) fichier(s) de sortie ?" --title="Extensions" false "mp3" true "ogg" false "wav")

annuler $extension

while [ $# -gt 0 ]; do
    
	if [ -d "$1" ]; then    
		cd "$1" #On entre dans le dossier des vidéos à traiter
		traitementDossier
	else
		traitementFichier "$1"
	fi
	shift
done

Encore une fois très peu de code change.
Les tests n'ont pas été très poussé donc n'hésiter à faire remonter les bugs.


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#7 Le 26/08/2008, à 08:15

gauloisval

Re : Script-nautilus pour extraire le son des vidéos

salut a tous
bon script marche nickel pour moi .
juste une petite question,est-il possible d'avoir une extraction en stéréo.
ps: j'utilise le premier script avec lame.

merci


Ubuntu 19.04 64bits

Hors ligne

#8 Le 26/08/2008, à 15:31

WW

Re : Script-nautilus pour extraire le son des vidéos

Salut @gauloisval,

Oui c'est possible à la ligne 59 : ffmpeg -y -i "$1" -vn -f wav "${1%.*}".wav
ajoute -ac 2 (2 canaux donc du stéréo).

ffmpeg -ac 2 -y -i "$1" -vn -f wav "${1%.*}".wav


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#9 Le 27/08/2008, à 07:26

gauloisval

Re : Script-nautilus pour extraire le son des vidéos

merci WW
effectivement cela fonctionne,mais pas au début de la ligne comme tu ne le suggère.
il a fallut que je le mette après -f wav .
ffmpeg -y -i "$1" -vn -f wav -ac 2 "${1%.*}".wav

merci


Ubuntu 19.04 64bits

Hors ligne