Log in

View Full Version : interleave weave + problems


Wilbert
28th March 2004, 23:13
The following scripts don't work:


clip = AviSource("D:\captures\jewel.avi")
clip = clip.ConvertToYUY2(interlaced=true)
c = Trim(clip,615,614).SeparateFields
co = c.SelectOdd
b1 = ce.blankclip
interleave(b1,co).Weave


A clip with two frames is returned instead of one.


clip = AviSource("D:\captures\jewel.avi")
clip = clip.ConvertToYUY2(interlaced=true)
c = Trim(clip,615,614).SeparateFields
ce = c.SelectEven
co = c.SelectOdd
b1 = ce.blankclip
b2 = co.blankclip

cn1 = Overlay(ce, b1, mode="blend", opacity=0.33)
cn2 = Overlay(ce, b1, mode="blend", opacity=0.66)

cn12 = Overlay(co, b2, mode="blend", opacity=0.66)
cn22 = Overlay(co, b2, mode="blend", opacity=0.33)

c1 = interleave(ce,b2).Weave
c2 = interleave(ce,cn12).Weave
c3 = interleave(ce,cn22).Weave
c4 = interleave(ce,co).Weave

c5 = interleave(cn1,co).Weave
c6 = interleave(cn2,co).Weave
c7 = interleave(b1,co).Weave

c1 + c2 + c3 + c4 + c5 + c6

The output is the first two frames instead of all six.

stickboy
28th March 2004, 23:20
Originally posted by Wilbert

clip = AviSource("D:\captures\jewel.avi")
clip = clip.ConvertToYUY2(interlaced=true)
c = Trim(clip,615,614).SeparateFields
co = c.SelectOdd
b1 = ce.blankclip
interleave(b1,co).Weave
(I assume there's supposed to be a "ce = c.SelectEven()" line in there...)

(That Trim(615, 614) line looks dubious.)

The last line needs to be:
Interleave(b1, co).AssumeFieldBased().Weave()Weave doesn't work if the clip is frame-based.

That raises the question: since b1 and co are both field-based clips, should Interleave(b1, co) generate a field-based clip?

Furthermore: is it useful for Weave to be a no-op on frame-based clips? I can see that it might be a good precaution; it doesn't make sense on a frame-based clip. (Would it be better to throw an error outright?)

On the other hand, since SeparateFields and Weave go together, they should have similar behaviors. Right now calling SeparateFields on field-based material is not a no-op.

Wilbert
28th March 2004, 23:32
(I assume there's supposed to be a "ce = c.SelectEven()" line in there...)
Yup. I removed too much. Sorry :)

(That Trim(615, 614) line looks dubious.)
Make that Trim(615, 615) ...

Interleave(b1, co).AssumeFieldBased().Weave()
That worked. Thanks!

However, the second script still doesn't output 6 frames.

stickboy
28th March 2004, 23:35
Hm, the second script outputs six frames for me if I insert AssumeFieldBased() before each Weave() call...
clip = BlankClip(color=$FF0000)
c = Trim(clip,615,614).SeparateFields
ce = c.SelectEven
co = c.SelectOdd
b1 = ce.blankclip
b2 = co.blankclip

cn1 = Overlay(ce, b1, mode="blend", opacity=0.33)
cn2 = Overlay(ce, b1, mode="blend", opacity=0.66)

cn12 = Overlay(co, b2, mode="blend", opacity=0.66)
cn22 = Overlay(co, b2, mode="blend", opacity=0.33)

c1 = interleave(ce,b2).AssumeFieldBased().Weave
c2 = interleave(ce,cn12).AssumeFieldBased().Weave
c3 = interleave(ce,cn22).AssumeFieldBased().Weave
c4 = interleave(ce,co).AssumeFieldBased().Weave

c5 = interleave(cn1,co).AssumeFieldBased().Weave
c6 = interleave(cn2,co).AssumeFieldBased().Weave
c7 = interleave(b1,co).AssumeFieldBased().Weave

c1 + c2 + c3 + c4 + c5 + c6

Wilbert
28th March 2004, 23:38
You are correct. Thanks again :)