jeudi 22 novembre 2012

Départ en vacances : réencondage MKV en AVI

Hey, le MKV DTS multi tracks ça roxx !

Sauf que, en prévision de vacances pluvieuses, si vous souhaitez emporter vos films sur support amovible (et garder au chaud vos originaux biens chèrement acquis), benh vous risquez vous retrouver le bec dans l'eau : pas mal de TV "standard", si elles ont bien un port USB (quand ce n'est pas un port d'administrations), n'aiment pas encore tout à fait bien ce format...

Alors le script ci-dessous est votre ami !


#!/bin/bash
#Dépendances : mediainfo, lame, faad, mencoder
function checkError() {
 if [ "$1" != "0" ]; then
  echo "Error ! Halting..."
  exit 0;
 fi
}
OIFS="$IFS"
IFS=$'\n' 

for FILE in `find ./ -iname \*.mkv` ;
do
 NB_VIDEO=`mediainfo --Inform="General;%VideoCount%" "$FILE"`
 NB_AUDIO=`mediainfo --Inform="General;%AudioCount%" "$FILE"`
 if [ $NB_VIDEO -eq 1 ] && [ $NB_AUDIO -eq 1 ]; then
  ID_VIDEO=`mediainfo --Inform="Video;%ID/String%" "$FILE"`
  ID_AUDIO=`mediainfo --Inform="Audio;%ID/String%" "$FILE"`
  FMT_VIDEO=`mediainfo --Inform="Video;%Format%" "$FILE"`
  FMT_AUDIO=`mediainfo --Inform="Audio;%Format%" "$FILE"`
  echo "Splitting '$FILE' Audio ($ID_AUDIO:$FMT_AUDIO) & Video ($ID_VIDEO:$FMT_VIDEO) ..."
  mkvextract -q tracks "$FILE" $ID_VIDEO:"$FILE.$FMT_VIDEO" $ID_AUDIO:"$FILE.$FMT_AUDIO"
  checkError $?
  if [ "$FMT_AUDIO" != "MP3" ]; then
   echo "Converting $ID_AUDIO:$FMT_AUDIO to MP3"
   echo -n "1/2 ..."
   #mplayer -really-quiet -ao pcm "$FILE.$FMT_AUDIO" -ao pcm:file="$FILE.wav" 2>&1>/dev/null
   faad -q -o "$FILE.wav" "$FILE.$FMT_AUDIO"
   checkError $?
   echo "2/2 ..."
   lame --silent -h -b 128 "$FILE.wav" "$FILE.MP3"
   checkError $?
   rm "$FILE.wav" "$FILE.$FMT_AUDIO"
   FMT_AUDIO="MP3";
  fi
  echo "Joining Audio ($FMT_AUDIO) & Video ($FMT_VIDEO) ..."
  mencoder -quiet -idx -ovc copy -oac copy -mc 0 -noskip -audiofile "$FILE.$FMT_AUDIO" "$FILE.$FMT_VIDEO" -o "$FILE.avi" 2>&1>/dev/null
  checkError $?
  rm "$FILE.$FMT_AUDIO" "$FILE.$FMT_VIDEO"
  echo -e "\n => '$FILE.avi' : Transcode finished"
 else
  echo -n "Error : $FILE contains $NB_VIDEO videos tracks et $NB_AUDIO audio tracks"
 fi
done
IFS="$OIFS"

Aucun commentaire:

Enregistrer un commentaire