remotion-dev/remotion · error · Error

Expected av1 private data to be version 1, got

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.

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.

Appendix: 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)