package parsers import ( "context" "os" "git.milar.in/nyaanime/model" "gopkg.in/vansante/go-ffprobe.v2" ) // TODO cache func AnalyzeFile(path string) (*model.ParsedFile, error) { props := &model.ParsedFile{File: path} file, err := os.Open(path) if err != nil { return nil, err } defer file.Close() data, err := ffprobe.ProbeReader(context.Background(), file) if err != nil { return nil, err } defaultVideoLang := "" for _, s := range data.StreamType(ffprobe.StreamVideo) { if s.Disposition.Default > 0 { props.Resolution = model.Resolution(s.Height) defaultVideoLang = ParseLanguage(s.Tags.Language) break } } for _, s := range data.StreamType(ffprobe.StreamAudio) { if s.Tags.Language != "" { props.Languages = append(props.Languages, ParseLanguage(s.Tags.Language)) } else if s.Disposition.Default > 0 { props.Languages = append(props.Languages, defaultVideoLang) } } for _, s := range data.StreamType(ffprobe.StreamSubtitle) { if s.Tags.Language != "" { props.Subtitles = append(props.Subtitles, ParseLanguage(s.Tags.Language)) } else if s.Disposition.Default > 0 { props.Subtitles = append(props.Subtitles, defaultVideoLang) } } return props, nil }