remotion-dev/remotion · error · Error

Expected av1 private data to be version 1, got ${version}

Error message

Expected av1 private data to be version 1, got ${version}

What it means

After the leading marker bit, parseAv1PrivateData reads the next 7 bits as the AV1 codec-private version, which the spec fixes at 1. Any other version is rejected. The thrown value is the parsed version so you can see what was found.

Source

Thrown at packages/media-parser/src/containers/webm/av1-codec-private.ts:22

export const parseAv1PrivateData = (
	data: Uint8Array,
	colrAtom: ColorParameterBox | null,
) => {
	const iterator = getArrayBufferIterator({
		initialData: data,
		maxBytes: data.byteLength,
		logLevel: 'error',
	});
	iterator.startReadingBits();
	if (iterator.getBits(1) !== 1) {
		iterator.destroy();
		throw new Error('Expected av1 private data to be version 1');
	}

	const version = iterator.getBits(7);
	if (version !== 1) {
		iterator.destroy();
		throw new Error(
			`Expected av1 private data to be version 1, got ${version}`,
		);
	}

	let str = 'av01.';

	// https://aomediacodec.github.io/av1-isobmff/#codecsparam

	const seqProfile = iterator.getBits(3);
	// Profile
	str += seqProfile;
	str += '.';

	const seq_level_idx = iterator.getBits(5);
	const seq_tier_0 = iterator.getBits(1);
	// Level
	// The level parameter value SHALL equal the first level value indicated by seq_level_idx in the Sequence Header OBU
	str += String(seq_level_idx).padStart(2, '0');

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Re-mux with a current ffmpeg/av1 toolchain.
  2. Validate headers with ffprobe.
  3. Use Mediabunny; try/catch fallback.

Example fix

# re-mux with current ffmpeg
ffmpeg -i in.webm -c copy out.webm

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

Strategy: try-catch

Validate before calling

// ffprobe validates AV1 codec-private headers
// ffprobe -v error -show_streams in.mkv

Try / catch

try {
  await parseMedia({ src: 'in.mkv' });
} catch (err) {
  if (err instanceof Error && /av1 private data to be version/i.test(err.message)) {
    // re-mux with current toolchain
  } else throw err;
}

Prevention

When it happens

Trigger: An AV1 track whose CodecPrivate version field (bits 1-7) is not 1: a future/draft codec-private version, a corrupted header, or a non-conformant muxer.

Common situations: Newer AV1 packaging draft; corrupted bytes; older or non-standard muxers.

Related errors


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