#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 !
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