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.

#26 Le 03/05/2008, à 09:25

michel2652

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Bonjour,

@ jcvittet2, utilise les balises [ Code ] pour coller, merci

Tu colles entre les balises

A+

#27 Le 03/05/2008, à 11:57

PRQT83

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Ton script MPEG2avi est vraiment super efficace et offre un résultat nickel big_smile
je le conseille à ceux qui aime utiliser les scripts-nautilus ( et aux autres aussi d'ailleurs) wink

Dernière modification par PRQT83 (Le 03/05/2008, à 12:02)

#28 Le 04/05/2008, à 22:05

thurston

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Alors voila, je reviens avec le script final, concocté par jcvittet, avec qui j'ai orienté ce script pour le but suivant (faible contribution de ma part en vérité):

Encoder en
- xvid 2 passes (pas d'option autre format)
et au choix:
- audio ac3 original
- audio mp3

un film.mpg obtenu par le rip d'un DVD sous acidrip (option -copy pour audio et video, avec extension .mpg), le tout en controlant le crop ainsi que la piste audio. Un fichier log est créé qui indique les options de codage ainsi que le temps d'encodage. Y sont inscrits le type de processeur ainsi que la quantité de mémoire vive. Toujours intéressant pour comparaison je trouve.
Voilà.

Le résultat est un script qui interpelle en anglais, ultra efficace (erreur pas permise sur le crop ainsi que sur la langue choisie), et qui ne fait appelle qu'à mencoder finalement. Une certaine pérénité donc.

A+
Thurston

PS: à jcvittet. Je souahiterais utiliser ce script pour mes k7 DV de vidéos familiales (issue de camescope). Penses tu qu'il y ait un souci quelconque, ou cela devrait passer? Je vais essayer, il faut certainement changer l'argument controlé video/mp2p..

#!/bin/bash
#########################################
# Script de jcvittet & Thurston / Ubuntu
# mpegtoavi
#########################################
# Nautilus script
# Encodage de mpeg2 en avi (AC3/mp3,xvid)
# Mplayer, mencoder, zenity
#########################################

# Control of argument presence
if [ $# -eq 0 ]
   then
      echo "usage: mpeg2xvid [-film.mpg]"
      exit 1
fi


for arg
do
# identification of video type
typevid=`file -bi "$arg"`
# if argument = video/mp2p
if [ $typevid = video/mp2p ]; then

# identification of audio track
videoinfo()
   {
   zenity --info --title="INFO" --text="Specify DVD ID_AUDIO \n ex: 128"
   mplayer -identify -vc null -ac null -frames 0 "$arg" | grep "ID_AUDIO_ID=" | zenity --text-info & atrack=`zenity --entry --title="INPUTS" --text="Enter audio track ID ex: 128" 2>&1`

   zenity --info --title="INFO" --text="Next: Test of audio track (correct language)...then Echap"
   mplayer "$arg" -ss 300 -aid $atrack
   zenity --question --title="QUESTION" --text="Audio track/language correct ?"

   if [ $? = 0 ]; then

       # Video aspect search
       zenity --info --title="INFO" --text="Next: Crop processing \n Wait and Play up to clear scene \n ... then Echap"
       # Video Crop search 
       crop=`mplayer "$arg" -ss 200 -vf cropdetect | tail -n 4 | head -n 1 | cat | cut -d= -f2 | cut -d")" -f1`

       zenity --info --text="Next:Crop cheking...then Echap"
       mplayer "$arg" -aid $atrack -ss 300 -vf crop=$crop
       zenity --question --title="QUESTION" --text="Crop correct ?"
 

      if [ $? = 0 ]; then   
         # Definition of video bitrate 
         vbitrate=`zenity --entry --title="INPUTS" --text="Entrer video BITRATE ex: 1500 kbp/s (defaut mencoder = 800 kbp/s)" 2>&1`
     
          else zenity --info --title="INFO" --text="Crop NOT CORRECT \n RETRY" && exit
       fi

   else zenity --info --title="INFO" --text="Audio track NOT CORRECT \n RETRY" && exit
   fi
   }

# Encoding mencoder xvid-AC3 2 passes
xvidencac3()
   {
   # set intitial encoding time
   # date +%s gives duration between 1-01-1970 in seconds. Then easy to compute for duration calculation
   encoding_start_date=$(date +%s)

   # Creation of a text file with parameters used for encoding work
   echo titre = "$arg", video codec = xvid 2 passes, audio codec = ac3 copy, vbitrate = $vbitrate, track audio ID = $atrack, crop = $crop, autoaspect >> "${arg/%.*/.txt}"

   # passe 1
   mencoder "$arg" -aid $atrack -oac copy -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:pass=1:bitrate=$vbitrate:autoaspect:turbo -vf crop=$crop -passlogfile "${arg/%.*/.log}" -o /dev/null | nice zenity --progress --auto-close --pulsate --title="MENCODER xvid-ac3" --text="Encodage en mpeg4 de: \n ... "$arg" ... \n Bitrate video = $vbitrate \n Audio = $atrack \n Audio codec = AC3 initial \n Crop = $crop \n Autoaspect \n Qualité VHQ \n PASSE 1 (turbo) ... processing"

   # passe 2
   mencoder "$arg" -aid $atrack -oac copy -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:pass=2:bitrate=$vbitrate:autoaspect -vf crop=$crop -passlogfile "${arg/%.*/.log}" -o "${arg/%.*/.avi}" | nice zenity --progress --auto-close --pulsate --title="MENCODER xvid-ac3" --text="Encodage en mpeg4 de: \n ... "$arg" ... \n Bitrate video = $vbitrate \n Audio = $atrack \n Audio codec = AC3 initial \n Crop = $crop \n Autoaspect \n Qualité VHQ \n PASSE 2 ... processing"

   # set final encoding time
   # date +%s gives duration between 1-01-1970 in seconds. Then easy to compute for duration calculation
   encoding_stop_date=$(date +%s)
   }

# Encoding mencoder xvid-mp3 2 passes
xvidencmp3()
   {
   # Amplification audio
   ampli=`zenity --entry --title="INPUTS" --text="Enter Amplification facteur ex: 5  (0 - 10)" 2>&1`

   # set intitial encoding time
   # date +%s gives duration between 1-01-1970 in seconds. Then easy to compute for duration calculation
   encoding_start_date=$(date +%s)

   # Creation of a text file with parameters used for encoding work
   echo titre = "$arg", video codec = xvid 2 passes, audio codec = mp3, audio amplification = $ampli, vbitrate = $vbitrate, track audio ID = $atrack, crop = $crop, autoaspect >> "${arg/%.*/.txt}"

   # passe 1
   mencoder "$arg" -aid $atrack -oac mp3lame -lameopts vbr=3:vol=$ampli -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:pass=1:bitrate=$vbitrate:autoaspect:turbo -vf crop=$crop -passlogfile "${arg/%.*/.log}" -o /dev/null | nice zenity --progress --auto-close --pulsate --title="MENCODER xvid-mp3" --text="Encodage en mpeg4 de: \n ... "$arg" ... \n Bitrate video = $vbitrate \n Audio = $atrack \n \n Audio codec = MP3 \n Volume = x $ampli \n Crop = $crop \n Autoaspect \n Qualité VHQ \n PASSE 1 (turbo) ... en cours"
   # passe 2
   mencoder "$arg" -aid $atrack -oac mp3lame -lameopts vbr=3:vol=$ampli -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:pass=2:bitrate=$vbitrate:autoaspect -vf crop=$crop -passlogfile "${arg/%.*/.log}" -o "${arg/%.*/.avi}" | nice zenity --progress --auto-close --pulsate --title="MENCODER xvid-mp3" --text="Encodage en mpeg4 de: \n ... "$arg" ... \n Bitrate video = $vbitrate \n Audio = $atrack \n \n Audio codec = MP3 \n Volume = x $ampli \n Crop = $crop \n Autoaspect \n Qualité VHQ \n PASSE 2 ... en cours"

   # set final encoding time
   # date +%s gives duration between 1-01-1970 in seconds. Then easy to compute for duration calculation
   encoding_stop_date=$(date +%s)
   }

# Choice Box (avi xvid-mp3 or avi xvid-ac3)
encode=`zenity  --title="MPEG to AVI" --text="MPEG to AVI 2 passes (Mencoder)" --list --radiolist --height="250" --width="400" --column="Selection" \
    --column="Avi"\
    --column="Encodage"\
    FALSE "xvid-mp3" "Encodage mencoder avi xvid-mp3 "\
    TRUE "xvid-ac3" "Encodage mencoder avi xvid-ac3"\
    | sed 's/ max//g'`
   if [ "$encode" = "xvid-mp3" ]; then
   videoinfo && xvidencmp3 && rm -f "${arg/%.*/.log}" && zenity --info --title="INFO" --text="Encoding ... OK"
   elif [ "$encode" = "xvid-ac3" ]; then
   videoinfo && xvidencac3 && rm -f "${arg/%.*/.log}" && zenity --info --title="INFO" --text="Encoding ... OK"
   else exit
   fi

# Calculate & fill the log file with time needed for encoding
   difference=$(( encoding_stop_date-encoding_start_date ))
   he=$(( difference/3600 ))
   mi=$(( (( difference/60 ))-$(( he*60 )) ))
   #se=$(( difference-$(( $(( mi*60 ))+$(( he*3600 )) )) ))

   echo encoding time "=" $he"Hour "$mi"minutes" # $se 
   echo encoding time "=" $he"Hour "$mi"minutes" >> "${arg/%.*/.txt}"

   echo "Processor type & memory size" >> "${arg/%.*/.txt}"
   cat /proc/cpuinfo | grep "model name" >> "${arg/%.*/.txt}"
   cat /proc/meminfo | grep MemTotal >> "${arg/%.*/.txt}"


exit

else zenity --info --title="INFO" --text="Argument non video/mp2p. Please use Acidrip for DVD ripping and specify .mpg for output file, with copy option for audio and video. Please Ensure you select correct laguage \n Encodage canceled" && exit  
fi
done

Hors ligne

#29 Le 04/05/2008, à 22:54

jcvittet2

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Salut Thurston,
J'essaierai ton script chez moi (je suis au boulot).
Je ne connais pas le format DV mais je ne doute pas que mencoder le traite aussi bien.
Tu as peut-être vu que acidrip n'identifie pas correctement les pistes audio. La recherche sur French ne marche pas toujours. J'ai commencé un script de rip avec choix audio sur le même principe que l'encodage. L'autre solution est de ripper toutes les pistes et de traiter au moment de l'encodage, ça prend plus de place.
Bonne journée aux scripteurs et aux autres

#30 Le 06/05/2008, à 11:16

PRQT83

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Juste pour info: version d'acidrip 0.14 ( celle de Dapper); pas de problème de langue.
Avec le script MPEG2avi, bitrate=1000 donne:
Le Seigneur des Anneaux-Le Retour du Roi version longue dvd 1= 903 méga/720*416/mpeg4( xvid, ffmpeg)/25fps/audio: mp3 128k 48000Hz.
Vu la qualité, je vais revendre mes originaux moi   lol
Edit: pour le problème d'identification des langues, j'ai remarqué que quelquefois elle sont mal référencées ( mais vous avez du remarquer vous aussi).
Ex dans acidrip ou autre: fr=128/en=129/es=130 mais ce ne sont pas les bon identifiants.
Et en lançant mplayer ( je le lance tout le temps en console) on se rend compte que le français est es=130   hmm
Bon, ça m'est arrivé que sur 2-3 dvd mais d'ou l'intérêt de la vérification audio de ton script wink

#31 Le 06/05/2008, à 20:12

thurston

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Salut PRQT83,

Je trouve le temps d'encodage super long sur mon P4 2.4GHz. Il m'a fallu presque 8 heures pour un encodage d'un film de 2 heures codec ac3 pour l'audio.
Qu'en est il chez toi?
Je trouve effectivement que le script (de jcvittet) a effectivement l'avantage énorme de vérifier les paramètres de l'encodage avant toute action.
A+
Thurston

Hors ligne

#32 Le 06/05/2008, à 20:36

PRQT83

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Salut Thurston,
j'ai le même proc que toi et pour un film de 3h je mets 8-9h.
C'est vrai que c'est long, mais wahou! Quel résultat ( j'encode quand je dors donc pas grave pour la durée)
En comparaison sur mon P4 2,4ghz ( même proc que toi):
un film de 3h avec dvdrip environ 20 minutes pour l'extraction et environ 6 heures pour un encodage en 2pass.
Avec acidrip, un film de 3heure avec une taille de fichier de 1giga environ 6 heures voir 7 en 2pass.
Mais j'ai un meilleur résultat avec le script big_smile

#33 Le 06/05/2008, à 20:44

thurston

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Ok donc vitesse équivalente. Comment arrives tu à détecter une meilleure qualité?
C'est si visible que cela?

Pour ma part, je descends pas en dessous de 1500 kbp/s, ce qui me donne couramment des fichiers de 1.5 Go pour 2 heures, surtout que je garde l'ac3.

A+
Thurston

Hors ligne

#34 Le 06/05/2008, à 21:03

PRQT83

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Teste en 2 pass avec dvdrip ou acidrip ( en mettant une taille de fichier de 1giga par exemple) et teste le même film avec le script.
J'ai testé sur ( dvd achetés dans le commerce messieurs les modos smile )
- X-men 3, les matrix,  spiderman 3, 4 fantastiques et le surfeur d'argent pour voir sur des scènes d'actions rapides.
Et sur le seigneur des anneaux versions longue édition spéciale pour la beauté des images. Ça se voit nettement quand même ( combat 3d de Néo dans matrix par exemple)
Vu la comparaison, je refait mes rip de ma collection avec son script même si c'est plus long et me prend environ 300méga de plus ( c'est pas la place qui me gêne).
Vais dire mieux, il fait même des images aussi nette voire mieux que k9copy... ( je m'excuse du contenu du post auprès des devs big_smile ).
Mais à nous tous on va bien arrivé à faire un script qui "tue" ( je trouve qu'on en est pas loin) smile
Edit: j'avais pas bien lu; je fais moi aussi des avi de 1200 à 1500méga ( sans ac3 pour l'instant) avec un débit mp3 entre 128 et 224k

Dernière modification par PRQT83 (Le 06/05/2008, à 21:07)

#35 Le 06/05/2008, à 23:23

jcvittet

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Comme vous l'aurez compris, mes scripts sont du bidouillage, à la base, je n'y connais rien en informatique, je n'ai fait que pomper des commandes trouvées ça et là, ce qui d'ailleurs est plutôt rassurant pour les nouveaux sur linux, avec un peu de curiosité, on peut faire des choses intéressantes.
Pour les durées d'encodage ou plutôt de transcodage comme on m'a fait remarquer, c'est sûr qu'on peut  les réduire mais la qualité y perdra sûrement. Déjà en supprimant l'option turbo de mencoder ...
De même, je me souviens avoir fait mieux mais en beaucoup plus long. Si sur un P4 bi-turbo ça prend 12h, je vous dis pas sur les processeurs plus anciens.
J'utilise un vbitrate de 900 pour avoir une taille limitée car je sauvegarde les films de ma fille (13 ans), si elle bouzille son dvd (comme elle me bouzille ses lecteurs mp3), je pourrai lui en refaire un, de moins bonne qualité mais ça lui suffira surtout pour des dessins animés.
Merci à tous pour les critiques, ça m'encourage à continuer dans mon délire.

Hors ligne

#36 Le 07/05/2008, à 08:28

PRQT83

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Attention jcvittet; ce ne sont absolument pas des critiques! smile
Pour du "bidouillage et de l'assemblage de commande trouvée ici et là" je trouve que tu as obtenu un excellent résultat.
Et la durée d'encodage ne me dérange absolument pas: plus c'est long, plus c'est bon ( pardon, je m'égare smile
Tout ça pour dire que je trouve le script super ( je sais, je te l'ai déjà dit).
Bon, je finis mes test sur des dessins animés avec MPEG2avi, et ensuite j'attaque à tester les 2 que tu m'as envoyé. smile
Edit: si tu fais des scripts plus rapide ( comme tu dis, moins bonne qualité) je m'en servirais pas tongue
Alors que ceux là big_smile
Ça fait travailler mon P4 lol

Dernière modification par PRQT83 (Le 07/05/2008, à 08:34)

#37 Le 07/05/2008, à 08:43

PRQT83

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

jcvittet a écrit :

Comme vous l'aurez compris, mes scripts sont du bidouillage, à la base, je n'y connais rien en informatique, je n'ai fait que pomper des commandes trouvées ça et là, ce qui d'ailleurs est plutôt rassurant pour les nouveaux sur linux, avec un peu de curiosité, on peut faire des choses intéressantes.

On est tous pareil big_smile
La mienne à 4ans, et pour elle, c'est limite des freesbee!
Alors vu que j'ai environ 400 dvds collector, préfère anticiper. ( et le script est parfait pour moi) smile

#38 Le 09/09/2008, à 22:28

thurston

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

J'ai eu des soucis avec acidrip, qui permet d'obtenir le mpeg initial sans qui rien n'est possible. En effet le script part de ce fichier.
Je m'en suis sorti avec cette ligne de commande qui permet d'obtenir
Il faut que j'afffine car il y a des erreurs.

lsdvd /dev/dvd

pour valider la piste puis (1 représente la piste)

mplayer dvd://1 -dumpstream -dumpfile DVD.mpg

On obtient alors un fichier mpeg qui passe à la moulinette du script mpeg2avi.
(je corrige plus tard ce qui ne va pas dans la ligne de commande)
A+
Thurston

Dernière modification par thurston (Le 09/09/2008, à 22:28)

Hors ligne

#39 Le 07/11/2008, à 00:33

thurston

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Je me demande si les problèmes liés à AcidRip que j'avais rencontrés n'étaient pas tout simplement liés à libdvdcss2 non installé. Dans le doute:

sudo gedit /etc/apt/sources.list

Ajouter:
    ##Dépôt Medibuntu
    deb http://fr.packages.medibuntu.org/ hardy free non-free

Installer la clef .gpg nécessaire.:
   

wget -q http://fr.packages.medibuntu.org/medibuntu-key.gpg -O- | sudo apt-key add -

Il ne reste plus qu'a mettre à jours la liste des dépôts et d'installer le paquet libdvdcss2.
   

sudo apt-get update
    sudo apt-get install libdvdcss2

et enfin

sudo apt-get install lame vorbis-tools subtitleripper libdvdread3 gstreamer0.10-plugins-ugly gstreamer0.10-ffmpeg gstreamer0.10-plugins-good

Tout ceci pris sur ce site web: http://ubunblox.blogspot.com/2008/07/ripper-et-encoder-facilement-un-dvd.html

Hors ligne

#40 Le 19/12/2008, à 20:08

thurston

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Bonjour,

J'ai un peu amélioré le script initial. les modifications sont:
1. possibilité de shutdown à la fin de l'encodage
2. plusieurs films peuvent être encodés maintenant, avec une phase initiale de détermination des settings corrects de chaque film, puis leur encodage après coup
3. la possibilité de passer des films DV
4. l'export en x264
5. des infos concernant la taille approx sont données lors de la prise d'info, avec la possibilité d'ajuster le bitrate pour arriver à une taille voulue (par pas successifs)

L'idée est évidemment de pouvoir encoder x films en prenant quelques minutes au départ, et en laissant tourner le PC une nuit durant s'il le faut, avec un arrêt automatique de celui ci en fin de job.

LE RESULTAT DU SCRIPT EST VRAIMENT TOP, enfin c'est mon avis: super efficace dans le cas de traitement multiple, avec les infos affichées pour controle rapide.
A+
ci joint le script
=> la version 01.4 améliore un peu les boutons annule des boites de dialogues.
=> la version 01.5 inclue un mode forcé car bizarrement certains fichiers .mpg n'acceptent pas l'option -ss de mplayer. en mode forcé [-f] ils passent.
=> la version 01.6 inclue un mode alternate pour avoir calculer différemment la durée du film (avant et après encodage), notamment utile pour des fichiers .ogg.

#!/bin/bash
#########################################
# Script de jcvittet & Thurston / Ubuntu
# mpegtoavi
#########################################
# Nautilus script
# Encodage de mpeg2 en avi (AC3/mp3,xvid)
# Mplayer, mencoder, zenity
#########################################
# Script Version: 01.6
# Revision date:  2009-03-15


#notes ffmpeg -i Duration:

# Variables initialisation
#******************************************************************************************
mode=standard

# Control of argument presence
#******************************************************************************************
if [ $# -eq 0 ]
then
   echo "Usage: $0 [-f] [-a] <film1.mpg> <film2.mpg>"  
   echo "usage: $0 [-h] => Help Notes"
   exit 1
fi

# Handle options
#******************************************************************************************
while getopts "hfa" opt
do
   case $opt in
      h) # Help
         clear
         echo "usage: $0 <film1.mpg> <film2.mpg>      => sudo  if shutdown required"
         echo "usage: $0 [-h]                         => help"    
         echo "usage: $0 [-f] <film1.mpg> <film2.mpg> => forced mode"
         echo "         referring to Mplayer bug on some video (-ss bug)"
         echo "usage: $0 [-a] <film1.mpg> <film2.mpg> => alternate mode"
         echo "         useful for *.ogg for movie length being extracted in alt. way"
         echo ""
         echo "Sources: any video file, DV, DVD being ripped:"
         echo "        *)Using Acidrip"
         echo "         -copy mode for Audio & Video"
         echo "         -Output= .mpg"
         echo "        *)Using DVD::Rip"
         echo "         -DVD Extraction"
         echo "         -Merge operation: cat 1.vob 2.vob > DVD.mpg"
         echo "        *)Using Command Line in a terminal"
         echo "         -DVD Info: lsdvd /dev/dvd"
         echo "         -Check correct file number x: mplayer dvd://x"
         echo "         -DVD Rip: mplayer dvd://x -dumpstream -dumpfile DVD.mpg"
         echo ""
         echo "Notes:"
         echo "        *mplayer, mencoder,libdvdcss proposed for auto-installation"
         echo "        *a log file is created at the end of process"
         echo ""
         exit 1
         ;;

      f) # Force mode solving problem of mplayer -ss incompatible with some video files
         mode=forced
         ;;

      a) # alternate mode solving problem of mplayer -ss incompatible with some video files
         mode=alternate
         ;;
    esac

    # Remove option

    shift $((OPTIND - 1))
    OPTIND=1
done


#******************************************************************************************
# Control of minimum software requirements correctly installed
test -x /usr/bin/mplayer || sudo apt-get install mplayer -y
test -x /usr/bin/mencoder || sudo apt-get install mencoder -y

# Control of additionnal software correctly installed
#******************************************************************************************

if [ `test -x /usr/share/doc/libdvdcss2` ];
then
   echo "Do you want to proceed with libdvdcss2 installation? (y/n)"
   read answer
   if [ $answer = y ];
   then
      echo "##Dépôt Medibuntu" | sudo tee -a /etc/apt/sources.list
      echo "deb http://fr.packages.medibuntu.org/ hardy free non-free" | sudo tee -a /etc/apt/sources.list
      wget -q http://fr.packages.medibuntu.org/medibuntu-key.gpg
      sudo apt-key add medibuntu-key.gpg
      sudo apt-get update
      sudo apt-get install libdvdcss2
      sudo rm -rf medibuntu-key.gpg
   fi
fi

#******************************************************************************************
function movie_info()
{
# $1: file to be analysed
# $2: atrack or all
# Length track search for optimize video-info analyse
# case of several id track is taken in account with option all or ID track
video_size=`du -h "$1" | awk -F " " '{print $1}'`

if [ $2 = "all" ];
then
   video_length=`mplayer -vo null -ao null -frames 0 -identify "$1" 2>/dev/null | grep "ID_LENGTH=" | awk -F "=" '{print $NF}' | awk -F "." '{print $1}'`
   movie_info=`mplayer -vo null -ao null -frames 0 -identify "$1" 2>/dev/null | grep "ID_"`
   audio_id=`echo "$movie_info" | grep "ID_AUDIO_ID=" 2>/dev/null |awk -F "=" '{print $NF}' | sort`
   audio_id=`echo $audio_id` # supress \n for nice zenity look
   audio_id_nb=`echo $audio_id | wc -w `
   if [ ! $audio_id_nb -eq 1 ];
   then
      audio_size=""
      audio_commnent="Result depends on audio id track: ?"
   else
      audio_bitrate=`echo "$movie_info" | grep "ID_AUDIO_BITRATE=" | awk -F "=" '{print $NF}' | sort -r | awk 'NR==1{print $0}'`
      audio_size=$(( video_length * audio_bitrate / 8 / 1024 / 1024 ))
      audio_commnent=""
   fi

else
   video_length=`mplayer -aid $2 -vo null -ao null -frames 0 -identify "$1" 2>/dev/null | grep "ID_LENGTH=" | awk -F "=" '{print $NF}' | awk -F "." '{print $1}'`
   movie_info=`mplayer -aid $2 -vo null -ao null -frames 0 -identify "$1" 2>/dev/null | grep "ID_"`
   audio_bitrate=`echo "$movie_info" | grep "ID_AUDIO_BITRATE=" | awk -F "=" '{print $NF}' | sort -r | awk 'NR==1{print $0}'`
   audio_size=$(( video_length * audio_bitrate / 8 / 1024 / 1024 ))
   audio_commnent=""
   audio_id=`echo "$movie_info" | grep "ID_AUDIO_ID=" 2>/dev/null |awk -F "=" '{print $NF}' | sort`
   audio_id=`echo $audio_id` # supress \n for nice zenity look
   audio_id_nb=`echo $audio_id | wc -w `
fi

if [ $mode = "alternate" ];
then
   video_length=`ffmpeg -i "$1" 2>&1| grep "Duration: " | awk -F ": " '{print $2}' | awk -F "," '{print $1}' | awk -F "." '{print $1}'`
   IFS=":"
    hour=`echo $video_length | awk '{print $1}'`
    min=`echo $video_length | awk '{print $2}'`
    sec=`echo $video_length | awk '{print $3}'`
   unset IFS

   if [ "$video_length" = "N/A" ];
   then
      video_length=0
   else
      video_length=$((10#$sec + 10#$min*10#60 + 10#$hour*10#3600))
   fi
      audio_size=$(( video_length * audio_bitrate / 8 / 1024 / 1024 ))
fi
#mplayer -vo null -ao null -frames 0 -identify "$1" 2>/dev/null |sed -ne '/^ID_/ {s/[]()|&;<>`'"'"'\\!$" []/\\&/g;p}'
}

#******************************************************************************************
function encoding_type()
# => $encode
# $1: file to be analysed
# $2: encoding setting file
{
# Choice Box (avi xvid-mp3 or avi xvid-ac3)
encode=`zenity  --title="MPEG to AVI" \
                --text="MPEG to AVI 2 passes (Mencoder)" \
                --list \
                --radiolist \
                --height="250" \
                --width="400" \
                --column="Selection" \
                --column="Avi" \
                --column="Encodage" \
                FALSE "xvid-mp3" "Encodage mencoder avi xvid-mp3" \
                FALSE "x264-mp3" "Encodage mencoder avi x264-mp3" \
                TRUE "xvid-ac3" "Encodage mencoder avi xvid-ac3" \
                | sed 's/ max//g'`
echo $encode > $2

# case of cancel action
if [ "$encode" = "" ];
then
   exit
fi

}

#******************************************************************************************
function videoinfo()
# $1: file to be analysed
# $2: encoding setting file
# $3= $encode (xvid-ac3 or xvid-mp3...)
# => $atrack 
# => $ampli
# => $vbitrate
# => $crop
{
# Length track search for optimize video-info analyse (some mpg doesn't stand it
if [ $mode = "forced" ];
then
   video_analyse_sector=0
else
   video_analyse_sector=$(( video_length / 5 )) # 20% of the total length of the movie
fi

# Audio track search (auto-scan of possible id audio track, with display of initial size
atrack=`zenity --entry --title="INPUTS" \
                       --text="Enter audio track ID (ex: 128): auto-detected => $audio_id "\
                       --entry-text="$audio_id" 2>&1`

# case of cancel action
if [ "$atrack" = "" ];
then
   exit
fi

if [ ! $audio_id_nb -eq 1 ];
then
   movie_info    $1 $atrack
fi

echo "$3" | grep "mp3"
if [ $? -eq 0 ];
then
   # amplification factor requested for MP3 purposes
   ampli=`zenity --entry --title="INPUTS" \
                         --text="Enter Amplification facteur (use only for MP3) ex: 5  (0 - 10)" \
                         --entry-text="5" 2>&1`
   audio_size=$(( video_length * 128 / 8 / 1024 )) # approx audio file size assuming vbr mp3 file will result in a  cbr 128 kbp file
else
   ampli=5 #obliges to give a value to respect encode_file format even if unused
fi

mplayer "$1" -ss $video_analyse_sector -aid $atrack
zenity --question --title="QUESTION" \
                  --text=" Audio track/language correct ? \n Selected audio id $atrack size = $audio_size Mo"

if [ $? = 0 ];
then
   # Video & crop search
   zenity --info --title="INFO" \
                 --text=" Next: Crop processing \n Wait and Play up to clear scene... \n ... then Echap"
   crop=`mplayer "$1" -aid $atrack -ss $video_analyse_sector -vf cropdetect | tail -n 4 | head -n 1 | cat | cut -d= -f2 | cut -d")" -f1`
   zenity --info --title="INFO" \
                 --text="Next:Crop cheking...then Echap"
   mplayer "$1" -aid $atrack -ss $video_analyse_sector -vf crop=$crop
   zenity --question --title="QUESTION" \
                     --text="Crop: $crop seems correct ?"

   if [ $? = 0 ];

   then
      #determination of correct bitrate for movie final size
      final_movie_size_ok=0
      while [ $final_movie_size_ok -eq 0 ]
      do
         vbitrate=`zenity --entry --title="INPUTS" \
                          --text="Enter video BITRATE ex: 1500 kbp/s (defaut mencoder = 800 kbp/s)
                                  ****************************************
                                  (original file size = $video_size)
                                  1000 kbp/s => encoded movie size ~ $(( video_length * 1000*1000 /1024/1024/8 + audio_size )) Mo
                                  1500 kbp/s => encoded movie size ~ $(( video_length * 1500*1000 /1024/1024/8 + audio_size )) Mo
                                  2000 kbp/s => encoded movie size ~ $(( video_length * 2000*1000 /1024/1024/8 + audio_size )) Mo" \
                          --entry-text="1500" 2>&1`
         if [ $? -eq 1 ];
         then
            exit
         fi
         final_movie_size=$(( video_length * vbitrate*1000 /1024/1024/8 + audio_size ))
         zenity --question --title="QUESTION" \
                --text=" Final movie size expected = $final_movie_size Mo.\n Is It OK? \n - Valid for encoding process or next movie info collection. \n - abort to retry a different bitrate ?" 
         if [ $? = 0 ];
         then
            final_movie_size_ok=1
         fi
      done
 
    else
      zenity --question --title="INFO" \
                        --text="Crop Not Ok, do you want to retry?"
      if [ $? -eq 1 ];
      then
         exit
      else
          videoinfo_ok=0
          return
      fi
   fi
else 
   zenity --question --title="INFO" \
                     --text="Audio track Not Ok, do you want to retry?"
      if [ $? -eq 1 ];
      then
         exit
       else
          videoinfo_ok=0
          return
       fi
fi

echo $atrack           >> $2
echo $ampli            >> $2
echo $vbitrate         >> $2
echo $crop             >> $2
echo $final_movie_size >> $2
videoinfo_ok=1
}

#******************************************************************************************
function xvidencac3()
# Encoding mencoder xvid-AC3 2 passes
# $1= file to be analysed
# $2= $atrack 
# $3= $ampli (not used in AC3)
# $4= $vbitrate
# $5= $crop
# $6= encode type
# $7= $final_movie_size
# Creation of a text file with parameters used for encoding work
{
# passe 1
mencoder "$1" -aid $2 \
                -oac copy \
                -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:pass=1:bitrate=$4:autoaspect:turbo -vf crop=$5 \
                -passlogfile "${1/%.*/.log}" -o /dev/null \
                | nice zenity --progress --auto-close --pulsate --title="MENCODER xvid-ac3" \
                                                                --text=" Encodage en mpeg4 de: \n ... "$1" ... \n Bitrate video = $4 \n Audio ID = $2 \n Audio codec = AC3 initial \n Crop = $5 \n Autoaspect \n Qualité VHQ \n PASSE 1 (turbo) ... processing"

# passe 2
mencoder "$1" -aid $2 \
                -oac copy -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:pass=2:bitrate=$4:autoaspect -vf crop=$5 \
                -passlogfile "${1/%.*/.log}" -o "${1/%.*/_xvid.avi}" \
                | nice zenity --progress --auto-close --pulsate --title="MENCODER xvid-ac3" \
                                                                   --text=" Encodage en mpeg4 de: \n ... "$1" ... \n Bitrate video = $3 \n Audio ID = $2 \n Audio codec = AC3 initial \n Crop = $5 \n Autoaspect \n Qualité VHQ \n PASSE 2 ... processing \n Final size expected= $7 Mo"
}

#******************************************************************************************
function xvidencmp3()
# Encoding mencoder xvid-mp3 2 passes
# $1= file to be analysed
# $2= $atrack 
# $3= $ampli
# $4= $vbitrate
# $5= $crop
# $6= encode type
# $7= $final_movie_size
# Creation of a text file with parameters used for encoding work
# Encoding mencoder xvid-mp3 2 passes
{
# passe 1
mencoder "$1" -aid $2 -oac mp3lame -lameopts vbr=3:vol=$3 \
                -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:pass=1:bitrate=$4:autoaspect:turbo -vf crop=$5 \
                -passlogfile "${1/%.*/.log}" -o /dev/null \
                | nice zenity --progress --auto-close --pulsate --title="MENCODER xvid-mp3" 
                                                                --text=" Encodage en mpeg4 de: \n ... "$1" ... \n Bitrate video = $4 \n Audio ID = $2 \n \n Audio codec = MP3 VBR 3 \n Volume = x $3 \n   Crop = $5 \n Autoaspect \n Qualité VHQ \n PASSE 1 (turbo) ... en cours"

# passe 2
mencoder "$1" -aid $2 -oac mp3lame -lameopts vbr=3:vol=$3 \
                -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:pass=2:bitrate=$4:autoaspect -vf crop=$5 \
                -passlogfile "${1/%.*/.log}" -o "${1/%.*/_xvid.avi}" \
                | nice zenity --progress --auto-close --pulsate --title="MENCODER xvid-mp3" \
                                                                --text="Encodage en mpeg4 de: \n ... "$1" ... \n Bitrate video = $4 \n Audio ID = $2 \n \n Audio codec = MP3 VBR 3 \n Volume = x $3 \n Crop = $5 \n Autoaspect \n Qualité VHQ \n PASSE 2 ... en cours \n Final size expected= $7 Mo"
}

#******************************************************************************************
function x264encmp3()
# Encoding mencoder xvid-AC3 2 passes
# $1= file to be analysed
# $2= $atrack 
# $3= $ampli
# $4= $vbitrate
# $5= $crop
# $6= encode type
# $7= $final_movie_size
{
mencoder "$1" -aid $2 -vf crop=$5 -ovc x264 -x264encopts pass=1:subq=3:bframes=1:b_pyramid:weight_b:bitrate=$4 -oac copy -o /dev/null  && mencoder \
         "$1" -aid $2 -vf crop=$5 -ovc x264 -x264encopts pass=2:subq=3:bframes=1:b_pyramid:weight_b:bitrate=$4 \
                      -oac mp3lame -lameopts vbr=3:vol=$3 -o "${1/%.*/-x264.avi}" \
         | nice zenity --progress --auto-close --pulsate --title="MENCODER x264-mp3" \
                                                         --text=" Encodage en mpeg4 de: \n ... "$1" ... \n Bitrate video = $4 \n Audio codec = MP3 VBR 3   \n Volume = x $3 \n Autoaspect \n Qualité ... \n PASSE 2 ... processing\n Final size expected= $7 Mo"
}

#******************************************************************************************
function postshutdown()
{
# Shutdown at the end of process Choice Box
end_action=`zenity  --title="End Of Process Action" \
                    --text="Select If PC enter shutdown at the end of encoding" \
                    --list \
                    --radiolist \
                    --height="250" \
                    --width="500" \
                    --column="Selection" \
                    --column="Action" \
                    --column="descriptif" \
                    FALSE "Shutdown" "Shutdown at End Of Encoding Process (sudo only)" \
                    TRUE "No-Shutdown" "PC Stays On at End Of Encoding Process" \
                    | sed 's/ max//g'`

if [ "$end_action" = "Shutdown" ];
then
   zenity --question --title="INFO" \
                     --text="You must be sudo for requesting a end process shutdown"
   if [ $? = 1 ];
   then
      exit
   fi
else
   if [ "$end_action" = "" ];
   then
      exit
   fi

fi	
}

#******************************************************************************************
function duration()
{
# $1= Stop date
# $2= Start date
# $3 = log file
# date +%s gives duration between 1-01-1970 in seconds. Then easy for duration calculation
difference=$(( $1-$2 ))
hour=$(( difference/3600 ))
min=$(( (( difference/60 ))-$(( hour*60 )) ))                     
sec=$(( (( difference ))-$(( hour*3600 + min*60 )) ))          
echo "Process Duration = $hour hour $min minutes $sec seconds" >> "$3"
}

#******************************************************************************************
function log_info()
# $1= video file log
# Calculate & fill the log file with time needed for encoding
{
log_final="${1/%.*/.log}"

echo -e "Original File Name: `basename $1`"                                    >> $log_final
echo -e "Initial Video Size: `du -h "$1" | awk -F " " '{print $1}'` \n"        >> $log_final
echo -e "Encoding Settings
 -encoding type: $encode
 -audio track:   $atrack
 -amplification: $ampli (not used if AC3-type)
 -video Bitrate: $vbitrate
 -crop applied:  $crop
 -script mode:   $mode
 -target size:   $final_movie_size Mo\n"                                      >> $log_final

encoding_start=`sed -n '7p' $log_encode_file`
encoding_stop=`sed -n '8p' $log_encode_file`
duration $encoding_stop $encoding_start "$log_final"

echo -e "\nProcessor type & memory size"                                      >> $log_final
cat /proc/cpuinfo | grep "model name"                                         >> $log_final
cat /proc/meminfo | grep MemTotal                                             >> $log_final
}

#******************************************************************************************

#******************************************************************************************
#************************* Main Program ***************************************************
#******************************************************************************************
# 0th step: what to be done end of global processing: shutdown or not
postshutdown

#******************************************************************************************
# 1st step: collect all info on video to be later encoded
for source in $@
do

   # creation of log file
   log_encode_file="${source/%.*/_encode_settings.txt}"
   touch $log_encode_file

   # identification of video type
   typevid=`file -bi "$source"`

   # if argument = video/mp2p
   if [ ! `echo $typevid |grep video >> /dev/null` ];
   then
      zenity --info --title="INFO" \
                    --text="Settings Process on - `basename $source` -  will start."
      encoding_type $source $log_encode_file
      movie_info    $source all

      videoinfo_ok=0
      while [ $videoinfo_ok -eq 0 ]
      do
         videoinfo     $source $log_encode_file $encode
      done
   else
      zenity --info --title="INFO" \
                    --text="Not a valid video file. Consult help $0 -h \n Encoding canceled" && exit  
   fi
done

#******************************************************************************************
# 2nd step: process encoding using individual log file
for source in $@
do   
   # point at log file previously created
   log_encode_file="${source/%.*/_encode_settings.txt}" 

   # set initial encoding time
   echo $(date +%s)     >> $log_encode_file  #7th line

   encode=`sed -n '1p' $log_encode_file`
   atrack=`sed -n '2p' $log_encode_file`
   ampli=`sed -n '3p' $log_encode_file`
   vbitrate=`sed -n '4p' $log_encode_file`
   crop=`sed -n '5p' $log_encode_file`
   final_movie_size=`sed -n '6p' $log_encode_file`
   

   if [ "$encode" = "xvid-mp3" ];
   then
      xvidencmp3  $source $atrack $ampli $vbitrate $crop $encode $final_movie_size && rm -f "${source/%.*/.log}"
   elif [ "$encode" = "xvid-ac3" ];
   then
      xvidencac3 $source $atrack $ampli $vbitrate $crop $encode $final_movie_size && rm -f "${source/%.*/.log}"
   elif [ "$encode" = "x264-mp3" ];
   then
      x264encmp3 $source $atrack $ampli $vbitrate $crop $encode $final_movie_size && rm -f "${source/%.*/.log}"
   else
      exit
   fi
   # set initial encoding time
   echo $(date +%s)     >> $log_encode_file   #8th line

   # collect all info in dedicated log file
   log_info $source
   
   # clean files
   rm -f $log_encode_file
done

#******************************************************************************************
# 3rd step: set final encoding action
# need to modify /etc/sudoers to get rights to shutdown PC though a script   

if [ "$end_action" = "Shutdown" ];
then
   sudo /sbin/shutdown -h now
fi
exit

Dernière modification par thurston (Le 15/03/2009, à 19:21)

Hors ligne

#41 Le 19/12/2008, à 20:16

cyrille

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

pourquoi ne pas utiliser OGMRip qui propose une interface graphique et permet l'encodage à la chaîne avec une job list ?

#42 Le 19/12/2008, à 22:39

thurston

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Salut cyrille,

Ben, 1) je connaissais pas. 2) très déçu jusqu'alors des logiciels au niveau du crop notamment.
Je vais essayer et redonnerai mon avis.
merci pour l'info
A+

Hors ligne

#43 Le 19/12/2008, à 23:29

cyrille

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

pour avoir accès à la job list il faut compiler le svn, la méthode est décrite dans mon blog

http://www.cyrille-borne.com/index.php?post/2008/05/19/Installation-du-svn-dOGMRip-premiers-ecrans-de-la-version-012

#44 Le 14/03/2009, à 18:22

thurston

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Bonjour,

Est ce quelqu'un utilise ce script? Je serais curieux de savoir ce qui pourrait etre améliorer. Pour ma part je traite tous mes travaux d'encodage avec ce dernier (mes DVDs, mes vidéos DV quand je veux les publier.)
Si quelqu'un est callé en x264, je veux bien de ses conseils quant aux options à passer de ce coté.
A+
Thurston

Hors ligne

#45 Le 15/03/2009, à 09:31

al_boon

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

moi j utilise un de ces scripts, enfin je suis en train de tester, ce qui pourrait etre bien c est de pouvoir se passer de acidrip, enfin  en incluant les commande que tu utilises ici



thurston a écrit :

J'ai eu des soucis avec acidrip, qui permet d'obtenir le mpeg initial sans qui rien n'est possible. En effet le script part de ce fichier.
Je m'en suis sorti avec cette ligne de commande qui permet d'obtenir
Il faut que j'afffine car il y a des erreurs.

lsdvd /dev/dvd

pour valider la piste puis (1 représente la piste)

mplayer dvd://1 -dumpstream -dumpfile DVD.mpg

On obtient alors un fichier mpeg qui passe à la moulinette du script mpeg2avi.
(je corrige plus tard ce qui ne va pas dans la ligne de commande)
A+
Thurston


viva ubuntu ^^ et deux personnes converties !!

ps: il est pas beau mon fils ? (cf mon avatar)

Hors ligne

#46 Le 15/03/2009, à 11:28

thurston

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Salut al_boon

Oui, le problème est le suivant:

1. La solution pour le rip n'est pas unique ni universel. Je veux dire, bizarrement une solution parmi les suivantes fonctionne, quand une autre ne fonctionne pas. Pour le moment, je ne suis jamais resté collé sur un seul DVD, mais je dois jongler entre les différentes solutions pour le ripp.

2. Le script lui fonctionne tout le temps (enfin j'espère, et surtout maintenant que j'ai mis l'option -f). Il donne de temps en temps des erreurs sur la taille estimée, car encore assez bizarrement, mplayer ne récupère pas tout le temps l'info correcte ID_LENGTH du film. Si je rajoute le rip dedans, il va bugger. De plus, le plus du script (enfin à mon sens) est le controle exact du crop, qui n'est pas laissé au soft qui se trompe souvent (essaie un DVD d'un one-man-show en spectacle par exemple avec le fond noir, le résultat est pas triste). De plus, j'achète souvent mes DVDs par 3-4. Je les rippe tous en quelques dizaines de minutes, et les compresse après coup en utilisant le script (qui peut gérer plusieurs films) et laisse alors tourner ma bécane pendant 24-36 heures d'affilé. Donc l'opération de rip me generait plus qu'autre chose.

3. Un récapitulatif des diéfferents méthodes pour passer d'un DVD à un fichier xvid haute qualité. Toutes les solutions donnent à l'arrivée un fichier mpg compatible avec le script.
3.a Acidrip
      Choisir copy pour Audio et Video, et eventuellement choisir la langue souhaitée.
      Choisir également une sortie .mpg

3.b DVD::Rip
      Extraction du DVD
      Recollage des morceaux de 1Go en utilisant
      cat 1.vob 2.vob > DVD.mpg

3.c Ligne de commande
     lsdvd /dev/dvd
     mplayer dvd://x -dumpstream -dumpfile DVD.mpg
     où x est en générale la plus longue piste, où celle souhaitée.
     (on peut tester si c'est la bonne piste par un simple mplayer dvd://x)

4. A noter que j'ai rajouté tout ceci dans le script sous l'aide de ce dernier
   mpeg2avi -h

A+
Merci pour tes commentaires si autres.
J'essaierai peut etre d'intégrer le rip avec une option au début, à valider ou non.
Thurston

Hors ligne

#47 Le 15/03/2009, à 11:32

al_boon

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

hum je comprends,  la je suis en train d encoder avec acidrip, je vais tester le script juste derriere et voir la différence, je donnerai des nouvelles surement demain car je risque de rentrer tard

Dernière modification par al_boon (Le 15/03/2009, à 11:36)


viva ubuntu ^^ et deux personnes converties !!

ps: il est pas beau mon fils ? (cf mon avatar)

Hors ligne

#48 Le 23/05/2009, à 22:29

thurston

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

Voila, j'ai modifié le script pour qu'il passe des noms de fichiers avec des espaces.
Je remets le script à jour ci dessous. Je laisse l'ancien quelques posts plus haut au cas où (renommer les fichiers sans espace avec la version 01.6 fonctionne chez moi parfaitement.
Au fait, jcvitttet, si tu passes par là j'aurais bien voulu avoir ton sentiment sur le script dont tu est l'initiateur et que j'ai maitenant pas mal bidouillé.
A+
Thurston

La version 01.7 donc:

#!/bin/bash
#########################################
# Script de jcvittet & Thurston / Ubuntu
# mpegtoavi
#########################################
# Nautilus script
# Encodage de mpeg2 en avi (AC3/mp3,xvid)
# Mplayer, mencoder, zenity
#########################################
# Script Version: 01.7
# Revision date:  2009-05-23
#
# Log
# *********************************************
# 01.7: Correct space in filename to be encoded

#ffmpeg -i valentin2.avi -s 720x432 -ar 44100 -aspect 4:3 -pass 1 -b 2500k -r 24 -acodec mp3 -ab 64 -f flv -y valentin2.flv
#notes ffmpeg -i Duration:

# Variables initialisation
#******************************************************************************************
mode=standard

# Control of argument presence
#******************************************************************************************
if [ $# -eq 0 ]
then
   echo "Usage: $0 [-f] [-a] <film1.mpg> <film2.mpg>"  
   echo "usage: $0 [-h] => Help Notes"
   exit 1
fi

# Handle options
#******************************************************************************************
while getopts "hfa" opt
do
   case $opt in
      h) # Help
         clear
         echo "usage: $0 <film1.mpg> <film2.mpg>      => sudo  if shutdown required"
         echo "usage: $0 [-h]                         => help"    
         echo "usage: $0 [-f] <film1.mpg> <film2.mpg> => forced mode"
         echo "         referring to Mplayer bug on some video (-ss bug)"
         echo "usage: $0 [-a] <film1.mpg> <film2.mpg> => alternate mode"
         echo "         useful for *.ogg for movie length being extracted in alt. way"
         echo ""
         echo "Sources: any video file, DV, DVD being ripped:"
         echo "        *)Using Acidrip"
         echo "         -copy mode for Audio & Video"
         echo "         -Output= .mpg"
         echo "        *)Using DVD::Rip"
         echo "         -DVD Extraction"
         echo "         -Merge operation: cat 1.vob 2.vob > DVD.mpg"
         echo "        *)Using Command Line in a terminal"
         echo "         -DVD Info: lsdvd /dev/dvd"
         echo "         -Check correct file number x: mplayer dvd://x"
         echo "         -DVD Rip: mplayer dvd://x -dumpstream -dumpfile DVD.mpg"
         echo ""
         echo "Notes:"
         echo "        *mplayer, mencoder,libdvdcss proposed for auto-installation"
         echo "        *a log file is created at the end of process"
         echo ""
         exit 1
         ;;

      f) # Force mode solving problem of mplayer -ss incompatible with some video files
         mode=forced
         ;;

      a) # alternate mode solving problem of mplayer -ss incompatible with some video files
         mode=alternate
         ;;
    esac

    # Remove option

    shift $((OPTIND - 1))
    OPTIND=1
done


#******************************************************************************************
# Control of minimum software requirements correctly installed
test -x /usr/bin/mplayer || sudo apt-get install mplayer -y
test -x /usr/bin/mencoder || sudo apt-get install mencoder -y

# Control of additionnal software correctly installed
#******************************************************************************************

if [ `test -x /usr/share/doc/libdvdcss2` ];
then
   echo "Do you want to proceed with libdvdcss2 installation? (y/n)"
   read answer
   if [ $answer = y ];
   then
      echo "##Dépôt Medibuntu" | sudo tee -a /etc/apt/sources.list
      echo "deb http://fr.packages.medibuntu.org/ hardy free non-free" | sudo tee -a /etc/apt/sources.list
      wget -q http://fr.packages.medibuntu.org/medibuntu-key.gpg
      sudo apt-key add medibuntu-key.gpg
      sudo apt-get update
      sudo apt-get install libdvdcss2
      sudo rm -rf medibuntu-key.gpg
   fi
fi

#******************************************************************************************
function movie_info()
{
# $1: file to be analysed
# $2: atrack or all
# Length track search for optimize video-info analyse
# case of several id track is taken in account with option all or ID track
video_size=`du -h "$1" | awk -F " " '{print $1}'`

if [ $2 = "all" ];
then
   video_length=`mplayer -vo null -ao null -frames 0 -identify "$1" 2>/dev/null | grep "ID_LENGTH=" | awk -F "=" '{print $NF}' | awk -F "." '{print $1}'`
   movie_info=`mplayer -vo null -ao null -frames 0 -identify "$1" 2>/dev/null | grep "ID_"`
   audio_id=`echo "$movie_info" | grep "ID_AUDIO_ID=" 2>/dev/null |awk -F "=" '{print $NF}' | sort`
   audio_id=`echo $audio_id` # supress \n for nice zenity look
   audio_id_nb=`echo $audio_id | wc -w `
   if [ ! $audio_id_nb -eq 1 ];
   then
      audio_size=""
      audio_commnent="Result depends on audio id track: ?"
   else
      audio_bitrate=`echo "$movie_info" | grep "ID_AUDIO_BITRATE=" | awk -F "=" '{print $NF}' | sort -r | awk 'NR==1{print $0}'`
      audio_size=$(( video_length * audio_bitrate / 8 / 1024 / 1024 ))
      audio_commnent=""
   fi

else
   video_length=`mplayer -aid $2 -vo null -ao null -frames 0 -identify "$1" 2>/dev/null | grep "ID_LENGTH=" | awk -F "=" '{print $NF}' | awk -F "." '{print $1}'`
   movie_info=`mplayer -aid $2 -vo null -ao null -frames 0 -identify "$1" 2>/dev/null | grep "ID_"`
   audio_bitrate=`echo "$movie_info" | grep "ID_AUDIO_BITRATE=" | awk -F "=" '{print $NF}' | sort -r | awk 'NR==1{print $0}'`
   audio_size=$(( video_length * audio_bitrate / 8 / 1024 / 1024 ))
   audio_commnent=""
   audio_id=`echo "$movie_info" | grep "ID_AUDIO_ID=" 2>/dev/null |awk -F "=" '{print $NF}' | sort`
   audio_id=`echo $audio_id` # supress \n for nice zenity look
   audio_id_nb=`echo $audio_id | wc -w `
fi

if [ $mode = "alternate" ];
then
   video_length=`ffmpeg -i "$1" 2>&1| grep "Duration: " | awk -F ": " '{print $2}' | awk -F "," '{print $1}' | awk -F "." '{print $1}'`
   IFS=":"
    hour=`echo $video_length | awk '{print $1}'`
    min=`echo $video_length | awk '{print $2}'`
    sec=`echo $video_length | awk '{print $3}'`
   unset IFS

   if [ "$video_length" = "N/A" ];
   then
      video_length=0
   else
      video_length=$((10#$sec + 10#$min*10#60 + 10#$hour*10#3600))
   fi
      audio_size=$(( video_length * audio_bitrate / 8 / 1024 / 1024 ))
fi
#mplayer -vo null -ao null -frames 0 -identify "$1" 2>/dev/null |sed -ne '/^ID_/ {s/[]()|&;<>`'"'"'\\!$" []/\\&/g;p}'
}

#******************************************************************************************
function encoding_type()
# => $encode
# $1: file to be analysed
# $2: encoding setting file
{
# Choice Box (avi xvid-mp3 or avi xvid-ac3)
encode=`zenity  --title="MPEG to AVI" \
                --text="MPEG to AVI 2 passes (Mencoder)" \
                --list \
                --radiolist \
                --height="250" \
                --width="400" \
                --column="Selection" \
                --column="Avi" \
                --column="Encodage" \
                FALSE "xvid-mp3" "Encodage mencoder avi xvid-mp3" \
                FALSE "x264-mp3" "Encodage mencoder avi x264-mp3" \
                TRUE "xvid-ac3" "Encodage mencoder avi xvid-ac3" \
                | sed 's/ max//g'`
echo $encode > "$2"

# case of cancel action
if [ "$encode" = "" ];
then
   exit
fi

}

#******************************************************************************************
function videoinfo()
# $1: file to be analysed
# $2: encoding setting file
# $3= $encode (xvid-ac3 or xvid-mp3...)
# => $atrack 
# => $ampli
# => $vbitrate
# => $crop
{
# Length track search for optimize video-info analyse (some mpg doesn't stand it
if [ $mode = "forced" ];
then
   video_analyse_sector=0
else
   video_analyse_sector=$(( video_length / 5 )) # 20% of the total length of the movie
fi

# Audio track search (auto-scan of possible id audio track, with display of initial size
atrack=`zenity --entry --title="INPUTS" \
                       --text="Enter audio track ID (ex: 128): auto-detected => $audio_id "\
                       --entry-text="$audio_id" 2>&1`

# case of cancel action
if [ "$atrack" = "" ];
then
   exit
fi

if [ ! $audio_id_nb -eq 1 ];
then
   movie_info    "$1" $atrack
fi

echo "$3" | grep "mp3"
if [ $? -eq 0 ];
then
   # amplification factor requested for MP3 purposes
   ampli=`zenity --entry --title="INPUTS" \
                         --text="Enter Amplification facteur (use only for MP3) ex: 5  (0 - 10)" \
                         --entry-text="5" 2>&1`
   audio_size=$(( video_length * 128 / 8 / 1024 )) # approx audio file size assuming vbr mp3 file will result in a  cbr 128 kbp file
else
   ampli=5 #obliges to give a value to respect encode_file format even if unused
fi

mplayer "$1" -ss $video_analyse_sector -aid $atrack
zenity --question --title="QUESTION" \
                  --text=" Audio track/language correct ? \n Selected audio id $atrack size = $audio_size Mo"

if [ $? = 0 ];
then
   # Video & crop search
   zenity --info --title="INFO" \
                 --text=" Next: Crop processing \n Wait and Play up to clear scene... \n ... then Echap"
   crop=`mplayer "$1" -aid $atrack -ss $video_analyse_sector -vf cropdetect | tail -n 4 | head -n 1 | cat | cut -d= -f2 | cut -d")" -f1`
   zenity --info --title="INFO" \
                 --text="Next:Crop cheking...then Echap"
   mplayer "$1" -aid $atrack -ss $video_analyse_sector -vf crop=$crop
   zenity --question --title="QUESTION" \
                     --text="Crop: $crop seems correct ?"

   if [ $? = 0 ];

   then
      #determination of correct bitrate for movie final size
      final_movie_size_ok=0
      while [ $final_movie_size_ok -eq 0 ]
      do
         vbitrate=`zenity --entry --title="INPUTS" \
                          --text="Enter video BITRATE ex: 1500 kbp/s (defaut mencoder = 800 kbp/s)
                                  ****************************************
                                  (original file size = $video_size)
                                  1000 kbp/s => encoded movie size ~ $(( video_length * 1000*1000 /1024/1024/8 + audio_size )) Mo
                                  1500 kbp/s => encoded movie size ~ $(( video_length * 1500*1000 /1024/1024/8 + audio_size )) Mo
                                  2000 kbp/s => encoded movie size ~ $(( video_length * 2000*1000 /1024/1024/8 + audio_size )) Mo" \
                          --entry-text="1500" 2>&1`
         if [ $? -eq 1 ];
         then
            exit
         fi
         final_movie_size=$(( video_length * vbitrate*1000 /1024/1024/8 + audio_size ))
         zenity --question --title="QUESTION" \
                --text=" Final movie size expected = $final_movie_size Mo.\n Is It OK? \n - Valid for encoding process or next movie info collection. \n - abort to retry a different bitrate ?" 
         if [ $? = 0 ];
         then
            final_movie_size_ok=1
         fi
      done
 
    else
      zenity --question --title="INFO" \
                        --text="Crop Not Ok, do you want to retry?"
      if [ $? -eq 1 ];
      then
         exit
      else
          videoinfo_ok=0
          return
      fi
   fi
else 
   zenity --question --title="INFO" \
                     --text="Audio track Not Ok, do you want to retry?"
      if [ $? -eq 1 ];
      then
         exit
       else
          videoinfo_ok=0
          return
       fi
fi

echo $atrack           >> "$2"
echo $ampli            >> "$2"
echo $vbitrate         >> "$2"
echo $crop             >> "$2"
echo $final_movie_size >> "$2"
videoinfo_ok=1
}

#******************************************************************************************
function xvidencac3()
# Encoding mencoder xvid-AC3 2 passes
# $1= file to be analysed
# $2= $atrack 
# $3= $ampli (not used in AC3)
# $4= $vbitrate
# $5= $crop
# $6= encode type
# $7= $final_movie_size
# Creation of a text file with parameters used for encoding work
{
# passe 1
mencoder "$1" -aid $2 \
                -oac copy \
                -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:pass=1:bitrate=$4:autoaspect:turbo -vf crop=$5 \
                -passlogfile "${1/%.*/.log}" -o /dev/null \
                | nice zenity --progress --auto-close --pulsate --title="MENCODER xvid-ac3" \
                                                                --text=" Encodage en mpeg4 de: \n ... "$1" ... \n Bitrate video = $4 \n Audio ID = $2 \n Audio codec = AC3 initial \n Crop = $5 \n Autoaspect \n Qualité VHQ \n PASSE 1 (turbo) ... processing"

# passe 2
mencoder "$1" -aid $2 \
                -oac copy -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:pass=2:bitrate=$4:autoaspect -vf crop=$5 \
                -passlogfile "${1/%.*/.log}" -o "${1/%.*/_xvid.avi}" \
                | nice zenity --progress --auto-close --pulsate --title="MENCODER xvid-ac3" \
                                                                   --text=" Encodage en mpeg4 de: \n ... "$1" ... \n Bitrate video = $3 \n Audio ID = $2 \n Audio codec = AC3 initial \n Crop = $5 \n Autoaspect \n Qualité VHQ \n PASSE 2 ... processing \n Final size expected= $7 Mo"
}

#******************************************************************************************
function xvidencmp3()
# Encoding mencoder xvid-mp3 2 passes
# $1= file to be analysed
# $2= $atrack 
# $3= $ampli
# $4= $vbitrate
# $5= $crop
# $6= encode type
# $7= $final_movie_size
# Creation of a text file with parameters used for encoding work
# Encoding mencoder xvid-mp3 2 passes
{
# passe 1
mencoder "$1" -aid $2 -oac mp3lame -lameopts vbr=3:vol=$3 \
                -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:pass=1:bitrate=$4:autoaspect:turbo -vf crop=$5 \
                -passlogfile "${1/%.*/.log}" -o /dev/null \
                | nice zenity --progress --auto-close --pulsate --title="MENCODER xvid-mp3" 
                                                                --text=" Encodage en mpeg4 de: \n ... "$1" ... \n Bitrate video = $4 \n Audio ID = $2 \n \n Audio codec = MP3 VBR 3 \n Volume = x $3 \n   Crop = $5 \n Autoaspect \n Qualité VHQ \n PASSE 1 (turbo) ... en cours"

# passe 2
mencoder "$1" -aid $2 -oac mp3lame -lameopts vbr=3:vol=$3 \
                -ovc xvid -xvidencopts chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:pass=2:bitrate=$4:autoaspect -vf crop=$5 \
                -passlogfile "${1/%.*/.log}" -o "${1/%.*/_xvid.avi}" \
                | nice zenity --progress --auto-close --pulsate --title="MENCODER xvid-mp3" \
                                                                --text="Encodage en mpeg4 de: \n ... "$1" ... \n Bitrate video = $4 \n Audio ID = $2 \n \n Audio codec = MP3 VBR 3 \n Volume = x $3 \n Crop = $5 \n Autoaspect \n Qualité VHQ \n PASSE 2 ... en cours \n Final size expected= $7 Mo"
}

#******************************************************************************************
function x264encmp3()
# Encoding mencoder xvid-AC3 2 passes
# $1= file to be analysed
# $2= $atrack 
# $3= $ampli
# $4= $vbitrate
# $5= $crop
# $6= encode type
# $7= $final_movie_size
{
mencoder "$1" -aid $2 -vf crop=$5 -ovc x264 -x264encopts pass=1:subq=3:bframes=1:b_pyramid:weight_b:bitrate=$4 -oac copy -o /dev/null  && mencoder \
         "$1" -aid $2 -vf crop=$5 -ovc x264 -x264encopts pass=2:subq=3:bframes=1:b_pyramid:weight_b:bitrate=$4 \
                      -oac mp3lame -lameopts vbr=3:vol=$3 -o "${1/%.*/-x264.avi}" \
         | nice zenity --progress --auto-close --pulsate --title="MENCODER x264-mp3" \
                                                         --text=" Encodage en mpeg4 de: \n ... "$1" ... \n Bitrate video = $4 \n Audio codec = MP3 VBR 3   \n Volume = x $3 \n Autoaspect \n Qualité ... \n PASSE 2 ... processing\n Final size expected= $7 Mo"
}

#******************************************************************************************
function postshutdown()
{
# Shutdown at the end of process Choice Box
end_action=`zenity  --title="End Of Process Action" \
                    --text="Select If PC enter shutdown at the end of encoding" \
                    --list \
                    --radiolist \
                    --height="250" \
                    --width="500" \
                    --column="Selection" \
                    --column="Action" \
                    --column="descriptif" \
                    FALSE "Shutdown" "Shutdown at End Of Encoding Process (sudo only)" \
                    TRUE "No-Shutdown" "PC Stays On at End Of Encoding Process" \
                    | sed 's/ max//g'`

if [ "$end_action" = "Shutdown" ];
then
   zenity --question --title="INFO" \
                     --text="You must be sudo for requesting a end process shutdown"
   if [ $? = 1 ];
   then
      exit
   fi
else
   if [ "$end_action" = "" ];
   then
      exit
   fi

fi	
}

#******************************************************************************************
function duration()
{
# $1= Stop date
# $2= Start date
# $3 = log file
# date +%s gives duration between 1-01-1970 in seconds. Then easy for duration calculation
difference=$(( $1-$2 ))
hour=$(( difference/3600 ))
min=$(( (( difference/60 ))-$(( hour*60 )) ))                     
sec=$(( (( difference ))-$(( hour*3600 + min*60 )) ))          
echo "Process Duration = $hour hour $min minutes $sec seconds" >> "$3"
}

#******************************************************************************************
function log_info()
# $1= video file log
# Calculate & fill the log file with time needed for encoding
{
log_final="${1/%.*/.log}"

echo -e "Original File Name: `basename "$1"`"                                    >> $log_final
echo -e "Initial Video Size: `du -h "$1" | awk -F " " '{print $1}'` \n"        >> $log_final
echo -e "Encoding Settings
 -encoding type: $encode
 -audio track:   $atrack
 -amplification: $ampli (not used if AC3-type)
 -video Bitrate: $vbitrate
 -crop applied:  $crop
 -script mode:   $mode
 -target size:   $final_movie_size Mo\n"                                      >> $log_final

encoding_start=`sed -n '7p' $log_encode_file`
encoding_stop=`sed -n '8p' $log_encode_file`
duration $encoding_stop $encoding_start "$log_final"

echo -e "\nProcessor type & memory size"                                      >> $log_final
cat /proc/cpuinfo | grep "model name"                                         >> $log_final
cat /proc/meminfo | grep MemTotal                                             >> $log_final
}

#******************************************************************************************

#******************************************************************************************
#************************* Main Program ***************************************************
#******************************************************************************************

#******************************************************************************************
# 0th step: Validity test: name and source available
process_valid="true"

for source in "$@"
do
   if [ ! -e "$source" ];
   then
      zenity --info --title="INFO" \
                    --text=" File "$source" not available"
      process_valid="false"
   fi
done

if [ "$process_valid" = "false" ];
then
      exit
fi


#******************************************************************************************
# 1th step: what to be done end of global processing: shutdown or not
postshutdown

#******************************************************************************************
# 2nd step: collect all info on video to be later encoded
for source in "$@"
do

   # creation of log file
   log_encode_file="${source/%.*/_encode_settings.txt}"
   touch "$log_encode_file"

   # identification of video type
   typevid=`file -bi "$source"`

   # if argument = video/mp2p
   if [ ! `echo $typevid |grep video >> /dev/null` ];
   then
      zenity --info --title="INFO" \
                    --text="Settings Process on - `basename "$source"` -  will start."
      encoding_type "$source" "$log_encode_file"
      movie_info    "$source" all

      videoinfo_ok=0
      while [ $videoinfo_ok -eq 0 ]
      do
         videoinfo     "$source" "$log_encode_file" $encode
      done
   else
      zenity --info --title="INFO" \
                    --text="Not a valid video file. Consult help $0 -h \n Encoding canceled" && exit  
   fi
done

#******************************************************************************************
# 3rd step: process encoding using individual log file
for source in "$@"
do   
   # point at log file previously created
   log_encode_file="${source/%.*/_encode_settings.txt}" 

   # set initial encoding time
   echo $(date +%s)     >> "$log_encode_file"  #7th line

   encode=`sed -n '1p' "$log_encode_file"`
   atrack=`sed -n '2p' "$log_encode_file"`
   ampli=`sed -n '3p' "$log_encode_file"`
   vbitrate=`sed -n '4p' "$log_encode_file"`
   crop=`sed -n '5p' "$log_encode_file"`
   final_movie_size=`sed -n '6p' "$log_encode_file"`
   

   if [ "$encode" = "xvid-mp3" ];
   then
      xvidencmp3  "$source" $atrack $ampli $vbitrate $crop $encode $final_movie_size && rm -f "${source/%.*/.log}"
   elif [ "$encode" = "xvid-ac3" ];
   then
      xvidencac3 "$source" $atrack $ampli $vbitrate $crop $encode $final_movie_size && rm -f "${source/%.*/.log}"
   elif [ "$encode" = "x264-mp3" ];
   then
      x264encmp3 "$source" $atrack $ampli $vbitrate $crop $encode $final_movie_size && rm -f "${source/%.*/.log}"
   else
      exit
   fi
   # set initial encoding time
   echo $(date +%s)     >> "$log_encode_file"   #8th line

   # collect all info in dedicated log file
   log_info "$source"
   
   # clean files
   rm -f "$log_encode_file"
done

#******************************************************************************************
# 4th step: set final encoding action
# need to modify /etc/sudoers to get rights to shutdown PC though a script   

if [ "$end_action" = "Shutdown" ];
then
   sudo /sbin/shutdown -h now
fi
exit

A+
Thurston

Dernière modification par thurston (Le 27/05/2009, à 21:06)

Hors ligne

#49 Le 13/06/2009, à 08:00

al_boon

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

bonjour, j ai du changé de pc et donc je suis passé a jaunty, la derniere mise a jour ci dessus ne se lance meme pas chez moi et celle d avant se lance mais la deusieme fenetre de crop ne s affiche pas, celle de selection de son non plus et une erreur se produit juste avant de lancer l encodage du coup je ne peux l utiliser sad


viva ubuntu ^^ et deux personnes converties !!

ps: il est pas beau mon fils ? (cf mon avatar)

Hors ligne

#50 Le 13/06/2009, à 09:10

thurston

Re : [Résolu]DVD => .avi avec script + acidrip (avec audio & crop-control)

ok, merci du retour, je vais installer jaunty sur un pc pour tester, retour d ici quelques jours.
utilisais tu le script avant sous hardy?
je viens de le retester sous hardy, ca fonctionne.
le script repose en gros sur mplayer, mencoder et zenity.
tous installés?

je ferai une version qui teste la présence de ces paquets.
sinon

sudo apt-get install mplayer
sudo apt-get install mencoder

a+
thurston

Hors ligne