package media import ( "sort" "strings" youtubev2 "github.com/kkdai/youtube/v2" ) // FilterYoutubeAudio returns the provided formats ordered in descending preferred // order. It may have fewer items than the original slice, or none at all. func FilterYoutubeAudio(inFormats youtubev2.FormatList) youtubev2.FormatList { var formats youtubev2.FormatList for _, format := range inFormats { if format.FPS == 0 && format.AudioChannels > 0 { formats = append(formats, format) } } sort.SliceStable(formats, func(i, j int) bool { isOpusI := strings.Contains(formats[i].MimeType, "opus") isOpusJ := strings.Contains(formats[j].MimeType, "opus") if isOpusI && isOpusJ { isStereoI := formats[i].AudioChannels == 2 isStereoJ := formats[j].AudioChannels == 2 if isStereoI && isStereoJ { return formats[i].ContentLength < formats[j].ContentLength } return isStereoI } return isOpusI }) return formats } // FilterYoutubeVideo returns the provided formats ordered in descending preferred // order. It may have fewer items than the original slice, or none at all. func FilterYoutubeVideo(inFormats youtubev2.FormatList) youtubev2.FormatList { var formats youtubev2.FormatList for _, format := range inFormats { if format.FPS > 0 && format.ContentLength > 0 { formats = append(formats, format) } } sort.SliceStable(formats, func(i, j int) bool { isMP4I := strings.Contains(formats[i].MimeType, "mp4") isMP4J := strings.Contains(formats[j].MimeType, "mp4") if isMP4I && isMP4J { return formats[i].ContentLength < formats[j].ContentLength } return isMP4I }) return formats }