Simple GUI toolset for FFmpeg
Advanced Mode Encoder Settings: - Added full video encoding controls: codec (H.264/H.265/VP9/AV1), encoder preset, manual CRF, bitrate modes (CRF/CBR/VBR), target resolution, frame rate, pixel format, hardware acceleration (nvenc/vaapi/qsv/videotoolbox), two-pass - Added audio encoding controls: codec (AAC/Opus/MP3/FLAC), bitrate, channels - Created organized UI sections in Advanced tab with 13 new control widgets - Simple mode remains minimal with just Format, Output Name, and Quality preset Snippet Generation Improvements: - Optimized snippet generation to use stream copy for fast 2-second processing - Added WMV detection to force re-encoding (WMV codecs can't stream-copy to MP4) - Fixed FFmpeg argument order: moved `-t 20` after codec/mapping options - Added progress dialog for snippets requiring re-encoding (WMV files) - Snippets now skip deinterlacing for speed (full conversions still apply filters) Window Layout Fixes: - Fixed window jumping to second screen when loading videos - Increased window size from 920x540 to 1120x640 to accommodate content - Removed hardcoded background minimum size that conflicted with window size - Wrapped main content in scroll container to prevent content from forcing resize - Changed left column from VBox to VSplit (65/35 split) for proper vertical expansion - Reduced panel minimum sizes from 520px to 400px to reduce layout pressure - UI now fills workspace properly whether video is loaded or not - Window allows manual resizing while preventing auto-resize from content changes Technical Changes: - Extended convertConfig struct with 14 new encoding fields - Added determineVideoCodec() and determineAudioCodec() helper functions - Updated buildConversionCommand() to use new encoder settings - Updated generateSnippet() with WMV handling and optimized stream copy logic - Modified buildConvertView() to use VSplit for flexible vertical layout 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| assets/logo | ||
| docs | ||
| internal | ||
| .gitignore | ||
| DONE.md | ||
| go.mod | ||
| go.sum | ||
| main.go | ||
| README.md | ||
| TODO.md | ||
VideoTools Prototype
Requirements
- Go 1.21+
- Fyne 2.x (pulled automatically via
go mod tidy) - FFmpeg (not yet invoked, but required for future transcoding)
Running
Launch the GUI:
go run .
Run a module via CLI:
go run . convert input.avi output.mp4
go run . combine file1.mov file2.wav / final.mp4
go run . logs
Add -debug or VIDEOTOOLS_DEBUG=1 for verbose stderr logs.
Logs
- All actions log to
videotools.log(override withVIDEOTOOLS_LOG_FILE=/path/to/log). - CLI command
videotools logs(orgo run . logs) prints the last 200 lines. - Each entry is tagged (e.g.
[UI],[CLI],[FFMPEG]) so issues are easy to trace.
Notes
- GUI requires a running display server (X11/Wayland). In headless shells it will log
[UI] DISPLAY environment variable is empty. - Convert screen accepts drag-and-drop or the "Open File…" button; ffprobe metadata populates instantly, the preview box animates extracted frames with simple play/pause + slider controls (and lets you grab cover art), and the "Generate Snippet" button produces a 20-second midpoint clip for quick quality checks (requires ffmpeg in
PATH). - Simple mode now applies smart inverse telecine by default—automatically skipping it on progressive footage—and lets you rename the target file before launching a convert job.
- Other module handlers are placeholders; hook them to actual FFmpeg calls next.