Hide unused bitrate controls and improve VBR accuracy

Restructured bitrate controls to hide unused options based on mode,
and improved VBR encoding to use 2-pass for accurate bitrate targeting.

UI Improvements:
- Wrapped CRF, bitrate, and target size controls in hideable containers
- Only show relevant controls based on selected bitrate mode:
  * CRF mode: Show only CRF entry
  * CBR mode: Show only bitrate entry and presets
  * VBR mode: Show only bitrate entry and presets
  * Target Size mode: Show only target size controls
- Added descriptive hints for each mode explaining behavior
- Updated DVD mode to work with new container structure
- Made command preview update when bitrate settings change

Encoding Improvements:
- VBR now uses maxrate at 1.5x target for quality peaks
- VBR automatically enables 2-pass encoding for accuracy
- CBR remains strict (minrate=maxrate=target) for guaranteed bitrate
- Target Size mode continues to calculate exact bitrate from duration

This addresses runaway bitrate issues by:
1. Making it clear which mode is active
2. Hiding confusing unused controls
3. Ensuring VBR hits target average bitrate with 2-pass
4. Keeping CBR strict for exact constant bitrate

Pros of manual bitrate targeting:
- Predictable file sizes
- Meets strict size requirements
- Good for streaming with bandwidth constraints

Cons of manual bitrate targeting:
- Variable quality (simple scenes waste bits, complex scenes starve)
- Less efficient than CRF overall
- Requires 2-pass for VBR accuracy (slower)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Stu Leak 2025-12-18 10:18:25 -05:00
parent a7505a3de7
commit 714395764e

15
main.go
View File

@ -6227,19 +6227,20 @@ func buildConvertView(state *appState, src *videoSource) fyne.CanvasObject {
// Hide bitrate/target-size fields to declutter in locked DVD mode
bitratePresetSelect.Hide()
simpleBitrateSelect.Hide()
targetFileSizeEntry.Hide()
targetFileSizeSelect.Hide()
crfEntry.Hide()
crfContainer.Hide()
targetSizeContainer.Hide()
// Show bitrate controls since DVD uses CBR
bitrateContainer.Show()
dvdInfoLabel.SetText(fmt.Sprintf("%s\nLocked: resolution, frame rate, aspect, codec, pixel format, bitrate, and GPU toggles for DVD compliance.", dvdNotes))
} else {
dvdAspectBox.Hide()
// Re-show hidden controls
// Re-enable normal visibility control through updateEncodingControls
bitratePresetSelect.Show()
simpleBitrateSelect.Show()
targetFileSizeEntry.Show()
targetFileSizeSelect.Show()
crfEntry.Show()
if updateEncodingControls != nil {
updateEncodingControls()
}
}
}
updateDVDOptions()