• Embedding frame ranges into Quicktime movies with FFmpeg

    ,

    QuickTime (.mov) files are fundamentally time-based, not frame-based, and so don’t have a built-in, uniform “first frame/last frame” field you can set as numeric frame IDs. Instead, tools like Shotgun Create rely on the timecode track and the movie’s duration to infer frame numbers. If you want Shotgun to pick up a non-default frame range (e.g. start at 1001, end at 1064), you must bake in an SMPTE timecode that corresponds to your desired start frame, and ensure the movie’s duration matches your clip length.

    How Shotgun Reads Frame Ranges

    • Default start frame is 1. If no timecode metadata is present, Shotgun assumes the movie begins at frame 1.
    • Timecode ⇒ frame number. Shotgun Create “honors the timecodes of media sources,” mapping the embedded TC to frame IDs. For example, a 24 fps QuickTime tagged with a start timecode of 00:00:41:17 will be interpreted as beginning on frame 1001 (1001 ÷ 24 fps ≈ 41.71 s).

    Embedding a Start Timecode

    QuickTime uses a tmcd (timecode) track. You can bake in an SMPTE track via FFmpeg’s -timecode flag or via Compressor/encoder settings:

    1. Compute your start TC.
      • Desired start frame = 1001
      • Frame 1001 at 24 fps ⇒ 1001 ÷ 24 ≈ 41.708 s ⇒ TC 00:00:41:17
    2. FFmpeg example:
    ffmpeg -i input.mov \
      -c copy \
      -timecode 00:00:41:17 \
      output.mov
    

    This adds a timecode track beginning at 00:00:41:17, which Shotgun maps to frame 1001.

    Ensuring the Correct End Frame

    Shotgun infers the last frame from the movie’s duration. To end on frame 1064:

    • Frame count = 1064 – 1001 + 1 = 64 frames
    • Duration = 64 ÷ 24 fps ≈ 2.667 s

    FFmpeg trim example:

    ffmpeg -i input.mov \
      -c copy \
      -timecode 00:00:41:17 \
      -t 00:00:02.667 \
      output_trimmed.mov
    

    This results in a 64-frame clip (1001→1064) at 24 fps.