Digitized ntsc prores playback issue

Hello,

I digitized some old SVHS footage with a matrox mini max card, and when I open it in shotcut there are yellow scan line artifacts at the top of the frame, and some frames seem to lose sync or flicker. The codec is ProRes, and it plays back fine in ffplay, VLC, and Premiere.

FFprobe describes the file thus:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ‘R:MyFile.mov’:
Metadata:
major_brand : qt
minor_version : 537199360
compatible_brands: qt
creation_time : 2025-11-20T20:30:44.000000Z
com.apple.finalcutstudio.media.uuid: 23D09E7F-F458-43EF-AB3E-2075234D5D31
Duration: 00:39:32.47, start: 0.000000, bitrate: 65076 kb/s
Stream #0:0(eng): Video: prores (HQ) (apch / 0x68637061), yuv422p10le(tv, smpte170m/smpte170m/bt709, bottom coded first (swapped)), 720x486, 63524 kb/s, SAR 10:11 DAR 400:297, 29.97 fps, 29.97 tbr, 2997 tbn, 2997 tbc (default)
Metadata:
creation_time : 2025-11-20T20:30:44.000000Z
handler_name : Apple Video Media Handler
encoder : Apple ProRes 422 HQ
timecode : 01:00:00;00
Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, 2 channels, s16, 1536 kb/s (default)
Metadata:
creation_time : 2025-11-20T20:30:44.000000Z
handler_name : Apple Sound Media Handler
Stream #0:2(eng): Data: none (tmcd / 0x64636D74) (default)
Metadata:
creation_time : 2025-11-20T20:47:25.000000Z
handler_name : Time Code Media Handler
timecode : 01:00:00;00
16.60 A-V: -0.015 fd= 1 aq= 409KB vq= 7445KB sq= 0B f=0/0

Any suggestion what might be causing this issue?

Thanks,

-Chris

In case anyone has the same issue: I went into “properties” and changed the field from top first to bottom first and now the video plays back fine.

-Chris

Good find. The metadata says bottom first, so that checks out.

Thanks for pointing that out.

cheers,

-Chris

MLT gets the field order from the FFmpeg AVFrame or the AVCodecParameters, but the ffprobe output reflects what exactly? There is also AVCodecContext with this field. Plus, there is this confusion:

    AV_FIELD_BB,          ///< Bottom coded first, bottom displayed first
    AV_FIELD_TB,          ///< Top coded first, bottom displayed first
    AV_FIELD_BT,          ///< Bottom coded first, top displayed first

This ffprobe condensed output is difficult to read. I had to read the FFmpeg source code to learn “bottom coded first (swapped)” = AV_FIELD_BT. I also learned it is reading AVCodecContext.field_order sigh. The header file docs for AVCodecContext says this:

    /** Field order
     * - encoding: set by libavcodec
     * - decoding: Set by user.
     */
    enum AVFieldOrder field_order;

I interpret that as: should not depend on the libavcodec decoder to set this. Meanwhile, AVCodecParameters, which we are using, header docs state:

 * This struct describes the properties of an encoded stream.
...
    /**
     * Video only. The order of the fields in interlaced video.
     */
    enum AVFieldOrder                  field_order;

MLT (Shotcut) treats AV_FIELD_TT and AV_FIELD_TB as top field first. So, I think this means the frame flag has AV_FRAME_FLAG_TOP_FIELD_FIRST.
There are some other redundant things like this in the FFmpeg APIs like frame rate making it difficult to understand which to use when.

I opened a raw DV file. It is properly detected as bottom field first as all DV is. Then, I exported it as interlaced using the ProRes 422 preset in Shotcut. I opened the result, and it shows Bottom Field First in Properties.
The ffprobe condensed output is
Stream #0:0[0x1]: Video: prores (Standard) (apcn / 0x6E637061), yuv422p10le(smpte170m), 720x480, 65466 kb/s, SAR 8:9 DAR 4:3, 29.97 fps, 29.97 tbr, 30k tbn (default)