vendredi, 4 septembre 2009

Convertir WMA vers OGG

J'ai retrouvé, il y a peu, quelques vestiges de ma (lointaine) époque sous Windows: des répertoires entiers remplis de fichiers WMA.

J'ai donc entrepris de réaliser un script me permettant d'encoder rapidement tout ça et d'en faire des fichiers au format ogg. Comme vous allez le voir dans le script il faut procéder en deux étapes et encoder le fichier une première fois en wav pour ensuite convertir ce même fichier au format final ogg.

Voici donc ce que j'ai utilisé pour réaliser cette opération.

#!/bin/sh
start_script=$(date +'%T')
###
# On récupère le chemin
###
PATH_DIR="$1"
CHECK="" 
###
# Au besoin on ajoute un / a la fin du chemin fourni
###
if [ -d ${PATH_DIR} ] && [ -z $(echo ${PATH_DIR} | grep -e '/$') ]
then 
	PATH_DIR=$1"/"
fi
 
function usage() {
echo "
$0 /path/dir/[file.wma]
$0 doit etre suivi d'un fichier ou repertoire contenant les fichiers wma à convertir
"
}
 
###
#On verifie les arguments passés aux script
###
if [[ $# -lt 1 ]]
	then
	echo "argument manquant"
	usage
	exit 1
fi
 
###
# On vérifie le chemin mentionné
###
 
 
if [ ! -f "${PATH_DIR}" ] && [ ! -d "${PATH_DIR}" ]
	then
	echo "Le chemin spécifié n'existe pas"
	exit 1
fi
 
###
# On génère la liste des fichiers à encoder
###
 
find "${PATH_DIR}" -iname "*.wma" | sed -e 's/^\.\///g' > $PATH_DIR"files_list"
 
###
# On récupère le nombre de fichiers à encoder
###
file_total=$(awk 'END { print NR }' "${PATH_DIR}"files_list)
 
 
###
# Pour chaque fichier wma trouvé
###
 
while [[ i -lt $file_total ]]
do
	echo ""
	((i++))
	file_name=$(awk 'NR=='$i'{print $0}' "${PATH_DIR}"files_list)
	start_file=$(date +'%T')
	echo "echo 'extraction du fichier source'; mplayer -vo null -ao pcm:file=\""$file_name".wav\" \""$file_name"\" 1>/dev/null; echo 'OK'" | sh
	echo "echo 'conversion au format OGG'; oggenc -q  5 -o \"$(echo ${file_name} | cut -d. -f1).ogg\" \""$file_name".wav\" 2>/dev/null; echo 'OK'" | sh
 
###
# Suppression du fichier temporaire
###
	rm -f "$file_name".wav
	end_file=$(date +'%T')
	diffSec=$(( $(date --date $end_file +%s) - $(date --date $start_file +%s) ))
	echo "fichier extrait : $(echo ${file_name} | cut -d. -f1).ogg"
	echo "durée de l'encodage : "$((diffSec%60))sec
done
 
end_script=$(date +'%T')
###
# Bilan de l'action
###
diffSec=$(( $(date --date $end_script +%s) - $(date --date $start_script +%s) ))
echo " durée du traitement : "$((diffSec/60))"min"$((diffSec%60))sec
echo "nombre de fichiers convertis : "$file_total
 
 
rm -f $PATH_DIR"files_list"

Voila; le script est relativement commenté; et certainement perfectible. pour ma part j'ai rencontré un bug pour les fichiers dont le nom comporte plus d'un espace consécutif( " "). il est largement envisageable de rajouter une fonction visant a renommer les fichiers posant problèmes et supprimer les esapces en trop.

En éspérant que ça puisse aider/inspirer des gens.

Très Cordialement :)

mardi, 4 août 2009

[awk] parser /etc/services

Je cherchais un moyen de mettre en forme un script qui interrogeais mon fichier /etc/services voila donc une petite ébauche. Ce script utilise la commande awk d'une façon primaire mais introduit une syntaxe relativement pratique au quotidien.
on distingue, dans notre cas, deux parties. La première délimitée par des // contient une occurrence que nous cherchons. il est à noter que ce champ supporte les expressions régulières et est donc hautement configurable en fonction de votre besoin.
La deuxième partie de la commande permet de mettre en forme la sortie de la commande.
Maintenant que nous avons vu un peu comment était constitué la sytanxe de la commande awk passons au script.

#!/bin/sh
 
# emplacement du fichier services
FILE="/etc/services"
 
# numéro du port ou nom du service
PORTNUMBER="$1"
 
awk '/\t'$1'\/|^'$1'/{print "service = "$1; print "port/type = "$2;$1 = "";$2 = "";print "Description = "$0;print ""}' $FILE

me reste a régler quelques petits truc mais ça fonctionne plutôt bien :

flopc sh # ./services_parser.sh ssh
service = ssh
port/type = 22/tcp
Description =   # SSH Remote Login Protocol

service = ssh
port/type = 22/udp
Description =  

flopc sh # ./services_parser.sh 21 
service = ftp
port/type = 21/tcp
Description =   # File Transfer [Control]

service = ftp
port/type = 21/udp
Description =   fsp fspd

Il est bien sûr évident que ceci ne constitue qu'une infime partie de la puissance d'awk qui est à lui seul un véritable langage de développement. En espérant que ce petit aperçu vous aura donné envie d'approfondir la connaissance de ce merveilleux outil.

liens connexes:

http://www.linux-pour-lesnuls.com/gawk.php
http://www.waterproof.fr/products/PHPEdit/manual/fr/module.FindRegExp.html
http://www.wagoneers.com/UNIX/AWK/awk.html
http://www.info.univ-angers.fr/aides/tutawk.html

mardi, 21 octobre 2008

Tips & tricks

Tips & tricks supprimer les fichiers les plus gros d'un répertoire /// for i in `du -a /media/data | sort -n -r | head -n 20 | cut -d'/' -f2-`; do if [ ! -d /$i ]; then ls -l /$i;rm -i /$i; fi; done /// Suite au commentaire de lone wolf voici une commande beaucoup plus élégante /// find ./ -maxdepth 1 -type f -printf "%b\t%p\n" \ | sort -n -r | head -n 20 | cut -f 2 | xargs rm -v ///

lundi, 30 juin 2008

Gestion de dates de certificats

J'ai eu à me demander comment gérer efficacement les certificats délivrés par mon autorité de certification et prévenir simplement les utilisateurs de mes certificats de l'expiration de ces derniers. voici donc un petit script constituant une ébauche en ce sens.

Lire la suite...

lundi, 23 juin 2008

Substitution avec Sed

Bon comme ça m'a pris plus de deux minutes pour trouver je la file ici pour virer les tabulations dans un output de commande rien ne vaut un bon p'tit

# remplace toutes les tabulations dans une chaine de caractère
sed -e  "s/\t//g"
# remplace les premières tabulations de chaque ligne
sed -e 's/^[\t ]//g'
# un exemple concret
screen -ls| grep ssh-agent |sed -e "s/\t//g" |cut -d '(' -f1

Il doit donc en être de même pour tous les autres caractères spéciaux utilisés ( \n, \t ,...)

mardi, 5 février 2008

Gestion de ports sur la boiboite

lassé de; sous prétexte que je laisse certains ports ouverts pour mon usage toute la journée; prendre des brutes forces dans tous les sens. J'ai cherché un moyen de gérer ces derniers uniquement selon mon besoin. Voici la méthode que j'ai utilisé.

Lire la suite...

samedi, 21 octobre 2006

Sauvegarde ftp

Voila je cherchais comment sauvegarder régulièrement mon serveur ftp et je suis tombé sur ce script qui remplit très bien cette fonction

#!/bin/bash
#
# WebBackup.sh
# Version : 1.0
# Auteur : Frederic PLE (fple <a> free.fr)
#
# Historique
# 23/03/2003 : Version 1.0
#
# Le script est librement utilisable.
# N'oublier pas de faire profiter aux autres des modifications que vous y porteriez
 
DATENOW=`date '+%Y%m%d'`
 
# MYAPTH : répertoire (local) dans lequel seront stockées les sauvegardes
MYPATH=/home/florent/blog.bak/
 
# MYSITE : nom du site web
MYSITE=monsite.free.fr
if [ $# -ne 0 ] ; then
MYSITE=$1
fi
 
# Paramètres FTP
FTPHOST=ftpperso.free.fr
FTPUSER=nom_d_utilisateur
FTPPWD=password
 
# Parametres MySQL
PHPMYADMIN="http://sql.free.fr/phpMyAdmin/"
DBUSER=nom_d_utilisateur
DBPWD=password
# Liste des tables a sauvegarder (ex: les tables de SPIP)
DBTABLE=('date_spectacle' 'dc_categorie' 'dc_comment' 'dc_galCategory' 'dc_galComment' 'dc_galGallery' 'dc_galImage' 'dc_link' 'dc_log' 'dc_ping' 'dc_post' 'dc_session' 'dc_user' 'galbumlist' 'gimagelist' )
 
# Debut du script
HTTPAUTH=`echo -n "$DBUSER:$DBPWD" | uuencode -m /dev/null | head -2 | tail -1`
 
TABPARAM=""
for table in ${DBTABLE*}
do
TABPARAM="$TABPARAM -d 'table_select%5B%5D=$table'"
done
 
$ORGPATH=`pwd`
cd $MYPATH
 
if [ ! -d mirror ] ; then
mkdir mirror
fi
 
curl -H "Authorization: Basic $HTTPAUTH" \
$TABPARAM \
-d 'what=data' -d 'drop=1' -d 'showcolomns=yes' -d 'extended_ins=yes' -d'use_backquotes=1' -d 'asfile=sendit' -d 'bzip=bzip' -d 'server=1' -d 'lang=fr-iso-8859-1' -d 'db=wwstri' \
-o $MYSITE.$DATENOW.db.bz2 \
"$PHPMYADMIN/tbl_dump.php"
 
cd mirror
lftp -u $FTPUSER,$FTPPWD -e "mirror -x CACHE/ -n -e ; quit" $FTPHOST
tar cvf ../$MYSITE.$DATENOW.site.tar ./*
cd ..
bzip2 -9 $MYSITE.$DATENOW.site.tar
cd $ORGPATH

Sur ubuntu Dapper il m'a fallu installer les packages suivant: sharutils, curl, bzip2 et lftp

sudo apt-get install sharutils curl bzip2 lftp