remotion-dev/remotion · error · Error

No tracks segment

Error message

No tracks segment

What it means

After locating the main Segment, getTracksFromMatroska looks inside it for a Tracks element (ID 0x1654AE6B). If getTracksSegment returns null it throws 'No tracks segment' — the Segment exists but has no Tracks child, so no tracks can be resolved. This indicates a truncated/malformed Matroska or a stream parsed before Tracks arrived.

Source

Thrown at packages/media-parser/src/containers/webm/get-ready-tracks.ts:32

};

export const getTracksFromMatroska = ({
	structureState,
	webmState,
}: {
	structureState: StructureState;
	webmState: WebmState;
}): ResolvedAndUnresolvedTracks => {
	const structure = structureState.getMatroskaStructure();
	const mainSegment = getMainSegment(structure.boxes);
	if (!mainSegment) {
		throw new Error('No main segment');
	}

	const tracksSegment = getTracksSegment(mainSegment);

	if (!tracksSegment) {
		throw new Error('No tracks segment');
	}

	const resolvedTracks: MediaParserTrack[] = [];
	const missingInfo: MediaParserTrack[] = [];

	for (const trackEntrySegment of tracksSegment.value) {
		if (trackEntrySegment.type === 'Crc32') {
			continue;
		}

		if (trackEntrySegment.type !== 'TrackEntry') {
			throw new Error('Expected track entry segment');
		}

		const track = getTrack({
			track: trackEntrySegment,
			timescale: webmState.getTimescale(),
		});

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Check with ffprobe that tracks are present.
  2. Re-mux: ffmpeg -i in.mkv -c copy out.mkv.
  3. Use Mediabunny; try/catch parseMedia().

Example fix

# validate tracks exist, then re-mux
ffprobe -v error -show_streams in.mkv && ffmpeg -i in.mkv -c copy out.mkv

await parseMedia({ src: 'out.mkv' });
Defensive patterns

Strategy: try-catch

Validate before calling

// confirm tracks exist before parsing
// ffprobe -v error -show_streams in.mkv   (prints streams => Tracks element present)

Try / catch

try {
  await parseMedia({ src: 'in.mkv' });
} catch (err) {
  if (err instanceof Error && /No tracks segment/.test(err.message)) {
    // Segment has no Tracks — re-mux or skip
  } else throw err;
}

Prevention

When it happens

Trigger: parseMedia() on a Matroska/WebM whose Segment lacks a Tracks element: truncated file (cut before Tracks), a muxer that wrote Segment info but no Tracks, or a live stream parsed too early.

Common situations: Truncated download; incomplete mux; live stream read before Tracks; corrupted EBML tree.

Related errors


AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12). Data as JSON: /api/errors/31eb7e37d2f01c87. Report an issue: GitHub.