remotion-dev/remotion · error
Expected length of ${segmentId} to be greater or equal 0
Error message
Expected length of ${segmentId} to be greater or equal 0 What it means
parseSegment throws if the decoded size VInt is negative. VInts in EBML are unsigned, so a negative length indicates either a decoding bug in getVint (sign mishandling) or corrupted size bytes that produced an out-of-range integer. The segmentId is interpolated for diagnosis.
Source
Thrown at packages/media-parser/src/containers/webm/segments.ts:146
};
const parseSegment = async ({
segmentId,
length,
iterator,
headerReadSoFar,
statesForProcessing,
logLevel,
}: {
segmentId: string;
length: number;
iterator: BufferIterator;
headerReadSoFar: number;
statesForProcessing: WebmRequiredStatesForProcessing | null;
logLevel: MediaParserLogLevel;
}): Promise<MatroskaSegment | null> => {
if (length < 0) {
throw new Error(`Expected length of ${segmentId} to be greater or equal 0`);
}
iterator.counter.decrement(headerReadSoFar);
const offset = iterator.counter.getOffset();
const ebml = await parseEbml(iterator, statesForProcessing, logLevel);
if (ebml === null) {
return null;
}
if (!statesForProcessing) {
return ebml;
}
const remapped = await postprocessEbml({
offset,
ebml,
statesForProcessing,View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Re-download or re-mux the source ('ffmpeg -i in.mkv -c copy out.mkv').
- If reproducible only after an upgrade, pin/roll back @remotion/media-parser and report a VInt regression.
- Try Mediabunny.
Defensive patterns
Strategy: try-catch
Try / catch
try {
await parseMedia({src: 'in.mkv'});
} catch (err) {
if (err instanceof Error && /Expected length of .* to be greater or equal 0/.test(err.message)) {
throw new Error('Negative EBML size decoded; file is corrupt or reader returned bad bytes.', {cause: err});
}
throw err;
} Prevention
- Re-download or re-mux sources that trigger size errors.
- If reproducible only after a version bump, roll back @remotion/media-parser and report a VInt regression.
- Verify file integrity (checksum) before parsing.
When it happens
Trigger: Corrupted size octets in an EBML element header that decode to a value interpreted as negative by getVint, or a regression in VInt decoding for large widths. Reachable on any element parsed via parseSegment once the size is negative.
Common situations: Bit-flipped size bytes in storage/transfer, or files truncated so a size VInt spans EOF and yields garbage.
Related errors
- Offset ${offsetNow - startOffset} is larger than the length
- Expected track entry segment
- Not enough data to get track number, should not happen
- Could not find sample rate or number of channels
- Not enough bytes left to parse EBML - this should not happen
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/c3daad61f1c2e97e.
Report an issue: GitHub.