{"record":{"id":"884fbe39dad1a89a","repo":"remotion-dev/remotion","slug":"no-video-track-found-for-src","errorCode":null,"errorMessage":"No video track found for ${src}","messagePattern":"No video track found for (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/media/src/video-extraction/extract-frame.ts","lineNumber":65,"sourceCode":"}: ExtractFrameParams): Promise<ExtractFrameResult> => {\n\tconst sink = await mediaCache.sinkManager.getSink(\n\t\tsrc,\n\t\tlogLevel,\n\t\tcredentials,\n\t\trequestInit,\n\t);\n\n\tconst [video, mediaDurationInSecondsRaw] = await Promise.all([\n\t\tsink.getVideo(),\n\t\tloop ? sink.getDuration() : Promise.resolve(null),\n\t]);\n\n\tconst mediaDurationInSeconds: number | null = loop\n\t\t? mediaDurationInSecondsRaw\n\t\t: null;\n\n\tif (video === 'no-video-track') {\n\t\tthrow new Error(`No video track found for ${src}`);\n\t}\n\n\tif (video === 'cannot-decode') {\n\t\treturn {type: 'cannot-decode', durationInSeconds: mediaDurationInSeconds};\n\t}\n\n\tif (video === 'cannot-decode-prores') {\n\t\treturn {\n\t\t\ttype: 'cannot-decode-prores',\n\t\t\tdurationInSeconds: mediaDurationInSeconds,\n\t\t};\n\t}\n\n\tif (video === 'unknown-container-format') {\n\t\treturn {type: 'unknown-container-format'};\n\t}\n\n\tif (video === 'network-error') {","sourceCodeStart":47,"sourceCodeEnd":83,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/media/src/video-extraction/extract-frame.ts#L47-L83","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"# before: audio-only file used as video\n<Video src={staticFile('soundtrack.mp3')} />\n\n# after\n<Video src={staticFile('clip-with-video.mp4')} />","handlingStrategy":"validation","validationCode":"null","typeGuard":null,"tryCatchPattern":"// Validate with ffprobe upstream:\n// ffprobe -select_streams v -show_entries stream=codec_type file.mp4\n// Then only pass confirmed video files to <Video>.","preventionTips":["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."],"tags":["video","video-track","media","container"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}