feat: FFmpeg GUI desktop application

Wails v2 + Vue3 + Go project with:
- Encode/Remux/Subtitle burn with hardware acceleration
- Real-time progress with ffmpeg stderr parsing (\r delimiter handling)
- Task queue with cancel support
- Per-task log viewer with color-coded output
- Custom frameless window with resize support
- Dark/light theme toggle
- Hardware encoder detection (NVENC/QSV/AMF)
This commit is contained in:
sansen
2026-07-29 02:17:57 +08:00
parent 51b768a2ba
commit 79f5fb8ac3
36 changed files with 5216 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
package task
import (
"ffmpeg-gui/internal/ffmpeg"
"time"
)
// Type represents the type of a task.
type Type string
const (
TypeRemux Type = "remux"
TypeEncode Type = "encode"
TypeBurn Type = "burn_subtitle"
)
// Status represents the current state of a task.
type Status string
const (
StatusPending Status = "pending"
StatusRunning Status = "running"
StatusDone Status = "done"
StatusFailed Status = "failed"
StatusCanceled Status = "canceled"
)
// Task represents a single ffmpeg job.
type Task struct {
ID string `json:"id"`
Type Type `json:"type"`
InputFile string `json:"inputFile"`
OutputFile string `json:"outputFile"`
Status Status `json:"status"`
Progress ffmpeg.Progress `json:"progress"`
Encode ffmpeg.EncodeSettings `json:"encode,omitempty"`
Remux ffmpeg.RemuxSettings `json:"remux,omitempty"`
Subtitle ffmpeg.SubtitleSettings `json:"subtitle,omitempty"`
Args []string `json:"-"`
Logs []string `json:"-"`
Error string `json:"error,omitempty"`
CreatedAt time.Time `json:"createdAt"`
CompletedAt *time.Time `json:"completedAt,omitempty"`
Cancel func() `json:"-"`
}