remotion-dev/remotion · error · Error

Streams with UNIX timestamps are not currently supported by

Error message

Streams with UNIX timestamps are not currently supported by Remotion. Sorry!

What it means

Thrown by use-probe when any input track reports isRelativeToUnixEpoch() === true. Remotion operates on media-relative timestamps; UNIX-epoch timestamps (e.g. from some camera captures or MPEG-TS) break duration/seek math, so probing refuses them.

Source

Thrown at packages/convert/app/components/use-probe.ts:77

		const run = async () => {
			input.getFormat().then((format) => setContainer(format));
			input.source.getSize().then((s) => setSize(s));
			getVideoFrameRate(input).then(setFrameRate);
			getDurationOrCompute(input).then((duration) =>
				setDurationInSeconds(duration),
			);
			input.getMetadataTags().then((tags) => setMetadata(tags));

			const trx = await input.getTracks();
			for (const track of trx) {
				if (await track.isLive()) {
					throw new Error(
						'Live streams are not currently supported by Remotion. Sorry!',
					);
				}

				if (await track.isRelativeToUnixEpoch()) {
					throw new Error(
						'Streams with UNIX timestamps are not currently supported by Remotion. Sorry!',
					);
				}
			}

			let hasAudioTrack = false;
			let hasVideoTrack = false;
			for (const track of trx) {
				if (track.isVideoTrack()) {
					hasVideoTrack = true;
					const codec = await track.getCodec();
					setVideoCodec(codec);
					const [displayWidth, displayHeight, trackRotation] =
						await Promise.all([
							track.getDisplayWidth(),
							track.getDisplayHeight(),
							track.getRotation(),
						]);

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Remux the source to reset timestamps to zero-based media time: `ffmpeg -i in.ts -c copy -avoid_negative_ts make_zero out.mp4`.
  2. Re-encode the source so PTS is rewritten relative to the stream start.
  3. Reject epoch-relative inputs in the UI before conversion.

Example fix

// before: loading an MPEG-TS with epoch PTS throws

// after: normalize timestamps first
// $ ffmpeg -i in.ts -c copy -avoid_negative_ts make_zero -f mp4 out.mp4
Defensive patterns

Strategy: validation

Validate before calling

const tracks = await input.getTracks();
const epochFlags = await Promise.all(tracks.map((t) => t.isRelativeToUnixEpoch()));
if (epochFlags.some(Boolean)) {
  showError('This source uses UNIX-epoch timestamps. Remux with ffmpeg -avoid_negative_ts make_zero.');
  return;
}

Type guard

null

Try / catch

try { await probe(input); }
catch (e) {
  if (e.message.includes('UNIX timestamps')) suggestRemux();
  else throw e;
}

Prevention

When it happens

Trigger: Loading MPEG-TS or container segments whose PTS reference is the UNIX epoch rather than zero-based media time. The probe iterates every track and throws on the first epoch-relative one.

Common situations: Screen captures from certain tools, DASH segments with wall-clock timing, or remuxed broadcast TS files that preserve epoch PTS; common with hardware encoders and some surveillance/capture pipelines.

Related errors


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