remotion-dev/remotion · error

No video track found for ${src}

Error message

No video track found for ${src}

What it means

Thrown by extractFrame in @remotion/media during frame extraction when the media sink reports 'no-video-track'. This means the container parsed successfully but contains no decodable video stream (audio-only file, or a container with zero video tracks). Frame extraction cannot proceed without a video track.

Source

Thrown at packages/media/src/video-extraction/extract-frame.ts:65

}: ExtractFrameParams): Promise<ExtractFrameResult> => {
	const sink = await mediaCache.sinkManager.getSink(
		src,
		logLevel,
		credentials,
		requestInit,
	);

	const [video, mediaDurationInSecondsRaw] = await Promise.all([
		sink.getVideo(),
		loop ? sink.getDuration() : Promise.resolve(null),
	]);

	const mediaDurationInSeconds: number | null = loop
		? mediaDurationInSecondsRaw
		: null;

	if (video === 'no-video-track') {
		throw new Error(`No video track found for ${src}`);
	}

	if (video === 'cannot-decode') {
		return {type: 'cannot-decode', durationInSeconds: mediaDurationInSeconds};
	}

	if (video === 'cannot-decode-prores') {
		return {
			type: 'cannot-decode-prores',
			durationInSeconds: mediaDurationInSeconds,
		};
	}

	if (video === 'unknown-container-format') {
		return {type: 'unknown-container-format'};
	}

	if (video === 'network-error') {

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Confirm the source actually contains a video track (check with ffprobe: `ffprobe -select_streams v file`).
  2. Use the correct video file, or switch to <Audio> if you only need audio.
  3. Re-encode/repair the file if the video track is present but unreadable.

Example fix

# before: audio-only file used as video
<Video src={staticFile('soundtrack.mp3')} />

# after
<Video src={staticFile('clip-with-video.mp4')} />
Defensive patterns

Strategy: validation

Validate before calling

null

Try / catch

// Validate with ffprobe upstream:
// ffprobe -select_streams v -show_entries stream=codec_type file.mp4
// Then only pass confirmed video files to <Video>.

Prevention

When it happens

Trigger: Pointing <OffthreadVideo>/<Video> at an audio-only file (MP3, WAV, or MP4 with only an audio track), or a corrupt/truncated file whose video track is not detectable. The sink.getVideo() call returns the 'no-video-track' sentinel.

Common situations: Accidentally using an audio asset path for a <Video>, a mislabeled file, or a screen recording that failed to capture a video stream. Common when assets are swapped or paths are dynamic.

Related errors


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