--- telecine.d1.txt 2004-01-03 19:01:22.000000000 -0800 +++ telecine.txt 2004-01-05 14:06:55.000000000 -0800 @@ -1,13 +1,10 @@ TELECINE, INTERLACING, AND MENCODER HOWTO -Initial (DRAFT 1) version by Corey Hickey, 2004-01-03. +Initial (DRAFT 2) version by Corey Hickey, with advice and contributions by D +Richard Felker III. + +2004-01-05 -Missing stuff: -1. How to use -vf filmdint (I haven't used it yet, and don't describe it). -2. When (if) detc is more suitable than ivtc. -3. How to deal with non-standard telecine that doesn't follow PPPII,PPPII,... -4. The option of using -vf tfields for interlaced video. I can't make it work. -5. Pros/cons of each deinterlacing filter. Notes: 1. Right now this document only applies to NTSC DVDs, and not PAL. @@ -15,8 +12,15 @@ actual use. They are simply the bare minimum required to encode the pertaining video category. How to make good DVD rips or fine-tune lavc for maximum quality is not within the scope of this document. +3. If you see something like [1], check the footnote at the end of the document. + +What isn't here, but maybe ought to be: +1. How to use -vf filmdint +2. When (if) detc is more suitable than ivtc. +3. How to deal with non-standard telecine that doesn't follow PPPII,PPPII,... +4. Pros/cons of each deinterlacing filter. -*******************************Introduction********************************* +****************************** Introduction ******************************** I suggest you visit this page if you don't understand much of what is written in this document: @@ -51,19 +55,29 @@ the video is shown frame-after-frame instead of field-after-field. -********************How to tell what type of video you have******************** +******************* How to tell what type of video you have ******************* --Progressive-- Progressive video was originally filmed at 23.976 fps, and stored on the DVD in the same way. -When you play a progressive DVD in mplayer, mplayer will print -the following line as soon as the movie begins to play: +When you play a progressive DVD in mplayer, mplayer will print the following +line as soon as the movie begins to play: demux_mpg: 24fps progressive NTSC content detected, switching framerate. From this point forward, demux_mpg should never say it finds "30fps NTSC content." -When you watch progressive video, you should never see any interlacing. +When you watch progressive video, you should never see any interlacing. Watch +out, however, because sometimes there is a tiny bit of telecine mixed in, where +you wouldn't expect. I've encountered TV show DVDs that have one second of +telecine at every scene change, or at seemingly random places. I once watched a +DVD that had a progressive first half, and the second half was telecined. If you +want to be _really_ thorough, you can scan the entire movie: +$ mplayer dvd://1 -nosound -vo null -benchmark +Using -benchmark makes mplayer play the movie as quickly as it possibly can; +still, depending on your hardware, it can take a while. Every time demux_mpg +reports a framerate change, the line immediately above will show you the time at +which the change occurred. Sometimes progressive video is referred to as "soft-telecine" because it is intended to be telecined by the DVD player. @@ -121,7 +135,7 @@ examine the "30fps" sections and see that they don't have the telecine pattern. -************************How to encode each category************************* +*********************** How to encode each category ************************ As I mentioned in the beginning, example mencoder lines below are NOT meant to actually be used; they only demonstrate the minimum parameters to properly @@ -142,67 +156,86 @@ detc and ivtc. You can read the manual page to see their differences, but for DVDs I've never had a problem with ivtc. Note that you should _always_ inverse-telecine before any rescaling; unless you really know what you're doing, -inverse-telecine before cropping, too. Again, -ofps 23.976 is needed too. +inverse-telecine before cropping, too [1]. Again, -ofps 23.976 is needed too. $ mencoder dvd://1 -nosound -vf ivtc=1 -ovc lavc -ofps 23.976 --Interlaced-- -It is not possible to retrieve a complete progressive video from interlaced -content without losing half of the vertical resolution. Unless you are -downscaling to smaller than 1/2 of the original size, you have two choices: +For most practical cases it is not possible to retrieve a complete progressive +video from interlaced content. The only way to do so without losing half of the +vertical resolution is to double the framerate and try to "guess" what ought to +make up the corresponding lines for each field (this has drawbacks - see method +#3). 1. Encode the video in interlaced form. Normally, interlacing wreaks havoc with -the encoder's ability to compress well, but lavc has an ildct parameter for -dealing with storing interlaced video a bit better. Note that -ofps is NOT -needed here. -$ mencoder dvd://1 -nosound -ovc lavc -lavcopts ildct + the encoder's ability to compress well, but lavc has two parameters + specifically for dealing with storing interlaced video a bit better: ildct + and ilme. Also, using mbd=2 is strongly recommended [2] because it will + encode macroblocks as non-interlaced in places where there is no motion. Note + that -ofps is NOT needed here. + $ mencoder dvd://1 -nosound -ovc lavc -lavcopts ildct:ilme:mbd=2 2. Use a deinterlacing filter before encoding. There are several of these -filters available to choose from, each with its own advantages and -disadvantages. Consult mplayer -pphelp to see what's available (grep for -"deint"), and search the mplayer mailing lists to find many discussions about -the various filters. Again, the framerate is not changing, so no -ofps. Also, -postprocessing should be done after cropping and before scaling. -$ mencoder dvd://1 -nosound -vf pp=lb -ovc lavc --- - -If, however, you plan on downscaling dramatically, you can use the il filter to -separate the two fields, and only encode one. Of course, you'll lose half the -vertical resolution, but if you plan on downscaling to at most 1/2 of the -original, the loss won't matter much. The result will be a progressive 29.97 -frames per second file. Here's the procedure. You can apply each filter with -mplayer first to test, before encoding. - -1. Use il=d:d to separate the two fields. -2. Use -vf crop to extract either field (without any surrounding black bars, of - course). -3. Scale appropriately. First divide the cropped horizontal resolution by two, - and then adjust the scaling parameters to maintain the original aspect ratio - and to make the resolutions divisible by 16. How to do the latter part is - described in other documents. -$ mencoder dvd://1 -nosound -vf il=d:d,crop=718,180:0:30,scale=308:180 -ovc lavc + filters available to choose from, each with its own advantages and + disadvantages. Consult mplayer -pphelp to see what's available (grep for + "deint"), and search the mplayer mailing lists to find many discussions + about the various filters. Again, the framerate is not changing, so no -ofps. + Also, deinterlacing should be done after cropping[1] and before scaling. + $ mencoder dvd://1 -nosound -vf pp=lb -ovc lavc + +3. Unfortunately, this option is buggy with mencoder; it ought to work well + with mencoder G2, but that isn't here yet. You might experience crahes. + Anyway, the purpose of -vf tfields is to create a full frame out of each + field, which makes the framerate 59.94. The advantage of this approach is + that no data is ever lost; however, since each frame comes from only one + field, the missing lines have to be interpolated somehow. There are no very + good methods of generating the missing data, and so the result will look a + bit similar to when using some deinterlacing filters. Generating the missing + lines creates other issues, as well, simply because the amount of data + doubles. So, higher encoding bitrates are required to maintain quality, and + more CPU power is used for both encoding and decoding. tfields has several + different options for how to create the missing lines of each frame. If you + use this method, then Reference the manual, and chose whichever option looks + best for your material. Note that when using tfields you _have_to_ specify + both -fps and -ofps to be twice the framerate of your original source. + $ mencoder dvd://1 -nosound -vf tfields=2 -ovc lavc -fps 59.94 -ofps 59.94 + +4. If you plan on downscaling dramatically, you can excise and encode only one + of the two fields. Of course, you'll lose half the vertical resolution, but + if you plan on downscaling to at most 1/2 of the original, the loss won't + matter much. The result will be a progressive 29.97 frames per second file. + The procedure is to use -vf field, then crop[1] and scale appropriately. + Remember that you'll have to adjust the scale to compensate for the vertical + resolution being halved. + $ mencoder dvd://1 -nosound -vf field=0 -ovc lavc ---Mixed progressive and telecine--- In order to turn mixed progressive and telecine video into entirely progressive video, the telecined parts have to be inverse-telecined. There are two filters -that accomplish this natively: pullup and filmdint. +that accomplish this natively, but a better solution most of the time is to use +two filters in conjunction (read onward for more detail). Pullup doesn't really work well with the current mencoder, and is intended for -use with mencoder G2 (whenever it's ready). - -Filmdint -TODO: DESCRIBE FILMDINT (I haven't used filmdint yet, but it ought to be good) +use with mencoder G2 (whenever it's ready). It works fine without -ofps, but +-ofps is needed to prevent choppy output. With -ofps, it sometimes fails. -Another, currently very reliable, method is to, rather than inverse-telecine -the telecined parts, telecine the non-telecined parts and the inverse-telecine -the whole video. Sound confusing? softpulldown is a filter that goes through a -video and makes the entire file telecined. If we follow softpulldown with either -detc or ivtc, the final result will be entirely progressive. Cropping and -scaling should be done after the inverse-telecine operations, and -ofps 23.976 -is needed. +I haven't used filmdint myself, but here's what D Richard Felker III has to say: + "It's ok, but IMO it tries to deinterlace rather than doing inverse telecine + too often (much like settop DVD players & progressive TVs) which gives ugly + flickering and other artefacts. If you're going to use it, you at least need + to spend some time tuning the options and watching the output first to make + sure it's not messing up." + +Currently the most reliable method to deal with this type of video is to, rather +than inverse-telecine the telecined parts, telecine the non-telecined parts and +then inverse-telecine the whole video. Sound confusing? softpulldown is a filter +that goes through a video and makes the entire file telecined. If we follow +softpulldown with either detc or ivtc, the final result will be entirely +progressive. Cropping and scaling should be done after the inverse-telecine +operations, and -ofps 23.976 is needed. $ mencoder dvd://1 -nosound -vf softpulldown,ivtc=1 -ovc lavc -ofps 23.976 --Mixed progressive and interlaced-- @@ -213,11 +246,61 @@ 1. Treat it as progressive. The interlaced parts will look interlaced, and some of the interlaced frames will have to be dropped, resulting in a bit of uneven jumpiness. You can use a postprocessing filter if you want to, but it - may adversely affect the progressive parts. + may slightly degrade the progressive parts. + + This option should definitely not be used if you want to eventually display + the video on an interlaced device (with a TV card, for example). It may also + be a bad idea for progressive display, too. It will drop interlaced fields, + resulting in a discontinuity of 1/24.976 second, which can be more noticable than + the next option, which will make some frames display for 1/29.97 second + longer than they would otherwise. Either way, it's best to consider your + content. If it's 90% progressive, you should favor a progressive approach. If + it's only half progressive, you probably want to encode it as if it's all + interlaced. 2. Treat it as interlaced. Some frames of the progressive parts will need to be duplicated, resulting in uneven jumpiness. Again, deinterlacing filters may - degrade the progressive parts. + slightly degrade the progressive parts. + + +********************************** Footnotes ********************************** +1. Video data on DVDs are stored in a format called YUV 4:2:0. In YUV video, + luma ("brightness") and chroma ("color") are stored separately. Because the + human eye is somewhat less sensitive to color than it is to brightness, in a + YUV 4:2:0 picture there is only one chroma pixel for every four luma pixels. + In a progressive picture, each square of four luma pixels (two on each side) + has one common chroma pixel. You must crop progressive YUV 4:2:0 to even + resolutions, and use even offsets. For example, crop=716:380:2:26 is ok but + crop=716:380:3:26 is not. + + When you are dealing with interlaced YUV 4:2:0, the situation is a bit more + complicated. Instead of every four luma pixels in the _frame_ sharing a + chroma pixel, every four luma pixels in each _field_ share a chroma pixel. + When fields are interlaced to form a frame, each scanline is one pixel high. + Now, instead of all four luma pixels being in a square, there are two pixels + side-by-side, and the other two pixels are side-by-side two scanlines down. + The two luma pixels in the intermediate scanline are from the other field, + and so share a different chroma pixel with two luma pixels two scanlines + away. All this confusion makes it necessary to have vertical crop dimensions + and offsets be multiples of four. Horizontal can stay even. + + For telecined video, I recommend that cropping take place after inverse + telecining. Once the video is progressive you only need to crop by even by + numbers. If you really want to gain the slight speedup that cropping first + may offer, you must crop vertically by multiples of four or else the + inverse-telecine filter won't have proper data. + + For interlaced (not telecined) video, you must always crop vertically by + multiples of four unless you use -vf field before cropping. + + +2. Just because I recommend mbd=2 here doesn't mean it shouldn't be used + elsewhere. Along with trell, mbd=2 is one of the two lavc options that + increases quality the most, and you should always use at least those two + unless the drop in encoding speed is prohibitive (e.g. realtime encoding). + There are many other options to lavc that increase encoding quality (and + decrease encoding speed, but that is beyond the scope of this document. + END OF FILE