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 23/03/2007, à 20: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, à 15:52)

Hors ligne

#2 Le 24/03/2007, à 15: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