From a video upload to adaptive HLS, a poster and a scrub sheet.
From upload to playback
One call creates aligned HLS renditions, a representative poster and a filmstrip scrub sheet. The same output fits every seamplayer adapter.
TypeScript
import { local, transcode, toSeamPlayer } from "seamtranscode";
const result = await transcode({ input: "uploads/film.mp4", output: "videos/film", storage: local({ root: "public", publicUrl: "/" }) });
const media = toSeamPlayer(result);
// <SeamPlayer {...media} title="Film" />Useful defaults
360p, 720p and 1080p short-side renditions, never above the source; rotation-aware dimensions; aligned six-second segments; capped and measured peak bitrates. Poster and scrub metadata are included. The library defaults to libx264 and the CLI defaults to hardware auto detection.
Playable while the job finishes
The smallest rendition completes first. Progress is a fraction from 0 to 1, with an ETA when available. Preview failures become warnings; AbortSignal cancels work and cleans temporary files.
TypeScript
await transcode({ input: "film.mp4", output: "out/film", encoder: "auto", onProgress: ({ progress, eta }) => console.log(progress, eta), onRendition: (r) => console.log(r.playlist) });