package config import ( "flag" "log" "os" "encoding/json" ) type VideoOpts struct { Format string Scale string Resize bool VideoBitrate int VideoCodec string AudioBitrate int AudioCodec string Speed string CleanFilename bool CRF int FPS int Tune string Input string OutDir string Test int TestStart int Passes int Extras []string } type Settings struct { Debug int Progress bool ConfigPath string Encodings []VideoOpts } func ParseFlags(c *Settings) { flag.IntVar(&c.Debug, "debug", 0, "1=print the ffmpeg command, 2=and its stderr output") flag.BoolVar(&c.Progress, "progress", false, "Show percent progress. Not accurate (thanks ffmpeg)") flag.StringVar(&c.ConfigPath, "config", "config.json", "config.json to load") flag.Parse() } func Load() Settings { var config Settings ParseFlags(&config) data, err := os.ReadFile(config.ConfigPath) if err != nil { log.Fatalf("error reading config %s: %v", config.ConfigPath, err); } err = json.Unmarshal(data, &config.Encodings) if err != nil { log.Fatalf("error loading %s: %v", config.ConfigPath, err) } return config }