85 lines
1.4 KiB
Go
85 lines
1.4 KiB
Go
|
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)
|
||
|
}
|