feat(transcode): tonemap HDR sources to SDR (zscale-gated)
HDR (HDR10/HLG/Dolby Vision) transcoded to SDR came out washed-out and desaturated because the filter chain never tonemapped. buildHLSFFmpegArgsAt now inserts a zscale linearise -> hable tonemap -> BT.709 chain after the scale and before format=, but only when the source is HDR and the ffmpeg build has zscale (FFmpegSupportsZscale, cached). Builds without zimg keep the old behaviour (plays, just desaturated) instead of erroring. It's a CPU filter, valid for every encoder here: the decode hwaccel deliberately leaves frames in system memory (no -hwaccel_output_format), so zscale runs ahead of format=/hwupload exactly like the existing scale filter. Verified on a real 4K HDR10 file — vivid colour and deep blacks vs the washed-out baseline.
This commit is contained in:
parent
445da233c0
commit
e4373454ba
6 changed files with 211 additions and 5 deletions
|
|
@ -92,5 +92,8 @@ func buildTranscodeRuntime(ctx context.Context, cfg config.Config) engine.Transc
|
|||
VideoBitrate: cfg.Download.Transcode.VideoBitrate,
|
||||
AudioBitrate: cfg.Download.Transcode.AudioBitrate,
|
||||
MaxHeight: cfg.Download.Transcode.MaxHeight,
|
||||
// Tonemap HDR→SDR only when this ffmpeg build has zscale; otherwise the
|
||||
// filter would error and break playback, so HDR plays untonemapped.
|
||||
TonemapHDR: engine.FFmpegSupportsZscale(ffmpegPath),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue