{"record":{"id":"07182b382be46e59","repo":"remotion-dev/remotion","slug":"streams-with-unix-timestamps-are-not-currently-sup-07182b","errorCode":null,"errorMessage":"Streams with UNIX timestamps are not currently supported by Remotion. Sorry!","messagePattern":"Streams with UNIX timestamps are not currently supported by Remotion\\. Sorry!","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/convert/app/lib/use-thumbnail.ts","lineNumber":42,"sourceCode":"\n\tconst execute = useCallback(() => {\n\t\tconst getDuration = async () => {\n\t\t\tconst duration = await input.computeDuration();\n\t\t\twaveform.setDuration(duration);\n\t\t};\n\n\t\tconst setVideoTrack = async () => {\n\t\t\tconst videoTrack = await input.getPrimaryVideoTrack();\n\n\t\t\tif (videoTrack) {\n\t\t\t\tif (await videoTrack.isLive()) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Live streams are not currently supported by Remotion. Sorry!',\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (await videoTrack.isRelativeToUnixEpoch()) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Streams with UNIX timestamps are not currently supported by Remotion. Sorry!',\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst videoSink = new VideoSampleSink(videoTrack);\n\t\t\t\tlet samples = 0;\n\t\t\t\tconst iterator = videoSink.samples();\n\t\t\t\tfor await (const sample of iterator) {\n\t\t\t\t\tsamples++;\n\t\t\t\t\tonVideoThumbnail(sample.toVideoFrame());\n\t\t\t\t\tsample.close();\n\n\t\t\t\t\tif (samples === 60) {\n\t\t\t\t\t\titerator.return().catch(() => undefined);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n","sourceCodeStart":24,"sourceCodeEnd":60,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/convert/app/lib/use-thumbnail.ts#L24-L60","documentation":"Thrown by use-thumbnail's setVideoTrack when the primary video track reports isRelativeToUnixEpoch() === true. Thumbnail sampling relies on media-relative timestamps; UNIX-epoch timestamps break the seek/sample math, so the hook refuses the input.","triggerScenarios":"Loading MPEG-TS or DASH segments whose PTS reference is the UNIX epoch rather than zero-based media time, in the thumbnail path. Same root cause as error 191 but in the thumbnail hook.","commonSituations":"Hardware-encoder captures, broadcast MPEG-TS files, or DASH with wall-clock timing fed into the Convert UI for thumbnails.","solutions":["Remux to reset timestamps: `ffmpeg -i in.ts -c copy -avoid_negative_ts make_zero out.mp4`.","Re-encode the source to rewrite PTS relative to stream start.","Skip thumbnail generation for epoch-relative inputs."],"exampleFix":"// before\nif (await videoTrack.isRelativeToUnixEpoch()) throw ...;\n\n// after (normalize the source upstream)\n// $ ffmpeg -i in.ts -c copy -avoid_negative_ts make_zero -f mp4 out.mp4\n// then load out.mp4 into Convert","handlingStrategy":"validation","validationCode":"const videoTrack = await input.getPrimaryVideoTrack();\nif (videoTrack && await videoTrack.isRelativeToUnixEpoch()) {\n  suggestRemux('ffmpeg -i in.ts -c copy -avoid_negative_ts make_zero out.mp4');\n  return;\n}","typeGuard":"null","tryCatchPattern":"try { await setVideoTrack(); }\ncatch (e) {\n  if (e.message.includes('UNIX timestamps')) suggestRemux();\n  else throw e;\n}","preventionTips":["Remux MPEG-TS/DASH sources to zero-based PTS before importing.","Detect epoch-relative tracks early and surface a remux hint.","Use MP4 outputs from capture hardware when possible."],"tags":["typescript","convert","thumbnail","timestamps","unix-epoch","mpegts"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}