#1 Le 23/03/2007, à 19:00
- djezair31
script mp3converter (perl ET/OU nautilus)
Salut a tous,
je viens d'ecrire 3 petits scripts pratiques pour la conversion audio en mp3 .
1- mp3converter.pl ( a copier dans /usr/local/bin ou n'importe ou dans le $PATH)
Ce script utilise lame, et mplayer pour l'encodage.
sudo apt-get mplayer lame mencoder
Usage :
find /mnt/fat32/mp3 -name "*.wma" | ./mp3converter.pl
find /mnt/fat32/mp3 -name "*.flac" | ./mp3converter.pl
2- mp3converter (a copier dans /home/$USER/.gnome2/nautilus-scripts)
Juste un liens vers les 2 autres. Il s'agit en fait d'un script Nautilus qui integre la variable $NAUTILUS_SCRIPT_SELECTED_URIS. Un clic droit sur un dossier permet de convertir tous les fichiers wma ou flac en fichier mp3 (j'ai mis 192KB pour le mp3).
3- mp3converter.sh ( a copier dans /usr/local/bin ou n'importe ou dans le $PATH)
mp3converter.sh mon_repertoire convertit touss les fichiers *.wma (ou *.flac) du repertoire en mp3
1- mp3converter.pl
#!/usr/bin/perl -w
############### mp3converter.pl ##################
# Usage :
#
# With Pipe
# find /mnt/fat32/mp3 -name "*.wma" | ./mp3converter.pl
#
# With file
# find /mnt/fat32/mp3 -name "*.wma" > /tmp/toto
# ./mp3converter.pl /tmp/toto
#
# With Zenity
# ./mp3converter.sh nom_du_repertoire
#
my $file = shift;
if (defined $file){
my $compt = 0;
print "Liste des fichiers à convertir :\n";
system("cat \"$file\"");
my $number =`cat \"$file\" | wc -l`;
chomp($number);
print "Conversion en cours ( $number fichiers ) ... veuillez patienter \n";
if ($compt == 0)
{
system("cat \"$file\" | $0");
$compt++;
exit(0); # Pour eviter la recursivité !!!
}
}
# Si on lance le programme au travers d'un pipe find /mnt/fat32/mp3 -name "*.wma" | ./mp3converter.pl
mainloop:while(<>)
{
# Onremplace les caracteres %20 par des espaces
# Car perl gere sans soucis ce caractere.
s/%20/ /g;
# Nom du fichier a convertir /media/usb/Stairway to Heaven.wma
my $src_file_name = $_ ;
chomp($src_file_name);
# Nom du fichier sans les repertoire Stairway to Heaven.wma
$current_file_name = $1 if (m:([^/]+$):);
chomp($current_file_name);
# nom complet du fichier sans l'extension /media/usb/Stairway to Heaven
my $current_file_name_no_extension = $1 if (m:(^.+)\.\w*:);
chomp($current_file_name_no_extension);
# nom complet du fichier avec l'extension /media/usb/Stairway to Heaven.wav
my $wavfile = $current_file_name_no_extension.".wav";
# nom complet du fichier avec l'extension /media/usb/Stairway to Heaven.mp3
my $mp3file = $current_file_name_no_extension.".mp3";
if (-e $mp3file)
{
print "MP3 file $mp3file exist. Nothing to do.\n";
}
else
{
my $mplayer_cmde = "mplayer \"$src_file_name\" -ao pcm:file=\"$wavfile\" 1> /dev/null 2> /dev/null ";
my $lame_cmde = "lame -b 192 \"$wavfile\" \"$mp3file\" 1> /dev/null 2> /dev/null ";
my $rm_cmde = "rm -f \"$wavfile\" 1> /dev/null 2> /dev/null ";
print "Conversion du fichier \"$current_file_name\"";
system("$mplayer_cmde && $lame_cmde && $rm_cmde");
print " \t\t\t\t\t\t [OK]\n";
}
}
2- mp3converter
#!/bin/bash
############### mp3converter ##################
# Copier ce fichier dans /home/$USER/.gnome2/nautilus-scripts
DIR=`echo -n $NAUTILUS_SCRIPT_SELECTED_URIS | perl -pe 's/%20/ /g' | perl -pe 's/file:\/\///g'`
echo "mp3converter.sh \"$DIR\"" > /tmp/cmde_nautilus
chmod +x /tmp/cmde_nautilus
/tmp/cmde_nautilus
3- mp3converter.sh
#! /bin/bash
############### mp3converter.sh ##################
# Placer ce fichier dans votre $PATH
# On peut remplacer ici "*.wma par *.flac"
EXTENSION="*.wma"
LOGFILE=/tmp/mp3converter.log
rm -f $LOGFILE
LIST_WMA_FILE=/tmp/list_wma_file
rm -f $LIST_WMA_FILE
if [ -z $1 ]
then
directory=$PWD
else
directory=$1
fi
# On pourait faire plus simple mais il y a un soucis avec les "
echo "find \"$directory\" -name "$EXTENSION" 1> $LIST_WMA_FILE 2> /dev/null" > /tmp/find_cmde
chmod +x /tmp/find_cmde
/tmp/find_cmde
#find \"$directory\" -name "$EXTENSION" 1> $LIST_WMA_FILE 2> /dev/null
PROGRESS=0
NUMBER_OF_FILES=`cat $LIST_WMA_FILE | wc -l`
# On remplace les espaces par %20
cat $LIST_WMA_FILE | sed s/\ /%20/g > /tmp/list_wma_file2
mv /tmp/list_wma_file2 $LIST_WMA_FILE
compt=0
if [ $NUMBER_OF_FILES -eq 0 ]
then
zenity --info --text="aucun fichier $EXTENSION trouvés."
exit 0
fi
INCREMENT2=`echo "scale=10;100/$NUMBER_OF_FILES"|bc -l`
(
for i in `cat /tmp/list_wma_file`
do
let compt=$compt+1
echo "$PROGRESS";
# remplacer $i par juste le nom du fichier sans les repertoires
filename=`echo $i | perl -ne 'chomp;m:([^/]+$):;print "$1\n"'`
echo "# Conversion des fichiers $EXTENSION en cours ($compt / $NUMBER_OF_FILES)\n\nRepertoire : $directory\n\nVeuillez patienter\n\n $filename";
echo "$i" > /tmp/current_file
mp3converter.pl \"/tmp/current_file\"
PROGRESS=`echo "scale=10;$PROGRESS+$INCREMENT2"|bc -l`
#let PROGRESS+=$INCREMENT
done
) | zenity --progress --title "$Recoding Encoding to MP3" --percentage=0 --height=150 --width=400
Dernière modification par djezair31 (Le 24/03/2007, à 14:52)
Hors ligne
#2 Le 24/03/2007, à 14:44
- djezair31
Re : script mp3converter (perl ET/OU nautilus)
Un seul petit soucis toutefois: la commande find ne retourne rien si on l'applique sur un lien symbolique
Par exemple, j'ai la config suivante :
om@om-desktop:~$ ls -l "/home/om/Desktop/Azureus Downloads"
lrwxrwxrwx 1 om om 29 2007-03-18 20:39 /home/om/Desktop/Azureus Downloads -> /media/sda6/Azureus Downloads
la commande find "/home/om/Desktop/Azureus Downloads" -name "*.wma" ne retourne rien ???
Y a t-il une option a passer a find pour prendre en compte les liens symboliques vers des repertoires ?
Merci de vos reponses
Merci
Hors ligne