[Script BASH] Script pour transformer un ogm en avi
Script pour transformer un ogm en avi [Script BASH] - Linux et OS Alternatifs
MarshPosté le 20-06-2004 à 23:14:03
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)
#!/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
Marsh Posté le 20-06-2004 à 23:14:03
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:
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