package main import ( "bufio" "bytes" "fmt" "go/format" "log" "os" "os/exec" "strings" ) func must(err error) { if err == nil { return } log.Fatal(err) } func main() { cmd := exec.Command("ffmpeg", "-muxers") outputBytes, err := cmd.Output() must(err) code := `package formats var ( ` bufreader := bufio.NewScanner(bytes.NewReader(outputBytes)) /*File formats: D. = Demuxing supported .E = Muxing supported -- E 3g2 3GP2 (3GPP2 file format) E 3gp 3GP (3GPP file format)*/ waitingForList := true for bufreader.Scan() && waitingForList { text := bufreader.Text() if text == " --" { waitingForList = false } } for bufreader.Scan() { text := bufreader.Text() demuxingSupported := text[1] == 'D' muxingSupported := text[2] == 'E' text = text[4:] cols := strings.Fields(text) id := cols[0] name := strings.Join(cols[1:], " ") code += fmt.Sprintf(` // %s Format_%s = %q `, name, strings.ToUpper(id), id) if demuxingSupported { code += fmt.Sprintf(` // %s Demux_Format_%s = Format_%s `, name, strings.ToUpper(id), strings.ToUpper(id)) } if muxingSupported { code += fmt.Sprintf(` // %s Mux_Format_%s = Format_%s `, name, strings.ToUpper(id), strings.ToUpper(id)) } } code += ` ) ` codeBytes, err := format.Source([]byte(code)) must(err) f, err := os.Create("gen_formats.go") must(err) defer f.Close() _, err = f.Write(codeBytes) must(err) }