package main import ( "context" "fmt" "log" "os" "regexp" "strconv" "time" "gopkg.in/vansante/go-ffprobe.v2" ) func string2int(s string) int { i, err := strconv.Atoi(s) if err != nil { i = 0 } return i } func main() { var film = os.Args[1] ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Minute) defer cancelFn() data, err := ffprobe.ProbeURL(ctx, film) if err != nil { log.Panicf("Error getting data: %v", err) } //fmt.Printf("%s\n", data.Streams[0].CodecType) //fmt.Printf("%s\n", data.FirstSubtitleStream()) for i, s := range data.Streams { codectype := s.CodecType sprache, _ := s.TagList.GetString("language") fmt.Printf("Spur: %v, Typ: %v, Sprache: %v\n", i, codectype, sprache) if "video" == s.CodecType { fmt.Printf("Spur: %v, Typ: %v, Width: %v\n", i, codectype, data.Streams[i].Width) fmt.Printf("Spur: %v, Typ: %v, Height: %v\n", i, codectype, data.Streams[i].Height) fmt.Printf("Spur: %v, Typ: %v, PAR: %v\n", i, codectype, data.Streams[i].SampleAspectRatio) fmt.Printf("Spur: %v, Typ: %v, DAR: %v\n", i, codectype, data.Streams[i].DisplayAspectRatio) fmt.Printf("Spur: %v, Typ: %v, Level: %v\n", i, codectype, data.Streams[i].Level) fmt.Printf("Spur: %v, Typ: %v, FieldOrder: %v\n", i, codectype, data.Streams[i].FieldOrder) fmt.Printf("Spur: %v, Typ: %v, FPS: %v\n", i, codectype, data.Streams[i].RFrameRate) fmt.Printf("Spur: %v, Typ: %v, avg FSP: %v\n", i, codectype, data.Streams[i].AvgFrameRate) drehung := 0 rotation, _ := s.TagList.GetString("Rotate") drehlength := len([]rune(rotation)) if drehlength > 0 { drehung = string2int(rotation) } fmt.Printf("Spur: %v, Typ: %v, Drehung: %v Grad\n", i, codectype, drehung) spieldauer := 0 duration, _ := s.TagList.GetString("DURATION") durlength := len([]rune(duration)) if durlength > 0 { var hms [3]int rsplit := regexp.MustCompile("[:.]") for g, h := range rsplit.Split(duration, -1)[:3] { hms[g] = string2int(h) } // hms -> H:M:S -> Stunde:Minute:Sekunde spieldauer = hms[0]*3600 + hms[1]*60 + hms[2] } fmt.Printf("Spur: %v, Typ: %v, Spieldauer: %v Sekunden\n", i, codectype, spieldauer) // Alle TAGs aus dem Container anzeigen //for n, t := range s.TagList { // fmt.Printf(" %v, %v\n", n, t) //} } } }