feat: add Plex-style adaptive transcoding with bitrate limits and hardware fallback

This commit is contained in:
blomios
2026-09-29 23:31:05 +02:00
parent 2912384257
commit d018ac078c
7 changed files with 258 additions and 66 deletions

View File

@ -539,7 +539,7 @@
<h3>Encoder Settings</h3>
<div class="setting-item">
<div class="setting-info" style="flex: 1;">
<span class="setting-label">Hardware Encoder</span>
<span class="setting-label">Transcoding Device</span>
<span class="setting-hint">Select which GPU encoder to use for transcoding. Auto will use the best
available.</span>
</div>
@ -554,7 +554,7 @@
</div>
<div class="setting-item">
<div class="setting-info" style="flex: 1;">
<span class="setting-label">Max Resolution</span>
<span class="setting-label">Maximum Transcoded Resolution</span>
<span class="setting-hint">Limit transcoded output resolution. Lower = faster, more
compatible.</span>
</div>
@ -567,7 +567,7 @@
</div>
<div class="setting-item">
<div class="setting-info" style="flex: 1;">
<span class="setting-label">Quality Preset</span>
<span class="setting-label">Encoding Quality</span>
<span class="setting-hint">Higher quality uses more bandwidth and CPU/GPU.</span>
</div>
<select id="setting-quality" class="source-select" style="width: auto; min-width: 200px;">
@ -578,7 +578,7 @@
</div>
<div class="setting-item">
<div class="setting-info" style="flex: 1;">
<span class="setting-label">Audio Mix Preset</span>
<span class="setting-label">Audio Downmix</span>
<span class="setting-hint">How multi-channel audio (5.1/7.1) is mixed down to stereo for browser
playback.</span>
</div>
@ -600,14 +600,14 @@
<span class="toggle-slider"></span>
</label>
<div class="setting-info">
<span class="setting-label">Enable Upscaling</span>
<span class="setting-label">Upscale Low-Resolution Video</span>
<span class="setting-hint">Upscale lower-resolution content to a higher resolution during
transcoding.</span>
</div>
</div>
<div class="setting-item" id="upscale-method-container" style="display: none;">
<div class="setting-info" style="flex: 1;">
<span class="setting-label">Upscale Method</span>
<span class="setting-label">Upscaling Method</span>
<span class="setting-hint">Hardware is faster; Software (Lanczos) is higher quality.</span>
</div>
<select id="setting-upscale-method" class="source-select" style="width: auto; min-width: 200px;">
@ -617,7 +617,7 @@
</div>
<div class="setting-item" id="upscale-target-container" style="display: none;">
<div class="setting-info" style="flex: 1;">
<span class="setting-label">Upscale Target</span>
<span class="setting-label">Target Resolution</span>
<span class="setting-hint">Target resolution for upscaled output.</span>
</div>
<select id="setting-upscale-target" class="source-select" style="width: auto; min-width: 200px;">
@ -629,25 +629,43 @@
</div>
<div class="settings-section">
<h3>Stream Processing</h3>
<h3>Automatic Playback</h3>
<div class="setting-item">
<label class="setting-toggle">
<input type="checkbox" id="setting-auto-transcode-tc">
<span class="toggle-slider"></span>
</label>
<div class="setting-info">
<span class="setting-label">Auto Transcode (Smart)</span>
<span class="setting-label">Choose Playback Method Automatically</span>
<span class="setting-hint">Automatically detect stream codecs and only transcode/remux when needed.
Adds ~1-3s probe delay on first play.</span>
</div>
</div>
<div class="setting-item">
<div class="setting-info" style="flex: 1;">
<span class="setting-label">Maximum Streaming Bandwidth</span>
<span class="setting-hint">The bandwidth limit is evaluated when playback starts. Quality does not change automatically during playback.</span>
</div>
<select id="setting-max-direct-bitrate" class="source-select" style="width: auto; min-width: 200px;">
<option value="0">No Limit</option>
<option value="20000">20 Mbps</option>
<option value="12000">12 Mbps</option>
<option value="8000">8 Mbps</option>
<option value="4000">4 Mbps</option>
<option value="2000">2 Mbps</option>
</select>
</div>
</div>
<div class="settings-section">
<h3>Stream Processing</h3>
<div class="setting-item">
<label class="setting-toggle">
<input type="checkbox" id="setting-force-transcode-tc">
<span class="toggle-slider"></span>
</label>
<div class="setting-info">
<span class="setting-label">Force Audio Transcode</span>
<span class="setting-label">Always Convert Audio</span>
<span class="setting-hint">Transcode audio to AAC for browser compatibility. Enable if you get video
but no audio (fixes Dolby/AC3/EAC3).</span>
</div>
@ -658,7 +676,7 @@
<span class="toggle-slider"></span>
</label>
<div class="setting-info">
<span class="setting-label">Force Video Transcode</span>
<span class="setting-label">Always Convert Video</span>
<span class="setting-hint">Force full video transcoding (burn-in subtitles, incompatible video).
Uses
HW encoder.</span>
@ -670,14 +688,14 @@
<span class="toggle-slider"></span>
</label>
<div class="setting-info">
<span class="setting-label">Force Remux</span>
<span class="setting-label">Always Remux Streams</span>
<span class="setting-hint">Remux streams to MP4 container. Enable for raw .ts streams from IPTV
middleware like m3u-editor or dispatcharr.</span>
</div>
</div>
<div class="setting-item">
<div class="setting-info" style="flex: 1;">
<span class="setting-label">Stream Output Format</span>
<span class="setting-label">Stream Container</span>
<span class="setting-hint">Container format for Xtream streams. Try TS if you experience buffering
issues.</span>
</div>
@ -686,6 +704,15 @@
<option value="ts">MPEG-TS (ts) - Better buffer</option>
</select>
</div>
<div class="setting-item">
<label class="setting-toggle">
<input type="checkbox" id="setting-allow-hardware-fallback">
<span class="toggle-slider"></span>
</label>
<div class="setting-info">
<span class="setting-label">Use CPU if hardware transcoding fails</span>
</div>
</div>
</div>
<div class="settings-section">
@ -1125,4 +1152,4 @@
</script>
</body>
</html>
</html>