85 lines
1.9 KiB
Go
85 lines
1.9 KiB
Go
package config
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type AppConfig struct {
|
|
Language string `json:"language"` // "ru" or "en"
|
|
FFmpegPath string `json:"ffmpegPath"`
|
|
FFprobePath string `json:"ffprobePath"`
|
|
DefaultEncoder string `json:"defaultEncoder"` // libx264, h264_nvenc, libx265, hevc_nvenc
|
|
DefaultHwDecode string `json:"defaultHwDecode"`
|
|
DefaultPreset string `json:"defaultPreset"`
|
|
DefaultCRF int `json:"defaultCrf"`
|
|
DefaultFPS int `json:"defaultFps"` // 0 = original, 60 = 60fps
|
|
DefaultTune string `json:"defaultTune"`
|
|
DefaultMergeAudio bool `json:"defaultMergeAudio"`
|
|
OutputSuffix string `json:"outputSuffix"`
|
|
}
|
|
|
|
func Default() AppConfig {
|
|
return AppConfig{
|
|
Language: "ru",
|
|
DefaultEncoder: "libx264",
|
|
DefaultHwDecode: "none",
|
|
DefaultPreset: "slow",
|
|
DefaultCRF: 20,
|
|
DefaultFPS: 60,
|
|
DefaultTune: "film",
|
|
DefaultMergeAudio: true,
|
|
OutputSuffix: "_converted",
|
|
}
|
|
}
|
|
|
|
func ConfigPath() (string, error) {
|
|
dir, err := os.UserConfigDir()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return filepath.Join(dir, "ConvertGUI", "config.json"), nil
|
|
}
|
|
|
|
func Load() AppConfig {
|
|
cfg := Default()
|
|
path, err := ConfigPath()
|
|
if err != nil {
|
|
return cfg
|
|
}
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return cfg
|
|
}
|
|
_ = json.Unmarshal(data, &cfg)
|
|
if cfg.Language == "" {
|
|
cfg.Language = "ru"
|
|
}
|
|
if cfg.DefaultEncoder == "" {
|
|
cfg.DefaultEncoder = "libx264"
|
|
}
|
|
if cfg.DefaultPreset == "" {
|
|
cfg.DefaultPreset = "slow"
|
|
}
|
|
if cfg.DefaultCRF < 0 || cfg.DefaultCRF > 51 {
|
|
cfg.DefaultCRF = 20
|
|
}
|
|
return cfg
|
|
}
|
|
|
|
func Save(cfg AppConfig) error {
|
|
path, err := ConfigPath()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
|
|
return err
|
|
}
|
|
data, err := json.MarshalIndent(cfg, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return os.WriteFile(path, data, 0o644)
|
|
}
|