Du .mov, divx,
au dvd
article technique explicatif
par Hervé - 23/05/03
La dernière bande d'annonce de Pixar sur le web vous a fait craquer, vos cousins canadiens vous ont envoyé un DivX de leurs vacances d'été, et vous préfèreriez regarder tout ça en famille, sur votre platine DVD de salon ?
Remarque : Ce sujet donne également lieu à un mode d'emploi que vous trouverez dans les Recettes.
Un grand nombre d'écueils vous guettent durant ce transcodage :
- le frame rate n'est pas le même que le standard du DVD,
- les pistes vidéo peuvent avoir été encodées en "variable frame rate" (débit d'image variable),
- la vidéo n'est pas un flux (stream), et donc pas adaptée au DVD.Note : fps = frames per second = images/seconde
1- DECODAGEffmpegX vous propose 2 types de décodeurs (avant encodage en DVD), les deux décodent/fabriquent un flux (stream) de données vidéo (c'est à dire une suite continue de données vidéo), mais pas de la même manière:
- Le décodeur QuickTime se base sur le time code,
- Le décodeur mplayer se base sur les images (frames) existantes.Résultat :
- Via QuickTime, si le fichier vidéo n'est pas de 25 fps, le décodeur Quicktime rajoutera (ex. d'une source à 24 fps) ou réduira (ex. d'une source à 30 fps) le nombre d'images présentes dans chaque seconde. Bref il recréera artificiellement un flux continu de données vidéo quelle qu'en soit la source. Résultat : des saccades! (en fait, au moins une par seconde !)
- Via mplayer, le décodeur prend toute image existante et l'envoie à l'encodeur qui se charge d'en faire un flux de 25 fps, sans aucune prise en compte du time-code.
Si le fichier source est constitué de 5 images par seconde, le résultat sera une vidéo accélérée par 5 !
Si le fichier source est constitué de 24 images par seconde, le résultat sera une vidéo accélérée par 1/25 !
A l'arrivée, une durée de vidéo différente de la source mais aucune saccade, fluidité conservée.Donc le décodeur mplayer est bien meilleur dans notre cas.
Problème : si la source est composée de "variable frame rate" (exemple : sous iMovie, les mélanges entre les "clips" et les "clips fixes"), la synchronisation du son deviendra impossible.
ATTENTION : un clip fixe de 37 secondes ne sera analysé par mplayer que comme une image, soit 1/25e de seconde (amusez vous après à recoller 37s de son sur 1/25e de seconde !)
2- PREPARATION DU FICHIER SOURCEL'explication semble être donnée à l'envers mais ce n'est qu'en connaissant les spécificités des encodeurs que l'on peut préparer sa vidéo source pour l'un ou l'autre.
Un DVD est comme un film DV, il est conctitué d'un flux continu (stream), chaque seconde est constituée de 25 images ni plus ni moins.
Les .mov ou les .avi ne sont pas obligatoirement des flux : ils sont faits pour être joués avec des lecteurs beaucoup plus permissifs (par exemple, QuicKTime Player). Le nombre d'images à la seconde peut être variable, ce qui permet d'économiser des méga octets, et donc d'épargner de la place sur le disque dur.
Nous avons donc deux supports (DVD et ordinateur), à vocation différente :- le DVD est un standard :
25 images par seconde,
débit maximal de 9800 kbits par seconde,
un support standardisé de 4,7 Go ou 9 Go.- l'ordinateur se contente de gagner de la place sur le disque dur (variable frame rate), servant à faire tout type de manipulation sur les fichiers de manière le moins destructive possible. L'ordinateur ne recherche pas la standardisation d'un produit fini comme le DVD.
Donc il faut recréer un flux constant
- .mov :
la bande d'annonce de Nemo est en 24 fps, mais contient une image "disney.com" qui dure 3 secondes en entrée et 1 image "pixar.com" qui dure 3 secondes en sortie... Il faut recréer le flux manquant sur ces parties. Exportez en QuickTime (photo-jpeg) à 24 fps. Vous venez de forcer un flux de 24 fps sur l'intégralité du fichier, les "clips fixes" sont désormais composés de 24 frames chaque seconde et la partie "vidéo" est restée inchangée (vous n'avez pas artificiellement rééchantilloné les images, vous ne les avez donc pas abimées).
Vous voici maintenant avec un flux de 24 fps, et non en 25 comme le voudrait le mpeg2/dvd. Mais comme nous l'avons vu précédemment, ça ne posera aucun problème via le décodeur mplayer.- .avi :
Comme les fichiers .mov, le débit d'image par seconde d'un .avi peut être variable. Le seul problème est qu'il est plus difficile de déceler s'il s'agit d'un flux ou non Sous ffmpegx (depuis la version K), regardez le frame rate (fps) annoncé à l'ouverture du fichier "film.mov" (c'est la lecture de l'index du .avi, ex : 23,9756 fps).
Il vous faut recréer sous QuickTime un flux (même mode d'emploi que précédemment, export en indiquant le frame rate relevé sous ffmpegX).
3. ENCODAGE EN MPEG2(revoir le chapitre 1)
4. SYNCHRONISATION DU SONPour éviter tout problème, une seule solution : MediaPipe.
Théoriquement, avec l'aide d'une calculatrice vous devriez pouvoir calculer le résultat :
Exemple : 1 minute à 23,98 fps = 60*23,98 = 1438,8frames,
et 1438,8 frames à 25 images/seconde = 1438,8/25 = 57,552 secondes.En pratique, le fichier peut être en 23,98 fps, en 23,975 fps, en 23,9756 fps, ou l'index peut être approximatif, donc on va refaire avec Mediapipe la même manip' que fait le décodeur mplayer.
On règle donc le frame rate sur 25 images par seconde (1000/40), en cochant "Soft change" : il va prendre les 25 premières images qu'il rencontre pour en former une seconde (de temps), comme le décodeur mplayer sous ffmpegX. Le résultat est donc un .mov en sortie qui est la copie conforme du mpeg2 généré via mplayer (sans les approximations de la calculatrice).
Vous venez de transformer votre flux de xx fps en flux de 25 fps, compatible DVD, mais sans son !
Sous QuickTime ouvrez votre .mov, puis "Ajouter à l'échelle" la piste son extraite du fichier précédent.Exportez en .wav (ffmpegX ne reconnait pas le .aiff) et encodez en mp2.
SYNCHRO RÉUSSIE !
5. REMARQUES DIVERSESTaille de l'image
L'option VOB Letterbox dans ffmpegX rajoute des bandes noires pour faire adapter un format 16-9 en 4/3, de la même façon elle adapte aussi un 2,35 en 16-9...
Mediapipe
Vu que nous ne recherchons qu'à synchroniser notre son avec le fichier mpeg2 généré via le decodeur mplayer, pas la peine de s'encombrer d'un gros fichier lent à être généré. J'utilise le "Crop" (retailler l'image) pour qu'il ne reste plus qu'1 pixel de vidéo (la même manip en redimensionnant "Scale" est bien plus longue) et j'encode le fichier final avec le codec Cinepack (pourri comparé au Sorenson ou au Photo-jpeg, mais rapide!). Bref pas la peine de faire bien, mieux vaut faire efficace.
Mediapipe (suite)
Pour les petits malins... La solution idéale pour limiter les manips aurait été de créer un flux continu selon le frame rate de la source, puis de le transformer en 25 fps, et enfin de l'encoder en .mov, ce qui aurait permis d'encoder dans ffmpegX indifféremment via les decodeurs mplayer ou Quicktime. Ça donnerait :
1/ File browser
2/ QuickTime Decode
3/ Frame Rate (selon celui du fichier source, ex: 23975/1000), en décochant "Soft change" (donc en forçant la création des images manquantes)
4/ Frame Rate - 1000/40 (soit 25fps) - et cocher "Soft change"
5/ QuickTime Encoder - codec Photo_jpeg - qualité max - ne pas rentrer de chiffre sur le frame rate.Manque de pot (je ne sais pas pourquoi) ça ne marche pas... le fichier généré n'est pas un flux propre !
L'option "Soft change" décochée ne fonctionne pas, donc ça ne marche pas!ffmpegX - décodeur mplayer
Avant la version 0.0.6k, le quantitizer de ffmpegX ne fonctionnait pas avec l'option de décodage mplayer (il était tout le temps bloqué sur 8, quelque soit le chiffre que vous y mettiez et même si vous cochiez la case "bit constant")
ffmpegX - décodeur mplayer (suite)
Le fichier codecs.conf situé quelque part sur votre disque dur (users/xxx/.mplayer/ ou usrs/local/bin/mplayer/) contient la liste des codecs compatibles avec ceux de QuickTime. Les fichiers en "dépendances autorisées" générés sous QuickTime Player en faisant "Enregistrer sous", ne sont pas compatibles avec le décodeur mplayer. Il lui faut des fichiers complets (faire "enregistrer en tant que séquence autonome")
Le NTSC
Si vos cousins canadiens ont filmé avec leur caméra DV en NTSC et vous ont envoyé un divX à 30fps, pas de problème, le DV étant un flux "propre" (comme le mpeg2), le résultat sera juste un film joué plus lentement sur votre platine de salon une fois converti en 25fps (il sera en fait 30/25 fois plus long que l'original, vu que vous allez ralentir le son, pensez à augmenter les aigus dans Quicktime Player avant d'encoder le son en MP2 si ça vous amuse...)
Si vous projetez d'encoder un divX piraté à 29,97 fps récupéré sur le net, laissez tomber !!! Le film cinéma faisait 24 fps, artificiellement il a été "adapté" en 29,97fps (rajout d'images), et les options de ffmpegX pour "revert to original frame from NTSC movies 3:2 pulled-down" (option Undo 3:2), ne marchent pas avec notre technique ! Donc des saccades à gogos !!! (5,97 images ont été artificiellement générées depuis l'original chaque seconde, le résultat en DVD PAL : une vidéo filmée par un Parkinsonien...)
Si vous en êtes ici, c'est que vous avez fini l'article. SVP ne me demandez pas de faire des commentaires approfondis ou autre sur cet article, je ne suis pas un professionnel de l'image (par contre je n'ai rien contre recevoir des infos complémentaires). Tout a été compris de manière empirique, en essayant et réessayant jusqu'à trouver un mode d'emploi fiable (ou quand la curiosité technique en devient une obsession parce que je n'aime pas ne rien y comprendre! ;) )