Extraction et codage d'un DVD sous Linux

Ce guide a été mis à jour le 22 novembre 2002

  1. Introduction
  2. Logiciels requis
    1. Un mot sur les codecs
    2. Bibliothèques / codecs usuels
    3. MPlayer
    4. transcode
    5. Récupérer des RPMs
  3. Extraire les VOBs
    1. Vidéo entrelacée
    2. ...Utiliser la ligne de commande
    3. ...utiliser dvd::rip
  4. Transcoder un DVD en AVI
    1. Aspect ratios
    2. Utiliser dvd::rip
      1. Rognage et zoom
      2. Choisir les paramètres de codage
      3. Générer une prévisualisation rapide
      4. Eviter la désynchronisation audio/vidéo
      5. Créer le film en entier
      6. Pour utilisateurs confirmés : les options de transcode sur la ligne de commande
    3. Utiliser MEncoder
      1. Coder l'audio
      2. Générer une prévisualisation (première passe)
      3. Générer une prévisualisation (seconde passe)
      4. Générer l'AVI final (les deux passes)
  5. Sous-titres
    1. Convertir les sous-titres en format texte
      1. Compiler les utilitaires
      2. Extraire les sous-titres
      3. Convertir le flux
  6. Quelques trucs en plus
    1. Corriger la désynchronisation audio
    2. Couper un AVI
    3. Extraire l'audio des VOBs/MPEGs/AVIs
    4. Utilisez des fichiers sons séparés
    5. Un éditeur visuel d'AVIs : avidemux
  7. Liens
    1. Bibliothèques, codecs
    2. Lecteurs média
    3. Codeurs
    4. Autres documentations
    5. Mailing listes
  8. Glossaire
    1. CBR, VBR et ABR
    2. Global Motion Compensation (GMC)
    3. Letterboxing
    4. P/I/B-Frames, GOPs
    5. Quarter Pixel (QP)
  9. Historique
  10. About

1. Introduction

Vous avez donc acheté un DVD flambant neuf. Vous pensez qu'il assure vraiment et voulez être sûr d'avoir une copie de ce film quoiqu'il arrive. Mais comment pouvez-vous le passer de ce gros DVD à un si petit CD ? Et avec une bonne qualité, s'il-vous-plaît ? Lisez juste la suite.

ATTENTION ! Ce guide n'est pas fait pour les âmes sensibles. Il parle beaucoup de compilation, d'installation de logiciels, d'utilisation de la ligne de commande. Si vous ne savez pas faire un configure; make; make install alors lisez d'autres documents et apprenez à le faire. Si vous ne voulez pas faire cet effort, alors installez Windows et utilisez l'un de ces superbes utilitaires d'extraction de DVD. Je ne m'aventurerais pas dans l'éternel débat "Linux contre Windows". Il s'avère que l'opération sous Linux est plutôt difficile.

Toujours là ? Super ! Vous êtes sur le point d'embarquer pour un voyage dans un monde merveilleux...

Retour à la table des matières


2. Logiciels requis

Laissez-moi vous présenter les outils dont vous aurez besoin.
Je vous présenterai deux méthodes de transcodage d'un DVD - en utilisant MEncoder et transcode. Néanmoins, vous avez besoin de certains fichiers quelle que soit la méthode.

2.1. Un mot sur les codecs

Dans un monde idéal, il y aurait un et un seul codec - le meilleur. Mais notre monde est loin d'être idéal. Par conséquence, il y a une large panoplie de codecs audio et vidéo parmi lesquels il faudra choisir. Je vais expliquer pour commencer les différents types de codecs : Aujourd'hui, la plupart des codecs sont livrés avec une version native pour Linux (comme XviD, DivX 4/5 et d'autres).

Voici une liste des codecs vidéos supportés :

Ce guide tente de se concentrer sur deux codecs : XviD et lavc. La raison de cela est que les deux offrent une excellente qualité, les deux sont rapides et vous avez juste besoin d'un décodeur compatible MPEG4 (comme DivX 5 ou XviD) sous Windows pour la lecture. La lecture sous Linux ne présente aucun problème - MPlayer ou Xine lise aisément les fichiers codés avec DivX 4/5, XviD et lavc.

Encore une liste, cette fois pour les codecs audio:

J'espère que tout ceci éclaire un peu les choses.

2.2. Bibliothèques / codecs usuels

Je ne rentrerai pas trop dans le détail dans ce chapitre. Il y a plus de documentation sur l'installation incluse dans chaque paquetage. Reportez-vous y si vous avez des problèmes. Remarquez aussi que MPlayer a des exigences plutôt fortes concernant la version de gcc, binutils et d'autres composants centraux de votre système. Cf.
la documentation d'installation de MPlayer.

Note: Avant de télécharger un logiciel, vérifiez si votre distribution ne l'a pas déjà. J'utilise Debian Woody (testing) et ai découvert plein de logiciels déjà disponibles sous formes de paquetages.

2.3. MPlayer

Vous avez besoin de MPlayer. Peu importe si vous utiliserez MEncoder ou transcode par la suite - vous en aurez de toute façon besoin. Alors téléchargez MPlayer sur
http://www.mplayerhq.hu/. Je préfère la version CVS car elle a souvent des caractéristiques que n'ont pas les releases officielles ! En fait, je fonde ce guide sur les caractéristiques qui ont été incorporées dans la version CVS il y a quelques jours (on est le 30 avril 2002). Faites comme moi - soyez courageux et prenez la version CVS.

Si vous voulez coder avec MEncoder je vous suggère également de prendre une version de libavcodec pour le codage. Vous avez juste besoin de le télécharger si vous utilisez une version CVS de MPlayer. Les releases sont livrées avec un libavcodec pré-empaqueté. Ces instructions sont extraites de la documentation de MPlayer:

Note sur la compilation : Assurez-vous de ne pas inclure le support XviD. A la place, incluez le support pour libavcodec. Les instructions pour l'installtion sont fournies dans les docs de MPlayer. Oui, vous avez bien lu : compilez transcode avec XviD et MPlayer sans XviD mais avec libavcodec. La raison est que MPlayer ne peut supporter à la fois les deux codecs car les deux utilisent des variables qui portent le même nom.

2.4. transcode

Récupérez transcode sur son site. Assurez-vous de le compiler avec le support XviD et avec le support pour le post-traitement avec les fonctions de MPlayer. A nouveau, je vous conseille de choisir la version CVS.

En outre, allez télécharger dvd::rip, une excellente interface en Gtk+ pour transcode. Prenez-le ici. Les instructions pour l'installation sont incluses.

2.5. Récupérer des RPMs

Je connaîs au moins deux endroits où vous pouvez trouver des RPMs pour les logiciels mentionnés plus haut :

Retour à la table des matières


3. Extraire les VOBs

Cette partie est assez facile. Tout ce dont vous avez besoin est de l'espace de libre (beaucoup d'espace libre en fait). En fonction de ce que vous voulez transcoder, vous devrez avoir 10 Go de libre. Si vous ne claquez pas trop d'argent pour de nouveaux disques, ils ne sont vraiment pas chers en ce moment (150€ pour un disque de 80 Go).

Avant de faire autre chose, pensez à votre zone. Tous les lecteurs vendus de nos jours ont une protection RPC mode 2 - ce qui veut dire que vous pouvez changer votre zone cinq fois avant qu'elle ne se bloque. Vous pouvez avoir plus d'informations pour apprendre à effacer le code de zone de votre lecteur en lisant le Digital Digest. Pourquoi précisé-je tout cela ?? Les méthodes d'extraction décrites ci-dessous supposent que lecteur possède le bon code de zone (c'est-à-dire le même que le DVD à extraire), ou pas de code de zone du tout. Tous les messages d'erreur sont assez sybillins, et ce n'est souvent pas clair que vous avez un problème de zonage quand l'extraction échoue. Gardez donc cela à l'esprit.

Tout d'abord, testez le DVD. Lancez MPlayer et regardez le premier titre : mplayer -dvd 1. Vous aimez ? Cool. Assurez-vous de vous souvenir si l'image est entrelacée ou non (voir ci-dessous). Fermez MPlayer.

3.1. Vidéo entrelacée

Ce que voyez à la télévision n'est pas du 25 frames par seconde. En fait, vous voyez 50 demi-frames par seconde (je parle du PAL - NTSC est à 29,97 fps soit près de 60 demi-frames par seconde). Un frame contient les lignes impaires, l'autre, les lignes paires. De cette façon, vous aurez les 25 fps. Le problème, c'est que ces demi-frames sont pris à des instants différents. Si vous avez un mouvement horizontal rapide, vous verrez qu'un objet (ou une personne) est à un endroit pour les lignes impaires et à un autre pour les lignes paires. Ce sont des artefacts dont vous voulez vous passer pour votre vidéo finale. Jetez donc un coup d'oeil à cette image entrelacée extraite de mon DVD d'Ally McBeal. Avec les filtres appropriés, vous pouvez éliminer l'effet d'entrelacement (appelé dés-entrelacement... quelle surprise ;)). Voici la même image désentrelacée.

Maintenant que vous avez une idée de ce à quoi ressemble l'entrelacement, vous devriez être capable de décider vous-même si votre DVD contient un film entrelacé ou non.

Dans la suite, je supposerai que :

Remplacez donc ces chemins par ceux qui correspondent à votre système.

Il y a plusieurs façons d'extraire des VOBs. Je vous en présenterai deux : en utilisant un utilitaire sur la ligne de commande (vobcopy) et en utilisant l'interface graphique de transcode, dvd::rip. Vous n'aurez pas à faire les deux :-)

3.2. ...Utiliser la ligne de commande

Lancez vobcopy. Il copiera automatiquement tous les VOBS qui correspondent au titre contenant le plus de chapitres sur votre disque dur.
  • Tout d'abord, montez votre DVD: mount /dvd
  • Copiez les VOBs avec vobcopy: vobcopy -i /dvd -m
Ceci copiera les VOBs du DVD, les décryptera (c'est là où on a besoin de libdvdcss) et les écrira dans le répertoire courant (que vous pouvez modifier avec, par exemple, -o /space). Ils seront nommés selon le titre du DVD (par exemple, j'ai ALLY_MCBEAL_DISC21-1.vob, ALLY_MCBEAL_DISC21-2.vob etc.). L'option -m demande à vobcopy de créer un miroir du contenu du DVD, en incluant les fichiers .IFO - utiles car vous pouvez alors utiliser la copie locale avec MPlayer/MEncoder ou transcode comme si c'était le vrai DVD. Cela prendra du temps. Soyez patient.

Note de l'auteur (Robos): vobcopy a du mal à suivre les angles. Vous aurez peut-être des scènes dupliquées avec Matrix, par exemple. Je planche dessus.

Une autre note de Robos: Il y a un autre utilitaire nommé dvdbackup qui peut aussi copier des DVDs.

3.3. ...utiliser dvd::rip

dvd::rip peut faire le même travail pour vous.
Lancez dvd::rip en tapant dvdrip. Vous verrez la fenêtre principale. Choisissez Edit / Preferences et dvd::rip affichera le
preferences dialog. Vous devez entrez vos chemins ici. Le premier est le chemin vers le device DVD et non le mount point (point de montage). C'est souvent /dev/dvd qui est un lien symbolique vers le vrai device, par exemple /dev/hdc.

Fermez ce dialogue. Ouvrez un nouveau projet (File / New Project). Il commencera par l'onglet storage. Entrez à nouveau les bons chemins. Remarquez que les autres champs sont modifiés quand vous changez le titre du projet.

Passez à l'onglet Rip Title et appuyez sur le bouton Read DVD Table of Contents. Après quelques secondes, la liste en-dessous se remplira avec les titres présents sur le DVD. Séléctionnez le titre que vous voulez extraire (vous pouvez en choisir plusieurs en maintenant la touche CTRL appuyée et en cliquant dessus). Choisissez la langue et l'angle. Laissez l'option Specify Chapter Mode sur No. Dernière étape : appuyez sur Rip selected Title(s)/Chapter(s). Soyez patient à nouveau. Buvez du lait. Ayez une agréable conversation avec votre copine.

Le reste pour dvd::rip sera décrit plus tard dans le chapitre 4.

Retour à la table des matières


4. Transcoder un DVD en AVI

Ici, vous avez deux choix - c'est soit transcode soit MEncoder. Les deux ont des avantages et inconvénients. En voici une petite liste qui est vraie au moins pour les versions CVS du 28 avril 2002 :

4.1. Aspect ratios

Avant de commencer, laissez-moi vous rappeler les aspect ratios les plus utilisés. Les DVDs sont toujours codés en 720x576 (5:4) même si l'image sera redimensionnée lors de l'affichage. Les formats habituels sont le 4:3 = 1.33 pour la télé, 16:9 = 1.78 pour les films de cinéma normaux et 2.35:1 pour le Cinémascope.

Voici une liste de scénarios habituels:

Ne vous en faites pas si vous ne comprenez pas tout du premier coup. Jetez un coup d'oeil aux options de rognage et redimensionnement de dvd::rip pour une approche plus intuitive.

4.2. Utiliser dvd::rip

Utiliser dvd::rip est de loin la meilleure méthode et la plus facile pour faire vos AVIs. Comme dit précédemment, il utilise largement transcode.

Après avoir lancé dvd::rip vous extrayez les titres que vous voulez transcoder sur votre disque dur. Référez-vous au chapitre 3 pour une description plus détaillée.

4.2.1. Rognage et zoom

Maintenant, passez à l'onglet Clip & Zoom. C'est ici que vous réglez toutes les options de rognage ("clipping") et de dimensionnement de l'image. Tout d'abord, choisissez une image de travail: entrez simplement un numéro de frame (comme 200) dans la ligne d'entrée Grab Preview Frame et appuyez sur Grab Frame from ripped VOB. Après quelques secondes, les trois vues en dessous montrent le frame que vous avez choisi.

transcode utilise trois étapes pour amener l'image à sa taille finale: il rogne d'abord l'image sans la redimensionner, ensuite il la redimensionne, et finalement, il rogne une nouvelle fois. Toutes ces étapes peuvent être sautées en sélectionnant 0 pour le rognage et en laissant les hauteur et largeur originales pour le redimensionnement. Chaque fenêtre montre le résultat de ces trois étapes. Si vous voulez voir quelle taille font réellement les images, cliquez juste dessus, et une fenêtre pop-up s'ouvrira avec l'image correspondante.

Vous avez probablement remarqué la liste d'options sous les trois fenêtres de pré-visualisation. dvd::rip propose un large choix de pré-séléctions. Séléctionner simplement l'un des choix vous donne un bon début. Vous pouvez toujours changer manuellement les valeurs après avoir choisi une pré-séléction. Toutes les pré-séléctions nommées "autoadjust..." tentent de deviner la bonne région à rogner. Après avoir choisi une pré-séléction, appuyez sur le bouton Apply Preset Values. Ajustez ensuite les valeurs jusqu'à ce que cela vous satisfasse.

Les choix big frame, medium frame et small frame font référence à la taille finale de l'image. big garde presque la résolution DVD, medium vise entre 500 et 600 de largeur et small à peu près 350.

Une remarque au sujet du redimensionnement: Use fast resizing a un grand impact sur le traitement de l'image mais il faut que les hauteur et largeur soient divisibles par 32. Ne vous en faites pas, dvd::rip vous dira si vous ne pouvez pas utiliser le redimensionnement rapide. Notez également que même s'il est possible d'élargir l'image je vous recommande fortement de ne pas le faire. Il y a plusieurs inconvénients : le codeur a besoin de beaucoup plus de bits pour atteindre la même qualité que vous auriez obtenue en codant avec une taille inférieure et en le redimensionnant à la lecture, et vous pourriez même obtenir des images déformées (Peter Schuller m'a fait part d'un tel cas). Redimensionnez toujours en réduisant la taille.

4.2.2. Choisir les paramètres de codage

Nous avons fini avec cet onglet. Ouvrez l'onglet
Transcode. Pour commencer, décidez quel codec vidéo vous allez utiliser. Si vous avez installé DivX5 for Linux alors vous pouvez l'utiliser, mais je vous recommande d'utiliser XviD. Si vous avez téléchargé XviD par CVS alors l'option à choisir est xvidcvs (évidemment). Si transcode s'arrête en cours de route pour d'obscures raisons, vous pouvez essayer xvid.

Vous souvenez-vous que je vous avais demandé de vérifier si la vidéo est entrelacée ou non ? On en a besoin maintenant. Si votre vidéo n'est pas entrelacée, alors laissez les options deinterlacing et antialias à off. Sinon choisissez 3 - Zoom To Full Frame. C'est le plus lent mais aussi le meilleur désentrelaceur. Encore une fois, voici l'exemple entrelacée de Ally McBeal. Vous pouvez voir le résultat de 3 - Zoom To Full Frame avec la première image désentrelacée.

Un autre filtre de désentrelacement est fourni par un plugin externe (ne vous inquiétez pas, vous l'avez déjà installlé avec transcode). Regardez en bas à droite. Il y a une entrée nommée transcode options. Toutes les options entrées ici sont simplement passées à transcode. On peut l'utiliser pour le désentrelacement. Voici la même image que précédemment désentrelacée avec un autre désentrelaceur. Ce désentrelaceur est plus rapide que l'option 3 - Zoom To Full Frame. Si vous voulez l'utiliser, alors placez deinterlace sur off et entrez -J dilyuvmmx dans la ligne d'entrée.

dvd::rip essaie d'auto-détecter votre framerate. Si il a échoué, vous pouvez le corriger ici. Use YUV internal devrait toujours être sur yes à moins que le codec de sortie ne supporte pas les modes YUV. XviD les supporte. Cette option accélère considérablement le codage. DivX multipass devrait être sur yes également à moins que vous ne vouliez réaliser une prévisualisation. Pour les résultats finaux, choisissez toujours un codage en 2 passes. Même si ça s'appelle DivX multipass ça marche aussi très bien avec XviD.

Les options audio sont assez explicites. Vous choisissez soit de re-coder l'audio en MP3 avec un bitrate spécifié ou vous laissez le son original en AC3 sans re-codage. Le son AC3 offre l'effet surround et tous ces avantages mais prend plus de place que le son MP3. C'est vraiment à vous de choisir. Si vous utilisez le MP3, assurez-vous de placer MP3 Quality sur 2. Selon la documentation de lame (lame est utilisé pour la compression MP3) des paramètres de qualité supérieurs comme 1 ou 0 - best but slower sont largement plus lents mais ne produisent pas une qualité supérieure de façon significative. L'option volume rescale permet une normalisation du son sans recourir à un programme externe. dvd::rip scanne automatiquement le son et propose une valeur de normalisation.

En haut à droite, vous pouvez entrer la valeur du bitrate. Vous pouvez facilement choisir la taille du fichier final en séléctionnant le nombre et la taille des CDs que vous allez utiliser. Vous pouvez également modifier le Target Size ou le Video Bitrate. dvd::rip mettra à jour automatiquement les valeurs calculées, facilitant la recherche du bitrate optimal.

4.2.3. Générer une prévisualisation rapide

La plupart du temps, vous devriez créer un petit échantillon avec dvd::rip. Vous pouvez le faire en fournissant un Frame Range (intervalle de frames). Je prends en général 30 secondes qui font 750 frames à 25 fps (<nombre de secondes> * <fps> = <nombre de frames à coder>) et commence quelque part dans le film (comme à 200, 300 frames). De bonnes valeurs sont par exemple 200 - 950. Vous pouvez également donner à transcode un bas niveau de priorité (donc un haut niveau de "nice") de façon à ce qu'il n'utilise que les temps morts. Si vous voulez votre prévisualisation tout de suite maintenant, vous pouvez désactiver provisoirement l'option DivX Multipass. N'oubliez pas de le réactiver après !

Quand vous avez fini, cliquez sur Transcode. Après quelques minutes votre AVI/MPEG sera prêt. Jetez-y un coup d'oeil (par exemple mplayer my-new-file.avi). C'est le moment de voir si le désentrelacement a marché comme prévu et de vérifier que le son et la vidéo sont parfaitement synchrones. Si c'est le cas, c'est bon. Si ce n'est pas le cas, lisez la suite:

4.2.4. Eviter la désynchronisation audio/vidéo

Si l'audio et la vidéo ne sont pas synchrones dans votre prévisualisation (ou quand vous lisez le DVD lui-même) vous pouvez fournir à transcode un décalage de frames pour la synchronisation a/v. Il vous faut préciser le paramètre -D nr dans l'entrée transcode options dans l'onglet Transcode. nr est le nombre de frames de décalage de l'audio. Ce nombre peut être négatif. Un frame est long de 40ms à 25fps. De façon plus générale, un frame dure (1000 / fps)ms. Pour mon DVD d'Ally McBeal DVD j'ai besoin d'une correction de -2 qui correspond à -80msecs: -D -2. Recrééz une vidéo de prévisualisation (sans toucher aux autres paramètres a priori) et vérifiez l'audio à nouveau. Si besoin, recommencez l'opération jusqu'à entière satisfaction.

4.2.5. Créer le film en entier

Quand la prévisualisation est bonne vous pouvez commencer votre transcodage. Assurez-vous que DivX Multipass est sur on si vous l'aviez désactivé pour l'échantillon. Cliquez soit sur Transcode soit sur Transcode + Split si vous voulez que vos fichiers soient automatiquement coupés à la taille spécifiée au niveau de Video Bitrate Calculation.

C'est maintenant le bon moment pour aller vous socialiser :-)

4.2.6. Pour utilisateurs confirmés : les options de transcode sur la ligne de commande

Ce chapitre explique les options sur la ligne de commande de transcode, utilisées par dvd::rip. Ce n'est pas critique pour l'opération de transcodage, donc vous pouvez tout à fait le sauter. Je le fournis pour ceux qui veulent mieux comprendre ce que font dvd::rip et transcode.

Dans dvd::rip appuyez CTRL-t pour voir à quoi ressemblent les commandes exécutées par dvd::rip. Concentrons-nous sur le dernier groupe de commandes, Transcode command. Voici un exemple pour mon DVD de Star Trek: The Next Generation sans ces commandes de mkdir et de cd:

  1. transcode -i /space/tng-biggoodbye/vob/004 -w 4357,250,100 -a 1 -b 128,0,0 -s 3.311 -V -f 25 -B 12,10,8 -R 1 -x vob,null -o /dev/null -y xvidcvs,null
  2. transcode -i /space/tng-biggoodbye/vob/004 -w 4357,250,100 -a 1 -b 128,0,0 -s 3.311 -V -f 25 -B 12,10,8 -R 2 -x vob -o /space/tng-biggoodbye/avi/004/tng-biggoodbye-004.avi -y xvidcvs
Jetons un coup d'oeil à la première ligne et à ses paramètres :
La seconde ligne de commandes n'est pas si différente. Seules les options qui ignoraient les sorties sont modifiées (comme -o real-file-name et -y xvidcvs). Pour une référence plus complète, jetez un coup d'oeil aux pages de manuel de transcode et de lame.

Finalement, sachez que transcode, à partir de la version 0.6.0pre6-20020529, supporte libavcodec via un module d'export encore expérimental que j'ai écrit. Vous pouvez l'activer avec -y ffmpeg4 (souvenez-vous: libavcodec fait partie de ffmpeg) à la place de votre codec précédent. dvd::rip ne le supporte pas encore (il n'est pas dans la liste des codecs séléctionnables).

4.3. Utiliser MEncoder

Comme mentionné ci-dessus, il n'y a pas d'interface graphique pour MEncoder pour l'instant. Je ne fournirais donc pas de captures d'écran et vous aurez à tout taper à la main. Cette opération est appelée "codage en trois passes".

4.3.1. Coder l'audio

La première étape est de coder uniquement l'audio. Assurez-vous de savoir quelle langue vous voulez utiliser - vous avez besoin soit de l'audio id (qui est 128 pour le premier flux, 129 pour le deuxième, etc.), soit du code du pays en deux lettres (comme en pour l'anglais ou fr pour le français). Vous pouvez en savoir plus sur ces codes en lançant MPlayer en mode verbeux: mplayer -dvd 1 -v. Ca devrait produire plein d'informations. Cherchez des lignes qui ressemblent à :
[open] audio stream: 0 audio format: ac3 language: en aid: 128
[open] audio stream: 1 audio format: ac3 language: de aid: 129
[open] audio stream: 2 audio format: ac3 language: es aid: 130

Ici, on a trois flux audio: anglais, allemand, espagnol et leur IDs.

Maintenant appelez MEncoder pour coder l'audio :
nice -+19 cat /space/*vob | nice-+19 mencoder -ovc frameno -o frameno.avi -oac mp3lame -lameopts abr:br=128 -alang de -
Voici une explication des arguments utilisés sur la ligne de commande :

Attendez un peu et vous aurez votre audio. MEncoder vous suggère même des bitrate vidéo:
Recommended video bitrate for 650MB CD: 1845
Recommended video bitrate for 700MB CD: 1992
Recommended video bitrate for 800MB CD: 2287

Comme vous pouvez le voir, ces valeurs sont plutôt importantes - c'est parce qu'un épisode d'Ally McBeal ne dure que 41 minutes. Je mettrais donc 2 épisodes par CD et donnerais un bitrate video d'environ 1000.

4.3.2. Générer une prévisualisation (première passe)

Il faut maintenant décider quel codec vidéo vous allez utiliser. Je suppose qu'on veut un AVI avec l'un des codeurs DivX. MEncoder supporte DivX 4 ou DivX 5 (pareil sous Windows, en fait, vous avez soit la version 4 soit la 5) de même qu'il supporte XviD ou lavc. Même si la plupart d'entre vous n'ont pas entendu parler de libavcodec ou du ffmpeg-project, il serait judicieux d'utiliser lavc qui est largement supérieur à DivX 4 ou 5 et au moins aussi bon que XviD. Je ne donnerai donc que des exemples pour lavc puisque vous n'aurez même pas besoin de codecs spéciaux pour la lecture : MPlayer les lit parfaitement (naturellement), et sous Windows, vous avez juste besoin d'un lecteur DivX 5 (la version gratuite est largement suiffisante). Allons-y.

Décomposons la ligne de commande :

Mettez tout ensemble pour obtenir une ligne de commande qui ressemble à :
nice -+19 mencoder -oac copy -o /dev/null -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vpass=1 -vop scale=640:480 -npp lb -ss 0:20 -endpos 0:30 /space/first.vob

4.3.3. Générer une prévisualisation (seconde passe)

A ce stade, on peut garder la plupart des commandes précédentes. Bien sûr, nous changeons vpass=1 en vpass=2 pour dire au codeur qu'il s'agit de la seconde passe cette fois-ci. Evidemment, nous voulons sauvegarder la sortie finale et remplaçons -o /dev/null par quelque chose de plus utile, par exemple -o ally-preview.avi.

Voici la ligne de commande:
nice -+19 mencoder -oac copy -o ally-preview.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vpass=2 -vop scale=640:480 -npp lb -ss 0:20 -endpos 0:30 /space/first.vob
Quand MEncoder a fini, regardez votre échantillon. Ajustez les paramètres si nécessaire. Recommencez la prévisualisation jusqu'à entière satisfaction.

4.3.4. Générer l'AVI final (les deux passes)

La commande pour le fichier final n'utilise plus les options -ss et -endpos. Malheureusement MEncoder ne peut gérer plusieurs fichiers en entrée sur la ligne de commande. C'est pourquoi il faut utiliser la commande cat. Tapez juste :
cat /space/*vob | nice -+19 mencoder -oac copy -o /dev/null -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vpass=1:vqmin=2:vqmax=31 -vop scale=640:480 -npp lb -
cat /space/*vob | nice -+19 mencoder -oac copy -o ally.avi -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1000:vhq:vpass=2:vqmin=2:vqmax=31 -vop scale=640:480 -npp lb -

Remarquez que -ss ne semble pas marcher avec la variante cat *vob | mencoder.... Donc pour la prévisualisation, spécifiez simplement le premier vob comme dernier argument sur la ligne de commande (cf. ci-dessus).

Allez maintenant vous chercher une bonne bière et un bon livre.

Retour à la table des matières


5. Sous-titres

Sur un DVD, les sous-titres sont enregistrés sous forme d'images qui sont affichées sur la vidéo par votre lecteur. De cette façon, les auteurs ont un large choix pour les langues (et cela facilite le sous-titrage dans les langues asiatiques). Pour nous, cela peut être, ou non, un problème, en fonction du fait que nous les voulions directement incrustés dans l'image, ou dans un fichier séparé.

5.1. Convertir les sous-titres en format texte

La plupart du temps, vous ne voulez pas être forcés de voir les sous-titres. Ce n'est pas possible si vous incluez les sous-titres dans l'image pendant le codage. Vous devez extraire les sous-titres du DVD dans un fichier séparé que l'utilisateur pourra (ou non) utiliser. Je vais décrire comment convertir les sous-titres DVD dans un format texte très utilisé. Les sous-titres en texte peuvent facilement être redimensionnés par le lecteur (en choississant une police appropriée) et ils prennent vraiment peu de place (la plupart du temps moins de 100 Ko).

Pour cela, vous devez avoir transcode et ses sources. Vous avez besoin de tccat et tcextract de transcode et des fichiers situés dans transcode/contrib/subrip (contenu dans les sources de transcode).

5.1.1. Compiler les utilitaires

Malheureusement, aucun paquetage (RPM, deb) n'inclue subrip à ma connaissance, donc vous aurez à le compiler et l'installer vous-même. Mais c'est plutôt facile.

  1. Assurez-vous d'avoir gocr et ispell installés sur votre système. Ils sont compris dans la plupart des distributions modernes. Mais si la vôtre n'a pas gocr alors allez sur son site.
  2. Allez dans le répertoire des sources de subrip (cd transcode/contrib/subrip) et tapez make.
  3. Copiez les trois programmes srttool, subtitle2pgm et pgm2txt dans un répertoire contenu dans votre PATH.
  4. Vous pouvez modifier le script pgm2txt si votre version de gocr ne supporte pas l'option -p: à la fin, il y a deux lignes contenant -p ${DBPATH}. Retirez-les simplement (après avoir consulté la page de manuel de gocr).

5.1.2. Extraire les sous-titres

Ici, je suppose que vous avez copié votre DVD avec vobcopy -m, ce qui signifie que vous en avez une copie miroir incluant les fichiers .IFO. Si ce n'est pas le cas, vous devrez adapter les sources.

Tout d'abord, voyons quels sous-titres sont disponibles. On peut utiliser mplayer pour cela :
mplayer -dvd-device /space/st-tng/disc1/ -dvd 1 -vo null -ao null -frames 0 -v 2>&1 | grep sid
ce qui demande à mplayer de donner plein d'informations à propos des sources et de ne rien jouer. Ca devrait donner la liste des sous-titres:
[open] subtitle ( sid ): 0 language: da
[open] subtitle ( sid ): 1 language: de
[open] subtitle ( sid ): 2 language: en
[open] subtitle ( sid ): 3 language: es
[open] subtitle ( sid ): 4 language: fr
[open] subtitle ( sid ): 5 language: it
[open] subtitle ( sid ): 6 language: nl
[open] subtitle ( sid ): 7 language: no
[open] subtitle ( sid ): 8 language: sv
[open] subtitle ( sid ): 9 language: en

Maintenant que nous avons le sid (subtitle ID) correspondant à la langue voulue, on peut utiliser les outils de transcode pour extraire le flux des sous-titres:
tccat -i /space/st-tng/dic1/ -T 1 -L | tcextract -x ps1 -t vob -a 0x22 > subs-en
Le -a 0x21 est le numéro du sous-titre en hexadécimal: 0x20 + sid. Ici, on veut les sous-titres en anglais.

5.1.2. Convertir le flux

Ok, on a le flux non traité, mais que pouvons-nous en faire ? Tout d'abord, nous devons convertir chaque entrée de sous-titre en image. Ceci peut être réalisé facilement avec
subtitle2pgm -o english -c 255,255,0,255 < subs-en
Il y a cependant un truc. Avec -c vous pouvez spécifiez les niveaux de gris utilisés dans la conversion. L'idée est de faciliter le travail de gocr autant que faire ce peut. Vous aurez donc peut-être à jouer avec les paramètres - mais c'est également facile. J'ai pris les exemples suivants de mon DVD de Star Trek - The Next Generation :
Comme vous pouvez le voir, vous avez besoin d'une image qui ne contienne pas de caractères contourés.

subtitle2pgm crée plein d'images - une pour chaque sous-titre - et un fichier de contrôle, nommé english.srtx dans mon cas, qui contient la durée de chaque sous-titre. La prochaine étape est de laisser gocr reconnaître le texte:
pgm2txt english
Attention - gocr vous demandera souvent de lui apprendre les caractères qu'il n'aura pas reconnus. C'est normal. Une fois le travail fini, vous pouvez utiliser ispell sur les fichiers texte créés:
ispell -d american english*txt
Adaptez à la langue voulue, évidemment.

La dernière étape est d'utiliser srttool pour inclure le texte dans le fichier .srtx :
srttool -s -w < english.srtx > english.srt

Voilà, vous avez un sous-titre qui marche. Vous pouvez les utiliser avec, par exemple,
mplayer -sub english.srt mymovie.avi

Retour à la table des matières


6. Quelques trucs en plus

Voici quelques points supplémentaires qu'on peut rencontrer lors de la création d'une vidéo.

6.1. Corriger la désynchronisation audio

Ceci ne marche pas avec les AVIs qui utilisent des MP3 VBR/ABR. Cette étape utilise avisync qui fait partie du paquetage transcode.

avisync est facile à utiliser : précisez juste un fichier entrée (-i name.avi), un fichier sortie (-o newname.avi) et le décalage de synchronisation en frames (-n count). Extrait de l'aide de avisync : count>0: la bande audio commence avec la frame audio 'count'. count<0: 'count' frames audio sont rajoutées au début de l'AVI. Un exemple :
avisync -i ally-not-synched.avi -o ally-synched.avi -n -2

6.2. Couper un AVI

Ceci ne marche pas avec les AVIs qui utilisent des MP3 VBR/ABR. Cette étape utilise avisplit qui fait partie du paquetage transcode. Utilisez-le uniquement avec des AVIs générés par transcode.

avisplit est facile à utiliser : précisez juste un fichier d'entrée (-i name.avi) et où il devrait être coupé. Vous pouvez le couper après une taille donnée (-s size_in_megs), après un certain nombre de frames (-f f1-f2) ou après un certain nombre de secondes (-t s1-s2). Un exemple :
avisplit -i ally-big-file.avi -o ally -s 700
Ceci produira des fichiers nommés ally-0000.avi, ally-0001.avi etc. qui feront chacun 100megs au plus.

6.3. Extraire l'audio des VOBs/MPEGs/AVIs

MPlayer peut être utilisé pour extraire facilement le son. L'option -vo null dit à MPlayer de ne pas montrer la vidéo. Je n'énumère pas toutes les options possibles. La plupart du temps, utilisez -dumpaudio -dumpfile newaudio.extension si vous voulez extraire le son sans lui appliquer de transformation et -ao pcm -aofile newaudio.wav si vous voulez le WAV lui-même.

6.4. Utilisez des fichiers sons séparés

Parfois vous voudrez utiliser un autre fichier son avec votre vidéo. MPlayer rend la chose facile à réaliser : mplayer -audiofile anotherlang.mp3 myvideo.avi joue la vidéo de myvideo.avi et le son de anotherlang.mp3. Pas mal de lecteurs multimédia pour Windows savent aussi lire les fichiers audio externes. De cette façon, vous pouvez fournir différentes langues grâce à des fichiers séparés. Une combinaison souvent utilisée est d'avoir la bande son en anglais incluse dans la vidéo et de fournir les pistes audio supplémentaires dans des fichiers séparés.

6.5. Un éditeur visuel d'AVIs : avidemux

Si vous avez déjà fait de l'édition vidéo sous Windows, vous connaissez probablement l'excellent éditeur en OpenSource
VirtualDub. Un éditeur en OpenSource, pour Linux, vise à fournir les mêmes fonctionnalités ; c'est avidemux. Vous pouvez l'utiliser pour couper facilement un film à un endroit donné, pour appliquer des filtres, pour re-coder des films, et plein d'autres choses. Je vous suggère d'y jeter un coup d'oeil même si la ligne de commande vous est aussi naturelle qu'elle l'est pour moi.

Retour à la table des matières


7 Liens

7.1. Bibliothèques, codecs

7.2. Lecteurs média

7.3. Codeurs

7.4. Autres documentations

MPlayer et transcode sont livrés avec des pages de manuel Unix standards: man mplayer, man mencoder et man transcode affichent ces pages. En outre, en passant -h or --help comme seul paramètre à l'un de ces programmes, vous obtiendrez la liste des options disponibles sur la ligne de commande (liste qui peut ne pas être complète).

7.5. Mailing listes

Je vous recommande chaudement de chercher/parcourir les mailing lists pour trouver une information précise et de vous y inscrire vous-même. Il y a beaucoup d'informations disponibles qui n'ont pas été incluses dans la documentation de base ou la référence des options sur la ligne de commande.

Retour à la table des matières


8. Glossaire

8.1. CBR, VBR et ABR

Ces trois acronymes signifient Constant Bit Rate (bit rate constant), Variable Bit Rate (bit rate variable) et Average Bit Rate (bit rate moyen).

Avec CBR le codeur utilise le même nombre de bits pour chaque frame, sans tenir compte de ce qu'il aurait réellement fallu. Ceci a pour inconvénient que, par exemple, des images complètement noires ou un silence complet dans la bande son utiliseront un nombre de bits superflu alors que des images ou frame audio contenant beaucoup d'élements auraient pu profiter de ces bits.

VBR utilise autant de bits qu'il le faut. Ainsi une image noire prendra très peu de bits et une image complexe aura ce qu'il lui faut. Alors que ceci donne la meilleure qualité, la taille finale ne peut pas du tout être prédite.

C'est là qu'ABR intervient. Vous spécifiez un bitrate moyen que vous voulez atteindre et le codeur distribue les bits qu'il a de disponible. Les bits qu'il épargne sur les images noires, il les utilisera sur les images plus complexes. C'est un compromis entre la qualité et la prédictabilité de la taille finale.

8.2. Global Motion Compensation (GMC)

Global motion compensation (GMC) (Compensation globale de mouvements) permet de zoomer (en rapprochant la caméra) et de se translater (en déplaçant la camera), si les objets restent de même nature et change uniquement de taille et de position à l'image. Il est conseillé d'activer GMC pour compresser des documentaires animaliers ou des films contenant beaucoup de paysages.

8.3. Letterboxing

Peut-être avez-vous remarqué que la vidéo est parfois entourée de bandes noires avant le codage. Ce procédé est appelé le letterboxing. Il permet d'aider certains lecteurs à maintenir un rapport correct d'aspect. D'autres utilisent les bandes noires pour afficher les sous-titres. L'inconvénient est que ces bandes noires élargissent l'image et demandent donc plus de bande passante pour le coder même si des bandes complètement noires ne devraient pas nécessiter beaucoup de place - mais la transition entre l'image et la bande noire nécessite beaucoup de bits qui pourraient être utilisés ailleurs.

8.4. P/I/B-Frames, GOPs

Ceci est extrait et traduit du forum de
doom9 :

Ceci est une explication rapide d'un MPEG "GOP", or, "Group Of Pictures".

GOP:

I frame: P frame: B frame: Pour chaque macrobloc dans un frame P le codeur décide si il connaît déjà ce bloc à partir du frame précédent ou s'il est complètement nouveau. Dans le premier cas, il code seulement la différence (INTER mode). Dans le second cas, il code le macrobloc entier (INTRA mode).

La situation pour les frames B est la suivante : "je ne connaîs pas ce bloc" (INTRA mode), "Je connaîs ce bloc à partir du frame I ou P précédent (backward mode)", "ce bloc ressemble au bloc dans le frame suivant (forward mode)" ou "ce bloc ressemble à un mélange entre les blocs des frames précédent et suivant (bidirectional mode)".

Les GOPs MPEG1 sont toujours de la forme "IBBPBBPBBPBB" (c'est l'ordre dans lequel les frames sont affichés, pas nécessairement l'ordre dans lequel ils ont été codés/sauvés). Les GOPs MPEG2 GOPs ressemblent à cela aussi. Ils peuvent tout aussi bien contenir trois frames B. Le codec DivX5 MPEG4 utilise seulement "IBPBPBPBPB" parce que c'est plus facile à implémenter et parce que la reconnaissance des frames B dans les codecs MPEG4 est relativement récent. Vous pouvez vous attendre à voir plus de frames B à l'avenir.

8.5. Quarter Pixel (QP)

Le Quarter pel ou quarter pixel influence la précision du filtrage des macro blocs. DivX 4 marche avec un pel et demi (1.5, 1.5); 1.25, 1.75, etc. sont possibles depuis DivX 5. La division conventionnelle de l'image en macroblocs repose sur des entiers - 16x16 or 8x8 - en utilisant une information supplémentaire sur ce qui est appelé blocs virtuels. Ceci permet de reproduire le mouvement d'objets de façon beaucoup plus réaliste.

Retour à la table des matières


9. Historique

A faire :
23 août 2002:
3 juin 2002:

3 juin 2002:
5 mai 2002:
3 mai 2002:
2 mai 2002:
1er mai 2002:
30 avril 2002:

Retour à la table des matières


10 About

Ce guide (original en anglais) a été écrit par Moritz Bunkus. C'est un étudiant de 24 ans en informatique au Technical University Braunschweig (Allemagne). D'après lui, il a pas mal de temps de libre :-)

Cette version française est traduite par Massis Sirapian.

Ceci est la première version de ce guide. Faites part de vos remarques - qu'avez-vous aimé ? Pas aimé ? Sur quel point faudrait-il plus d'informations ? Veuillez aussi corriger les erreurs. Et n'hésitez pas à tenir l'auteur au courant d'éventuels programmes / outils / scripts/ documentations qu'il aurait oubliés. L'auteur original peut être contacté par mail : moritz@bunkus.org ; pour la traduction française massis.sirapian@netcourrier.com

Copyright (c) 2002 Moritz Bunkus.
Vous pouvez copier, redistribuer et/ou modifier ce document selon les termes de la Licence de Documentation Libre GNU, Version 1.2 ou toute autre version ultérieure publiée par la Free Software Foundation.

Retour à la table des matières