remotion-dev/remotion · error

Unsupported track type ${strh.fccType}

Error message

Unsupported track type ${strh.fccType}

What it means

Thrown in getTracksFromAvi() after a stream is checked: the parser handles video streams (strf.type === 'strf-box-video') and audio streams (fccType === 'auds'). Any other RIFF stream type — 'txts' (text/subtitles), 'mids' (MIDI), 'ibus' (ibus), 'jpeg', etc. — reaches the else branch and throws.

Source

Thrown at packages/media-parser/src/containers/riff/get-tracks-from-avi.ts:136

	for (const box of boxes) {
		const strh = getStrhBox(box.children);
		if (!strh) {
			continue;
		}

		const {strf} = strh;

		if (strf.type === 'strf-box-video') {
			tracks.push(
				addAvcProfileToTrack(
					makeAviVideoTrack({strh, strf, index: i}),
					state.riff.getAvcProfile(),
				),
			);
		} else if (strh.fccType === 'auds') {
			tracks.push(makeAviAudioTrack({strf, index: i}));
		} else {
			throw new Error(`Unsupported track type ${strh.fccType}`);
		}

		i++;
	}

	return tracks;
};

export const hasAllTracksFromAvi = (state: ParserState): boolean => {
	try {
		const structure = state.structure.getRiffStructure();
		const numberOfTracks = getNumberOfTracks(structure);
		const tracks = getTracksFromAvi(structure, state);
		return (
			tracks.length === numberOfTracks &&
			!tracks.find(
				(t) => t.type === 'video' && t.codec === TO_BE_OVERRIDDEN_LATER,
			)

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Remux the AVI and drop non-AV streams: ffmpeg -i in.avi -map 0:v -map 0:a -c copy out.avi
  2. Transcode to a cleaner container: ffmpeg -i in.avi -map 0:v -map 0:a -c:v libx264 -c:a aac out.mp4 (MP4 is better supported).
  3. Pre-scan streams with ffprobe and reject AVIs that contain auxiliary stream types.

Example fix

// before
await parseMediaStream({src: 'multistream.avi'}); // has txts stream

// after: drop non-AV streams
// ffmpeg -i multistream.avi -map 0:v -map 0:a -c copy out.avi
await parseMediaStream({src: 'out.avi'});
Defensive patterns

Strategy: validation

Validate before calling

// Pre-check with ffprobe that only video/audio streams exist in the AVI.
// ffprobe -v error -show_entries stream=codec_type -of csv in.avi
// Expect only 'video' and 'audio' lines.

Type guard

type SupportedAviFccType = 'vids' | 'auds';
function isSupportedAviStreamType(t: string): t is SupportedAviFccType {
  return t === 'vids' || t === 'auds';
}

Try / catch

try {
  await parseMediaStream({src: 'in.avi'});
} catch (err) {
  if (err instanceof Error && err.message.startsWith('Unsupported track type')) {
    // remux dropping non-AV streams: ffmpeg -i in.avi -map 0:v -map 0:a -c copy out.avi
  } else throw err;
}

Prevention

When it happens

Trigger: An AVI containing a non-audio/non-video stream: embedded subtitles, MIDI, custom data streams, or vendor extension chunks mistakenly typed as a stream.

Common situations: AVIs with embedded subtitle streams (common in fansub/dual-audio releases); AVIs with attached chapter/text data; AVIs produced by capture tools that write auxiliary streams.

Related errors


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