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
- Confirm the codec with `ffprobe -show_streams input.mp4` — verify it is actually VP8/VP9/AV1.
- Re-mux: `ffmpeg -i input.mp4 -c copy remuxed.mp4` to normalize the vpcc box.
- If the file genuinely uses a newer vpcc version, report upstream for spec support.
- 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
- Transcode VP8/VP9/AV1 files to H.264 if VP support is not required.
- Be aware the error message says 'AVCC' but the box is VPCC — disambiguate by context.
- Validate VP-family files with mp4dump before parsing.
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
- Unsupported STSD version ${version}
- Unsupported STSD version ${version}
- Unsupported STSD version ${version}
- Expected stsz box in trak box
- Expected stco box in trak box
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/f8d4bd5939c81b95.
Report an issue: GitHub.