remotion-dev/remotion · error · Error

Unsupported AVCC version ${confVersion}

Error message

Unsupported AVCC version ${confVersion}

What it means

The VPCC (VP Codec Configuration) box parser only supports configuration version 1; any other version throws. Note the message says 'AVCC version' (copy-paste from an AVC parser) but the box is VPCC for VP8/VP9/AV1 codec configuration. The ISOBMFF VPCodecConfigurationBox spec currently defines version 1 only.

Source

Thrown at packages/media-parser/src/containers/iso-base-media/stsd/vpcc.ts:41

	profile: number;
	level: number;
	bitDepth: number;
}) => {
	return `${String(profile).padStart(2, '0')}.${String(level).padStart(2, '0')}.${String(bitDepth).padStart(2, '0')}`;
};

export const parseVpcc = ({
	data,
	size,
}: {
	data: BufferIterator;
	size: number;
}): VpccBox => {
	const box = data.startBox(size - 8);

	const confVersion = data.getUint8();
	if (confVersion !== 1) {
		throw new Error(`Unsupported AVCC version ${confVersion}`);
	}

	data.discard(3); // flags

	const profile = data.getUint8();
	const level = data.getUint8();
	data.startReadingBits();
	const bitDepth = data.getBits(4);
	const chromaSubsampling = data.getBits(3);
	const videoFullRangeFlag = data.getBits(1);
	const videoColorPrimaries = data.getBits(8);
	const videoTransferCharacteristics = data.getBits(8);
	const videoMatrixCoefficients = data.getBits(8);
	data.stopReadingBits();

	const codecInitializationDataSize = data.getUint16();
	const codecInitializationData = data.getSlice(codecInitializationDataSize);

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Confirm the codec with `ffprobe -show_streams input.mp4` — verify it is actually VP8/VP9/AV1.
  2. Re-mux: `ffmpeg -i input.mp4 -c copy remuxed.mp4` to normalize the vpcc box.
  3. If the file genuinely uses a newer vpcc version, report upstream for spec support.
  4. Transcode to H.264/AAC if VP codec support is not required: `ffmpeg -i input.mp4 -c:v libx264 out.mp4`.

Example fix

// before: vpcc with configurationVersion != 1
ffmpeg -i input.mp4 -c:v libx264 -c:a aac h264_version.mp4
// after: no vpcc box, parser proceeds with avcC
Defensive patterns

Strategy: validation

Validate before calling

// Check the codec is VP-family before parsing; confirm vpcc version
// ffprobe -show_entries stream=codec_name -select_streams v input.mp4
function isValidVpccVersion(v: number): boolean {
  return v === 1;
}

Type guard

function isVpccVersionOne(v: number): v is 1 {
  return v === 1;
}

Try / catch

try {
  await parseMedia({src, fields: {dimensions: true}});
} catch (err) {
  if (err instanceof Error && err.message.startsWith('Unsupported AVCC version') && /* vpcc context */) {
    // message says AVCC but box is VPCC; transcode to H.264 or re-mux
  } else throw err;
}

Prevention

When it happens

Trigger: parseVpcc reads a configurationVersion byte != 1 inside a vpcc box. Genuinely rare — could indicate a future spec revision, a corrupt box, or a non-VP file misidentified as VP.

Common situations: WebM-derived MP4 files with VP9/AV1, files produced by experimental encoders, or cursor desync from an earlier sample-entry mis-parse.

Related errors


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