Log in

View Full Version : DGIndex force FILM from a 24fps->29.97 "soft" DGPulldown


dansrfe
1st July 2010, 00:11
Ok so I haven't actually tried this but suppose I am working with 24fps film content and I put it in NTSC framing and encode with CCE then use DGPulldown to take it to 29.97. If I put the .vob file (after authoring) through DGIndex then will it give me 24fps in force FILM mode? Or will it report 23.976? Also what fps will it yield for 25->29.97 and other framerates that were originally inputted into DGPulldown?

Guest
1st July 2010, 00:20
First, force film will always set the frame rate to 0.8 of the input frame rate, so 29.97 will always go to 23.976.

Second, force film mode expects to see a 3:2 pattern and if there is more pulldown than that, it deletes frames as required, and if there is less pulldown than that, it repeats frames as required. That is because he desperately wants to output 23.976 from 29.97 as per his design. So, anything that is not exact 3:2 pulldown will not be handled properly.

You can however, in all cases, just use ignore pulldown and set the correct frame rate with AssumeFPS() in your script. That will cleanly deliver the original progressive frames no matter what you did in DGPulldown.

dansrfe
1st July 2010, 00:27
I just had the feeling this could be a way to figure out what the source fps was before soft pulldown. Also is there any method of doing "hard" pulldown to a non-(24000/1001) stream? Since DGPulldown can do a soft one I've always wondered if some method of telecining can do a hard pulldown at unconventional source rates.

Guest
1st July 2010, 00:32
Nah, that won't work, but there is an easy way:

Preview the stream with Honor Pulldown set. Get the displayed framerate and the counts in the coded and playback # fields. Then the original frame rate is:

displayed frame rate * coded # / playback #

Hard pulldown can be done in Avisynth, but I'm not aware of any script to directly do an arbitrary frame rate conversion using field pulldown. It's probably not feasible but you never know. Calling Gavino! I suppose you could bob it, apply a frame-based conversion, and then reinterlace.

Another way would be to use DGPulldown, then serve the resulting stream using Honor Pulldown, and then encode the result. There would be no extra generation loss if your input was already MPEG2.

dansrfe
1st July 2010, 00:44
So I loaded the vob, set honor pulldown, then with preview running went about 30 seconds into the video and this is what I got. Frame Rate = 29.970030 fps. Coded # = 484. Playback # = 604. With your formula that gives 24.01571938 ... So does that mean the original source framerate was 24 fps? And if save the d2v with "Ignore pulldown" set and after the source line in the avs I put Assumefps(24) then the audio and video should sync up perfectly? :)

That DGPulldown method w/Honor Pulldown for hard telecine sounds genius :D

Guest
1st July 2010, 01:25
So I loaded the vob, set honor pulldown, then with preview running went about 30 seconds into the video and this is what I got. Frame Rate = 29.970030 fps. Coded # = 484. Playback # = 604. With your formula that gives 24.01571938 ... So does that mean the original source framerate was 24 fps? It looks that way, but for better accuracy you should preview it longer to get higher counts. You should see it get closer to 24.0000.

And if save the d2v with "Ignore pulldown" set and after the source line in the avs I put Assumefps(24) then the audio and video should sync up perfectly? Correct. I compliment you on your reading comprehension. :)

That DGPulldown method w/Honor Pulldown for hard telecine sounds genius. Oh, thank you. It's very kind of you to say so. I always try to think outside the box.

dansrfe
1st July 2010, 01:45
I put Assumefps(24) into the avs script and when I preview it in realtime with the demuxed ac3 it isn't in sync :(. I have to give the audio a varying negative delay from -2000 to -10000 towards the end :(.

Guest
1st July 2010, 01:48
Well, did you preview it longer as I suggested to get an accurate answer? Maybe it is in fact 23.976. A 30-second preview is way too short for that method, due to rounding.

If you give me a snatch of the stream I can determine what the base frame rate is, as well as try to duplicate your sync issue. 100MBytes will be good.

dansrfe
1st July 2010, 02:04
Yep you are right :D. I let it run for 6-7 mins this time (like I should have :o) and indeed it showed 23.976 after plugging the numbers into your formula. Ok so onto my next question (I hope all these questions aren't bothering you :(). What is the difference between using Assumefps(23.976) with the d2v made by "Ignoring pulldown" AND using force film without any other rate conversions in the script?

Guest
1st July 2010, 02:10
I hope all these questions aren't bothering you. Questions only bother me when the questioner is unwilling to utilize available resources, and wants me to do his/her homework. These are useful questions you are asking, and haven't been asked before, to my knowledge.

What is the difference between using Assumefps(23.976) with the d2v made by "Ignoring pulldown" AND using force film without any other rate conversions in the script? The former will always deliver all and only the exact coded progressive frames. The latter will lose or repeat original progressive frames, depending on how the actual soft pulldown deviates from exact 3:2.

Waiting now for the question: "What are the pros and cons of the former versus the latter?" But perhaps you have enough information to work that out for yourself.

dansrfe
1st July 2010, 02:19
What are the pros and cons of the former versus the latter? :D My best guess is that Assumefps(23.976) sounds like it "manipulates" the source less but that's just my average brain guess :)

Guest
1st July 2010, 02:48
Ignore + AssumeFPS()
--------------------------

Pro:

1. All and only original progressive frames are delivered.

Con:

1. You have to know or calculate the output frame rate.

2. The base frame rate may not be what you want. For example, someone has pulled down a 22 fps stream to 29.97 and you need to make a DVD. You can't author with 22 fps.

Force Film:
-------------

Pro:

1. You don't have to determine the output frame rate; it's going to be 0.8 times the input, usually 23.976.

2. Even if the input has irregular pulldown, you will get an in-sync output stream at 0.8 times the input, usually 23.976.

Con:

1. If the stream has irregular pulldown, you may lose or repeat progressive frames.

2. You may not want 0.8 times the original frame rate.

dansrfe
1st July 2010, 03:42
That explanation works for me :D Thanks Donald! :)

Gavino
1st July 2010, 11:19
Hard pulldown can be done in Avisynth, but I'm not aware of any script to directly do an arbitrary frame rate conversion using field pulldown. It's probably not feasible but you never know. Calling Gavino! I suppose you could bob it, apply a frame-based conversion, and then reinterlace.
The general method is to use ChangeFPS to arrive at double the final framerate, then interlace. The way ChangeFPS works, the number of duplicated fields, and their positions, will automatically come out in the wash.

For example, for hard pulldown to 25fps:
ChangeFPS(50)
AssumeTFF() # or BFF, as required
SeparateFields()
SelectEvery(4, 0,3)
Weave()

See, for example, this post and others in that thread.

Note that this script is independent of the source rate.
At first sight, you might think that a script like this would be required:
AssumeTFF() # or BFF, as required
SeparateFields()
SelectEvery(...) # some complex pattern depending on the source and output rates (actually, on their ratio)
Weave()

where the SelectEvery pattern needs to be worked out differently for each combination of rates. But if we use ChangeFPS, it automatically works out the frame selection pattern for you. Beautifully simple!