{"id":473,"date":"2009-04-19T21:32:02","date_gmt":"2009-04-19T19:32:02","guid":{"rendered":"http:\/\/linux.leunen.com\/?p=473"},"modified":"2009-04-19T21:32:54","modified_gmt":"2009-04-19T19:32:54","slug":"encoder-un-dvd-en-divx-xvid-ou-h264","status":"publish","type":"post","link":"https:\/\/www.leunen.com\/linux\/2009\/04\/encoder-un-dvd-en-divx-xvid-ou-h264\/","title":{"rendered":"Encoder un dvd en DivX, Xvid ou h264"},"content":{"rendered":"<p>Initialement, l&rsquo;int\u00e9r\u00eat du <em>DivX<\/em>, apparu en premier lieu \u00e9tait de pouvoir transcoder un DVD de fa\u00e7on \u00e0 ce qu&rsquo;il tienne sur un CD. La plupart des DVD sont des doubles couches permettant le stockage de +\/- 9 GB maximum. Etant donn\u00e9 que sur un DVD, on a droit en g\u00e9n\u00e9ral \u00e0 des bonus, des bandes annonces, plusieurs langues, des sous-titres etc&#8230;, le film en lui m\u00eame ne fait pas cette capacit\u00e9 maximum. A titre d&rsquo;exemple, un DVD dont le film dure une heure et demi, cod\u00e9 en 8 Mbits\/sec occupe une place de plus ou moins 5.5 GB. Pour arriver \u00e0 r\u00e9duire cette capacit\u00e9 \u00e0 700 MB maximum (taille d&rsquo;un CD), il faut une compression s\u00e9v\u00e8re et des codecs de qualit\u00e9. Ceci a \u00e9t\u00e9 rendu possible par l&rsquo;apparition du <em>MPEG-4<\/em>.<\/p>\n<p><strong>Note:<\/strong> Cet article est principalement bas\u00e9 sur la documentation de <em>MPlayer\/mencoder<\/em>. Je suis conscient qu&rsquo;il existe des frontend graphiques vous \u00e9vitant de devoir utiliser la ligne de commande mais je reste persuad\u00e9 que pour bien comprendre ce que l&rsquo;on fait et comment faire pour avoir la qualit\u00e9 la meilleure, ceci reste tr\u00e8s int\u00e9ressant et riche d&rsquo;enseignements.<\/p>\n<h3>Les Codecs<\/h3>\n<p>Le codec <em>DivX<\/em> utilise la compression <em>MPEG-4<\/em>. C&rsquo;est une compression avec pertes. Ce codec tente d&rsquo;allier qualit\u00e9 et taille de fichier.<\/p>\n<p><em>Xvid<\/em> est une version libre open source sous licence GNU qui utilise la compression MPEG-4 Part 2 &#8211; Advance Simple Profile (ASP). Les vid\u00e9os compress\u00e9es en Xvid sont lisibles par un \u00e9quipement DivX. N\u00e9anmoins, cela suppose que les caract\u00e9ristiques avanc\u00e9es que permet le codage Xvid ne soient pas utilis\u00e9es. Sous Linux, la plupart des programmes comme MPlayer ou VLC sont compatibles Xvid (gr\u00e2ce \u00e0 la librairie libavcodec de FFmpeg par exemple).<\/p>\n<p><em>H.264<\/em> Est un codec bas\u00e9 sur la compression MPEG-4 part 10 &#8211; Advance Video Coding (AVC).<br \/>\n<em>x264<\/em> est la version libre sous licence GNU du codec H.264.<\/p>\n<h3>Quel codec choisir?<\/h3>\n<p>La question se pose bien \u00e9videmment mais la r\u00e9ponse est relativement simple.<br \/>\nPour les utilisateurs de Linux, la version privil\u00e9gi\u00e9e sera bien s\u00fbr la version libre. On choisira donc plut\u00f4t <em>Xvid<\/em> d&rsquo;autant plus qu&rsquo;il est compatible avec <em>DivX<\/em> si on utilise pas de fonctions avanc\u00e9es.<br \/>\nMaintenant, si on tient compte de la qualit\u00e9 et qu&rsquo;il n&rsquo;y a pas de probl\u00e8mes de compatibilit\u00e9 \u00e0 respecter, on choisira <em>x264<\/em>. La qualit\u00e9 de la vid\u00e9o compress\u00e9e est sup\u00e9rieure \u00e0 celle du DivX et m\u00eame du Xvid utilis\u00e9 avec des fonctions avanc\u00e9es.<\/p>\n<h3>Simple passe ou passes multiples?<\/h3>\n<p>Lorsque l&rsquo;on compresse la vid\u00e9o, on a le choix entre un encodage simple passe ou multiples passes. Cela revient \u00e0 choisir entre un codage en CBR (Constant Bit Rate) pour le simple passe et le VBR (Variable Bit Rate) pour le codage en passes multiples.<br \/>\nPour des raisons de qualit\u00e9, on choisira syst\u00e9matiquement le codage VBR.<\/p>\n<h3>Et pour l&rsquo;audio?<\/h3>\n<p>Le son \u00e9tant tr\u00e8s sensible aux encodages successifs, \u00e0 moins qu&rsquo;on ait une bonne raison de le faire, on choisira de ne pas y toucher.<\/p>\n<h3>Calcul du bitrate vid\u00e9o<\/h3>\n<p>Celui-ci d\u00e9pend de la qualit\u00e9 envisag\u00e9e. Plus le bitrate est \u00e9lev\u00e9, plus la qualit\u00e9 vid\u00e9o r\u00e9sultante sera bonne mais ceci au d\u00e9triment de la taille du fichier. On travaille donc souvent \u00e0 l&rsquo;envers. La taille maximum \u00e9tant d\u00e9finie \u00e0 700 MB, on calcule le d\u00e9bit vid\u00e9o maximum possible:<\/p>\n<pre class=\"codesource\">\r\nbitrate vid\u00e9o = ((700 MB \/ taille du film)*8 - bitrate audio)\r\n<\/pre>\n<p>Ceci donne pour un film de deux heures avec un son encod\u00e9 en 128kbits\/sec:<\/p>\n<pre class=\"codesource\">\r\nbitrate vid\u00e9o = ((700 * 1024 * 1024 \/ (120 * 60))* 8 - (128 * 1024) = 684 kbits\/sec\r\n<\/pre>\n<h3>Les bandes noires<\/h3>\n<p>Souvent, la taille de l&rsquo;image est r\u00e9duite \u00e0 des valeurs inf\u00e9rieures aux 720 pixels de r\u00e9solution horizontale du DVD.<br \/>\nIl faut aussi toujours supprimer (cropping) les bandes noires en haut et en bas de l&rsquo;image parce que les bandes noires ont un impact n\u00e9gatif sur l&rsquo;encodage (transitions vives difficiles \u00e0 encoder, elles utilisent de la bande passante,&#8230; ). Il faut aussi toujours tenir compte du fait que \u00e0 cause des macroblocs du codage <em>MPEG-4<\/em> qui ont une taille de 16&#215;16, la taille de l&rsquo;image doit toujours \u00eatre un multiple de 16.<\/p>\n<p><em>MPlayer<\/em> a une fonction particuli\u00e8re qui aide \u00e0 d\u00e9terminer la taille des bandes noires. On utilise le filtre cropdetect dans une zone tr\u00e8s claire du film:<\/p>\n<pre class=\"codesource\">\r\n$ mplayer dvd:\/\/1 -dvd-device \/media\/disk\/DVD\/ -vf cropdetect \r\n...\r\n[CROP] Crop area: X: 2..717  Y: 57..518  (-vf crop=704:448:8:64).0 \r\n<\/pre>\n<p>Ensuite on rejoue le film avec le param\u00e8tre de cropping qu&rsquo;on vient de d\u00e9terminer au moyen du filtre crop. Ceci permet de se rendre compte d&rsquo;une \u00e9ventuelle erreur:<\/p>\n<pre class=\"codesource\">\r\n$ mplayer dvd:\/\/1 -vf crop=720:362:0:58\r\n<\/pre>\n<p>Si on tient compte du fait que la r\u00e9solution horizontale et verticale doit \u00eatre un multiple de 16, on prend la valeur juste inf\u00e9rieure et multiple de 16. On retire aussi une petite valeur en haut et en bas pour que le centre de l&rsquo;image soit respect\u00e9. Cela donne:<\/p>\n<pre class=\"codesource\">\r\n$ mplayer dvd:\/\/1 -vf crop=720:352:0:62\r\n<\/pre>\n<p>Si malgr\u00e9 tout cela, la taille du fichier est encore trop grande ou que le bitrate calcul\u00e9 est trop faible pour avoir une qualit\u00e9 satisfaisante, on peut jouer sur la taille de l&rsquo;image en utilsant le filtre scale de <em>MPlayer\/Mencoder<\/em>. Attention: il faut toujours veiller \u00e0 utiliser des multiples de 16:<\/p>\n<pre class=\"codesource\">\r\n$ mplayer dvd:\/\/1 -dvd-device \/media\/disk\/DVD\/ -vf scale=640:400\r\n<\/pre>\n<p>Ceci vous permet de voir la taille r\u00e9sultante en utilisant le filtre. Le m\u00eame filtre peut \u00eatre utilis\u00e9 avec mencoder lors de l&rsquo;encodage:<\/p>\n<pre class=\"codesource\">\r\n$ mencoder -ofps 25 -ovc xvid -xvidencopts bitrate=500 -aid 129 -oac copy -vf crop=704:448:8:64,scale=640:400 dvd:\/\/1 -dvd-device \/media\/disk\/THE_BIBLE -o the_bible_xvid_1pass.avi\r\n<\/pre>\n<h3>Caract\u00e9ristiques du DVD<\/h3>\n<p>Il est souvent n\u00e9cessaire de conna\u00eetre les caract\u00e9ristiques du DVD. Le nombre de titres, les langues existantes, les sous-titres \u00e9ventuels&#8230; Qunad on lance <em>MPlayer<\/em> en ligne de commande, il affiche les caract\u00e9ristiques du DVD:<\/p>\n<pre class=\"codesource\">\r\n$ mplayer dvd:\/\/1 -dvd-device \/media\/disk\/DVD\/\r\nMPlayer 1.0rc2-4.3.2 (C) 2000-2007 MPlayer Team\r\nCPU: Intel(R) Pentium(R) 4 CPU 2.80GHz (Family: 15, Model: 3, Stepping: 3)\r\nCPUflags:  MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1\r\nCompiled with runtime CPU detection.\r\nmplayer: could not connect to socket\r\nmplayer: No such file or directory\r\nFailed to open LIRC support. You will not be able to use your remote control.\r\n\r\nPlaying dvd:\/\/1.\r\nThere are 3 titles on this DVD.\r\nThere are 15 chapters in this DVD title.\r\nThere are 1 angles in this DVD title.\r\naudio stream: 0 format: ac3 (unknown) language: en aid: 128.\r\naudio stream: 1 format: ac3 (stereo) language: fr aid: 129.\r\naudio stream: 2 format: ac3 (stereo) language: it aid: 130.\r\nnumber of audio channels on disk: 3.\r\nsubtitle ( sid ): 0 language: nl\r\nsubtitle ( sid ): 1 language: en\r\nsubtitle ( sid ): 2 language: fr\r\nsubtitle ( sid ): 3 language: el\r\nsubtitle ( sid ): 4 language: it\r\nsubtitle ( sid ): 5 language: fr\r\nsubtitle ( sid ): 6 language: it\r\nnumber of subtitles on disk: 7\r\nMPEG-PS file format detected.\r\nVIDEO:  MPEG2  720x576  (aspect 3)  25.000 fps  7500.0 kbps (937.5 kbyte\/s)\r\nxscreensaver_disable: xscreensaver wid=31457384.\r\n==========================================================================\r\nOpening video decoder: [mpegpes] MPEG 1\/2 Video passthrough\r\nVDec: vo config request - 720 x 576 (preferred colorspace: Mpeg PES)\r\nCould not find matching colorspace - retrying with -vf scale...\r\nOpening video filter: [scale]\r\nThe selected video_out device is incompatible with this codec.\r\nTry appending the scale filter to your filter list,\r\ne.g. -vf spp,scale instead of -vf spp.\r\nVDecoder init failed :(\r\nOpening video decoder: [libmpeg2] MPEG 1\/2 Video decoder libmpeg2-v0.4.0b\r\nSelected video codec: [mpeg12] vfm: libmpeg2 (MPEG-1 or 2 (libmpeg2))\r\n==========================================================================\r\n==========================================================================\r\nForced audio codec: mad\r\nOpening audio decoder: [liba52] AC3 decoding with liba52\r\nUsing SSE optimized IMDCT transform\r\nUsing MMX optimized resampler\r\nAUDIO: 48000 Hz, 2 ch, s16le, 192.0 kbit\/12.50% (ratio: 24000->192000)\r\nSelected audio codec: [a52] afm: liba52 (AC3-liba52)\r\n==========================================================================\r\nAO: [pulse] 48000Hz 2ch s16le (2 bytes per sample)\r\nStarting playback...\r\nVDec: vo config request - 720 x 576 (preferred colorspace: Planar YV12)\r\nVDec: using Planar YV12 as output csp (no 0)\r\nMovie-Aspect is 1.78:1 - prescaling to correct movie aspect.\r\nVO: [xv] 720x576 => 1024x576 Planar YV12 \r\n<\/pre>\n<p>Cela permet de d\u00e9terminer que l&rsquo;audio ID (aid) est 129 pour le fran\u00e7ais, que le film a une r\u00e9solution de 720 x 576 (ce qui est normal pour un DVD), que le son est cod\u00e9 en AAC \u00e0 192kb\/s.<br \/>\nTous ces renseignements seront utilis\u00e9s dans la ligne de commande de transcodage.<\/p>\n<h3>Encodage<\/h3>\n<p>Ci-dessous, vous trouverez les lignes de commandes que j&rsquo;ai utilis\u00e9es pour faire mes essais. Vous devrez donc modifier certains des param\u00e8tres pour que cela corresponde \u00e0 votre cas (device, aid,&#8230;)<br \/>\nDans chaque cas, le son est copi\u00e9 tel quel sans transcodage.<\/p>\n<p><strong>encodage xvid en une passe:<\/strong><\/p>\n<pre class=\"codesource\">\r\n$ mencoder -ofps 25 -ovc xvid -xvidencopts bitrate=800 -aid 129 -oac copy -vf scale=640:480 dvd:\/\/1 -dvd-device \/media\/disk\/THE_BIBLE -o the_bible_xvid_1pass.avi\r\n<\/pre>\n<p><strong>encodage deux passes en divx:<\/strong><\/p>\n<pre class=\"codesource\">\r\n$ mencoder dvd:\/\/1 -dvd-device \/media\/disk\/THE_BIBLE -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:autoaspect -aid 129 -oac copy -o \/dev\/null\r\n$ mencoder dvd:\/\/1 -dvd-device \/media\/disk\/THE_BIBLE -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2:autoaspect -aid 129 -oac copy -o the_bible_divx.avi\r\n<\/pre>\n<p><strong>encodage en xvid en deux passes:<\/strong><\/p>\n<pre class=\"codesource\">\r\n$ mencoder dvd:\/\/1 -dvd-device \/media\/disk\/THE_BIBLE -mf fps=25 -ovc xvid -xvidencopts pass=1:bitrate=800 -alang fr -oac copy -o \/dev\/null\r\n$ mencoder dvd:\/\/1 -dvd-device \/media\/disk\/THE_BIBLE -mf fps=25 -ovc xvid -xvidencopts pass=2:bitrate=800 -alang fr -oac copy -o the_bible_xvid.avi\r\n<\/pre>\n<p><strong>encodage deux passes en x264:<\/strong><\/p>\n<pre class=\"codesource\">\r\n$ mencoder -aid 129 -oac copy -ovc x264 -x264encopts subq=5:8x8dct:me=umh:frameref=2:bframes=3:b_pyramid:weight_b:bitrate=800:pass=1 dvd:\/\/1 -dvd-device \/media\/disk\/THE_BIBLE -o \/dev\/null\r\n$ mencoder -aid 129 -oac copy -ovc x264 -x264encopts subq=5:8x8dct:me=umh:frameref=2:bframes=3:b_pyramid:weight_b:bitrate=800:pass=2 dvd:\/\/1 -dvd-device \/media\/disk\/THE_BIBLE -o the_bible_x264.avi\r\n<\/pre>\n<p>Comparez les r\u00e9sultas obtenus. Pour cela, choisissez des sc\u00e8nes d&rsquo;actions o\u00f9 l&rsquo;ensemble de l&rsquo;image est anim\u00e9e. Choisissez des images sombres et regardez le codage qui donne les images les moins bruit\u00e9es. Observez s&rsquo;il n&rsquo;y a pas de pixelisation dans certaines sc\u00e8nes, signe d&rsquo;un bitrate trop faible&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Initialement, l&rsquo;int\u00e9r\u00eat du DivX, apparu en premier lieu \u00e9tait de pouvoir transcoder un DVD de fa\u00e7on \u00e0 ce qu&rsquo;il tienne sur un CD. La plupart des DVD sont des doubles couches permettant le stockage de +\/- 9 GB maximum. Etant donn\u00e9 que sur un DVD, on a droit en g\u00e9n\u00e9ral \u00e0 des bonus, des bandes [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5,20],"tags":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/473"}],"collection":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/comments?post=473"}],"version-history":[{"count":4,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/473\/revisions"}],"predecessor-version":[{"id":477,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/posts\/473\/revisions\/477"}],"wp:attachment":[{"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/media?parent=473"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/categories?post=473"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.leunen.com\/linux\/wp-json\/wp\/v2\/tags?post=473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}