I've seen bad frames like that before. Seems like the timing on one of the 2 interlaced fields in that frame had a timing error, and so one of the fields is off by a few rows with respect to the other field. The top few rows look like something I'd see when there was a timing issue with that frame, having trouble syncing, which goes hand in hand with one of the fields being vertically off by a few rows with respect to the other.
I suppose somehow either the player or the TBC/Frame synchronizer (AVT-8710 or DMR-ES15) in one setup did not handle the timing problem, while the other did.
I work in Avisynth and have seen this many times, so I can suggest how to fix it there.
Approaches I would try are to adjust the position of the fields in that frame so they align. Then to address the frame glitch in the top rows, either use rows from a neighboring frame to cover it or do a row duplication of the even fields to the odd fields or vice versa (because it looks like the giltch is only in one of the two fields, based on my experience).
For re-aligning the offset of the even and odd fields in the frame, I use a function like the one I posted here
https://www.digitalfaq.com/forum/vid...html#post64626 Also, there are other posts in the forum from other members with similar functions that try to shift one of the fields up or down to better align.
After doing that, I'd either
1.) Try something crude like this function
https://www.digitalfaq.com/forum/vid...html#post86447 to copy so many rows from previous or next frame over the bad frame,
OR
2.) Try to duplicate the even rows to odd or vice versa using one of these two functions
Code:
function rowdup(clip c, int frame, int startrow, int endrow) {
orig=c.trim(frame,-1).SeparateRows(480)
dup=WeaveRows(orig.trim(startrow,endrow),endrow-startrow)
dup2=dup.SeparateRows(endrow-startrow)
e=dup2.SelectEven()
o=dup2.SelectOdd()
dupped=Interleave(e,e).WeaveRows(endrow-startrow)
dupped2=dupped.SeparateRows(endrow-startrow)
tmp = orig.trim(0,startrow-1) ++ dupped2.trim(0,endrow-startrow) ++ orig.trim(endrow+1,0)
c1b = WeaveRows(tmp,480)
c1a = c.trim(0,frame-1)
c1c = c.trim(frame+1,0)
result = c1a+c1b+c1c
return result
}
function orowdup(clip c, int frame, int startrow, int endrow) {
orig=c.trim(frame,-1).SeparateRows(480)
dup=WeaveRows(orig.trim(startrow,endrow),endrow-startrow)
dup2=dup.SeparateRows(endrow-startrow)
e=dup2.SelectEven()
o=dup2.SelectOdd()
dupped=Interleave(o,o).WeaveRows(endrow-startrow)
dupped2=dupped.SeparateRows(endrow-startrow)
tmp = orig.trim(0,startrow-1) ++ dupped2.trim(0,endrow-startrow) ++ orig.trim(endrow+1,0)
c1b = WeaveRows(tmp,480)
c1a = c.trim(0,frame-1)
c1c = c.trim(frame+1,0)
result = c1a+c1b+c1c
return result
}
# in frame 100 (bad frame), for rows 2 thru 50, copy either the even rows over the odd rows, or vice versa. This cuts the resolution in half for this part of frame, but it is likely hardly noticeable for one frame.
#call either this
rowdup(100, 2, 50)
#or this, but not both
orowdup(100,2,50)
OR
3.) Use ReplaceFramesMC (also mentioned in the same post shown before
https://www.digitalfaq.com/forum/vid...html#post86447) to either repair just the top rows that are glitched, or possibly replace the entire frame if you want to skip the field adjustment fix mentioned previously (depends on how much of a preservation purist you are or whether you view the frame as good enough and it will go by in 1/30th of a second and is not noticeable to you. This depends on the results, sometimes it's awesome at replacing one frame, other times it gets a bit weird, just have to try it).
And, yes, the black vertical bars on the edge or normal. Avisynth can also be used to cut those off and resize the frame to a proper aspect ratio. Lots of posts on the forum over the years on that.