Suite à la conversation que j'ai eu ICI, j'ai décidé de crée un topic (si possible unique) sur l'encodage video à partir d'une source DVD.
Déposez ici vos questions/découvertes/méthodes sur l'encodage d'un DVD sous un systeme GNU/Linux (et même *bsd, pourquoi pas...)
Je vous propose, pour ma part, ma méthode d'encodage d'un DVD (PAL, non entrelacé) :
-------------------------------------------------------------------
Codec Video : Libavcodec MPEG4 (ffmpeg project)
Codec Audio : Ogg vorbis 1.0
Ripper : mplayer
Encoder Video : mencoder
Encoder Audio : Transcode + oggenc
Mux Audio/Video : ogmmerge
-------------------------------------------------------------------
1ère étape : Scan du DVD
But : connaitre nombre de titres, angles, chapitres pour savoir où ce situe le film et les index des bandes sons...
Outils : title_info (présent dans les sources de libdvdread), mplayer
Exemple :
title_info /dev/dvd | grep Title
libdvdread: Using libdvdcss version 1.2.2 for DVD access
Title 1:
Title has 28 chapters and 5 angles
Title 2:
Title has 2 chapters and 1 angles
Title 3:
Title has 2 chapters and 1 angles
Title 4:
Title has 2 chapters and 1 angles
Title 5:
Title has 2 chapters and 1 angles
|
Résultat : Le film est sur le titre 1 et possède 5 angles...
Comment choisir l'angle ? Je parcours rapidement les différents angles avec mplayer (mplayer -dvd 1 -dvdangle 1)
Il nous reste à connaitre l'index de la piste fr du titre 1 :
mplayer -dvd 1 -vo null -ao null -frames 0 -v 2>&1 | grep "audio stream"
[open] audio stream: 0 audio format: ac3 (5.1) language: en aid: 128
[open] audio stream: 1 audio format: ac3 (5.1) language: fr aid: 129
[open] audio stream: 2 audio format: ac3 (stereo) language: en aid: 130
|
Résultat : La piste fr est ici en ac3 5.1 et a pour index 1.
2ème étape : Rip du DVD
But : decrypter les vobs contenant le film et les copier en les "fusionnant" sur le HDD.
Outils : mplayer
Exemple :
mplayer -dvd 1 -dvdangle 1 -alang fr -nortc -dumpstream -dumpfile /space/dvd.vob
|
3ème étape : Encodage Son
But : encoder à la volée la piste son du vob en un fichier ogg vorbis, en normalisant le volume sonore.
Outils : transcode + oggenc.
Exemple :
--- Recherche Volume Normalisation :
tccat -i /space/dvd.vob | tcextract -a $1 -x ac3 -t vob | tcdecode -x ac3 | tcscan -x pcm -b 128
[tcscan] audio frames=198048.00, estimated clip length=7921.92 seconds
[tcscan] (min/max) amplitude=(-0.596/0.652), suggested volume rescale=1.535
[tcscan] V: 198048 frames, 7921 sec @ 25.000 fps
[tcscan] A: 123.77 MB @ 128 kbps
[tcscan] CD: 650 MB | V: 526.2 MB @ 557.3 kbps
[tcscan] CD: 700 MB | V: 576.2 MB @ 610.3 kbps
[tcscan] CD: 1300 MB | V: 1176.2 MB @ 1245.7 kbps
[tcscan] CD: 1400 MB | V: 1276.2 MB @ 1351.6 kbps
|
où $1 l'index de la piste
--- Encodage :
mkfifo pcmpipe.raw
oggenc -r -C2 -R48000 -B16 -q$1 -o /space/son.ogg pcmpipe.raw & transcode -i /space/dvd.vob -a $2 -g 0x0 -u 50 -s $3 -a52_drc_off -x null,vob -y raw -N 0x1 -m pcmpipe.raw -o /dev/null
[transcode] auto-probing source /space/zorro.vob (ok)
[transcode] V: import format | MPEG-2 (V=null|A=vob)
[transcode] V: AV demux/sync | (1) sync AV at initial MPEG sequence
[transcode] V: import frame | disabled
[transcode] V: bits/pixel | 0.000 (unknown)
[transcode] V: encoding fps | 25.000
[transcode] A: import format | 0x2000 AC3 [48000,16,2] 384 kbps
[transcode] A: export format | 0x1 PCM [48000,16,2] 128 kbps
[transcode] A: bytes per frame | 7680 (7680.000000)
[transcode] A: adjustment | 0@1000
[transcode] A: rescale stream | 1.535
[import_vob.so] v0.5.6 (2002-05-09) (video) MPEG-2 | (audio) MPEG/AC3/PCM | (subtitle)
[import_null.so] v0.2.0 (2002-01-19) (video) null | (audio) null
[export_raw.so] v0.3.6 (2002-05-24) (video) * | (audio) MPEG/AC3/PCM
[import_vob.so] tccat -i "/space/zorro.vob" -t vob -d 0 -S 0 | tcdemux -a 1 -x ac3 -S 1 -M 1 -d 0 | tcextract -t vob -a 1 -x ac3 -d 0 | tcdecode -x ac3 -d 0 -s 1.000000,1.000000,1.000000 -A 1
[export_raw.so] codec=RGB, fps=25.000, width=0, height=0
Encoding "pcmpipe.raw" to
"/space/son.ogg"
at quality 1,00
filling buffer ... done
rm pcmpipe.raw
|
où $1 est la qualité ogg vorbis, $2 l'index de la piste et $3 le volume rescale (déterminés précedemment)...
4ème étape : Encodage Video
But : encoder la piste video du vob en un fichier avi, avec le codec MPEG4 de ffmpeg.
Outils : mplayer,mencoder, gnumeric.
--- Quel Bitrate ?
1 CD80min : Bitrate = (702 - TailleSon) * 1024 * 1024 / Duree * 8 / 1000
2 CD74min : Bitrate = (1300 - TailleSon) * 1024 * 1024 / Duree * 8 / 1000
où Bitrate est le bitrate à spécifier à l'encodeur en kbps (tel que 1kbps = 1000 bps), Tailleson est la taille en Mo du fichier son.ogg et Duree la longueur du film en secondes.
Exemple : 1 Film de 2 h, bandes son de 60Mo
Bitrate = 713 kbps
--- Recherche des parametres de Cropping (pour virer les bandes noires afin d'améliorer la qualité)
mplayer -ao null -vo xv -vop cropdetect /space/dvd.vob
crop area: X: 1..713 Y: 72..500 (-vop crop=712:428:2:72)
|
je vérifie avec
mplayer -ao null -vo xv -vop rectangle=712:428:2:72 /space/dvd.vob
|
Remarque : Les parametres de crop signifient : fenetre de 712*428 positionnée en 2:72.
Ce qui signifie qu'on enleve 2 pixels à gauche, 6 à droite, 72 en haut et 76 en bas...
--- Recherche des parametres du resize
CQ = 1000*Bitrate / (ResX*ResY*25)
ResX/ResY = AspectRatio (1.85 ou 2.35 ou 1.33)
BIG UPDATE : Voir page 15 pour la détermination infaillible et exacte de l'aspect ratio...
où CQ (critère de qualité) doit être supérieur à 0.20 et ResX, ResY doivent être des multiples de 16.
Exemple : 1 Film de 2 h, bandes son de 60Mo, anamorphic widescreen 2.35
ResY = INT( SQRT(1000 * 713 / 25 / 2.35 / 0.2) / 16 ) * 16 = 240
ResX = INT(ResY * 2.35 / 16) * 16 = 560
|
Résultat : On resize en 560*240, l'aspect ratio réel est de 2.33 et le CQ réel vaut 0.21.
--- Encodage
On enchaine les 2 passes, la 2eme ayant lieu seulement si la 1ere n'a pas echoué.
#!/bin/sh
rm -rf lavc_stats.txt
SCALE=560:240
CROP=712:428:2:72
CIBLE=/space/video.avi
SOURCE=/space/dvd.vob
LAVCOPT=vcodec=mpeg4:vqmin=2:vqmax=20:vmax_b_frames=2:vhq:vbitrate=713
mencoder -nosound -o /dev/null -ovc lavc -lavcopts $LAVCOPT:vpass=1 -vop scale=$SCALE,crop=$CROP -zoom -sws 2 $SOURCE && mencoder -nosound -o $CIBLE -ovc lavc -lavcopts $LAVCOPT:vpass=2 -vop scale=$SCALE,crop=$CROP -zoom -sws 2 $SOURCE
|
Remarque : J'utilise le resize de type Bicubic (-sws 2) qui assure une meilleure qualité.
4ème étape : Mixage Audio/Video
But : Regrouper les partie video et audio dans un container OGG.
Exemple :
ogmmerge -o /space/film.ogm /space/son.ogg /space/video.avi
|
REMARQUES :
DVD zone 1 NTSC : L'option -ofps 25 est necessaire pour "forcer" (comment ???) l'encodage à 25fps au lieu de 29.97. Ceci semble nécessaire pour éviter des pb de desynchro avec un son en Vorbis... UN GRAND MERCI A LIBREDR
J'attends vos remarques/questions/suggestions/améliorations...
MAJ le 21/10/02 : manquait le parametre -a dans la recherche du volume rescale. Par défaut transcode prenait -a 0, ce qui signifie qu'on avait le gain de la piste 0 même si on rippait la piste 1,2... !
JE SUIS EN TRAIN DE REALISER UN SCRIPT D'ENCODAGE AUTOMATIQUE, UTILISANT A PEU PRES CETTE METHODE. IL EN EST A LA VERSION 0.45, VOUS POUVEZ LE PRENDRE ICI. N'HESITEZ PAS A TESTER ET A FAIRE LE RETOUR DANS CE TOPIC. MERCI
Message édité par jotenakis le 16-12-2002 à 15:00:54