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
- Confirm the source actually contains a video track (check with ffprobe: `ffprobe -select_streams v file`).
- Use the correct video file, or switch to <Audio> if you only need audio.
- 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
- Probe every source with ffprobe to confirm a video stream exists before rendering.
- Keep video and audio asset paths strictly separated in your config.
- Reject audio-only files at the video-input boundary.
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
- No src passed
- The media ${ref.src} cannot be seeked. This could be one of
- No `src` was passed to <Video>.
- Live streams are not currently supported by Remotion. Sorry!
- Streams with UNIX timestamps are not currently supported by
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/884fbe39dad1a89a.
Report an issue: GitHub.