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 Preset 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 Force 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.Force, "force", false, "Force the render even if the file exists.") 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 }