Bonjour,
Heureux possesseur d'un lecteur divx Kiss DP-500, je peut regarder les fichiers videos utilisant le container Microsoft .avi sur ma tele avec mon bel ampli.
Seul probleme mon kiss ne parle pas l'open source : ie impossible de regarder les videos dans un container ogm.
J'ai donc essayer de realiser un script pour demuxer un ogm et le remuxer en avi ( avec reencodage du son en mp3 ) et un fichier .srt si il y avait des sous titrte dans l'ogm.
Mon script necessite actuellement:
- ogmdemux ( package ogmtools sous debian)
- oggdec
- lame
- avidemux ( il y a surement moins lourd pour muxer un stream video et un stream mp3 dans un avi)
il se lance de la facon suivante
./ogmdemux <fichier.ogm> <numerodutrackaudio> <numerodusoustitre>
|
Voila le script :
#!/bin/bash
function usage {
echo usage: $0 file.ogm audiotracknumber subtitlenumber }
function error {
echo error: $1
exit
}
function exists {
if ! test -f $1 then
error "Le fichier $1 n'existe pas"
fi
}
if [ -z "$3" ]; then usage
exit
fi
DIR=$( dirname $1 )
FILENAME=$( basename $1 .ogm)
SOUNDNAME=$FILENAME-a$2
SUBTITLENAME=$FILENAME-t$3
VIDEONAME=$FILENAME-v1
#On demuxe
echo "Demuxing Ogg media file : $FILENAME.ogm"
ogmdemux -o $DIR/$FILENAME -a $2 -t $3 $DIR/$FILENAME.ogm &> /dev/null
#On teste que le fichier audio a bien été demuxé.
exists $DIR/$SOUNDNAME.ogg
echo "Audio track done : $SOUNDNAME.ogg"
#Si il y'a un sous-titre on le renomme.
if test -f $DIR/$SUBTITLENAME.srt
then
echo "Subtitle done : $SUBTITLENAME.srt"
echo "Renaming $SUBTITLENAME.srt to $FILENAME.sub"
mv $DIR/$SUBTITLENAME.srt $DIR/$FILENAME.sub
echo "Renaming finished."
else
echo "No Subtitle"
fi
#On decode le fichier audio .ogg
echo "Decoding $SOUNDNAME.ogg to WAV."
oggdec -o $DIR/$SOUNDNAME.wav $DIR/$SOUNDNAME.ogg &> /dev/null
#On verifie que ca a bien marche sinon on quitte avec une erreur
exists $DIR/$SOUNDNAME.wav echo "Decoding finished: $SOUNDNAME.wav"
#On encode avec lame ca gere.
echo "Compressing $SOUNDNAME.wav to MP3."
lame --preset 128 $DIR/$SOUNDNAME.wav $DIR/$SOUNDNAME.mp3 &> /dev/null
#On teste que l'encodage s'est bien passe .
exists $DIR/$SOUNDNAME.mp3
echo "Compression finished: $SOUNDNAME.mp3"
#On muxe tout ca.
echo "Muxing into avi container."
avidemux --load $DIR/$VIDEONAME.avi --external-mp3 $DIR/$SOUNDNAME.mp3 --audio-map --save $DIR/$FILENAME.avi --quit &> /dev/null
#On teste que ca a marché
exists $DIR/$FILENAME.avi
echo "Muxing finished: $FILENAME.avi"
#On nettoie
echo "Cleaning up."
rm $DIR/$SOUNDNAME.*
rm $DIR/$VIDEONAME.avi
echo "OGM Demux completed successfully."
|
C'est mon premier script par consequent il est bien loin d'etre optimal et c'est la que j'ai besoin de votre aide:
- Y'a t il de grosses erreurs de programmations bash a eliminer absolument ?
- Quelle est la meilleure facon pour rendre ce script "recursif" c'est a dire que s'il est lance sur un directory il s'applique a tous les .ogm dans le directory
Merci d'avance pour votre aide .
--
tfh
GPG Key:0x960AAEF2
Message édité par tfh le 20-06-2004 à 23:19:23