53 lines
1.5 KiB
Go
53 lines
1.5 KiB
Go
// internal/subtitles/releaseinfo.go
|
|
package subtitles
|
|
|
|
import (
|
|
"path/filepath"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
// ReleaseInfo contains metadata parsed from a media filename.
|
|
type ReleaseInfo struct {
|
|
ReleaseGroup string
|
|
Source string // BluRay, WEB-DL, WEBRip, HDTV, etc.
|
|
Resolution string // 720p, 1080p, 2160p
|
|
VideoCodec string // x264, x265, H.264, H.265, HEVC
|
|
AudioCodec string // AAC, DTS, DDP5.1, etc.
|
|
}
|
|
|
|
var (
|
|
groupRe = regexp.MustCompile(`-([A-Za-z0-9]+)(?:\.[a-z]{2,4})?$`)
|
|
sourceRe = regexp.MustCompile(`(?i)\b(BluRay|BDRip|WEB-DL|WEBRip|HDTV|DVDRip|BRRip|REMUX)\b`)
|
|
resolutionRe = regexp.MustCompile(`\b(720|1080|2160|4320)p\b`)
|
|
videoCodecRe = regexp.MustCompile(`(?i)\b(x264|x265|H\.?264|H\.?265|HEVC|AVC|VP9|AV1)\b`)
|
|
audioCodecRe = regexp.MustCompile(`(?i)\b(AAC|AC3|DTS(?:-HD)?|DDP?\d?\.?\d?|FLAC|TrueHD|Atmos)\b`)
|
|
)
|
|
|
|
// ParseReleaseInfo extracts release metadata from a media filename or path.
|
|
func ParseReleaseInfo(filePathOrName string) ReleaseInfo {
|
|
name := filepath.Base(filePathOrName)
|
|
ext := filepath.Ext(name)
|
|
nameNoExt := strings.TrimSuffix(name, ext)
|
|
|
|
var info ReleaseInfo
|
|
|
|
if m := groupRe.FindStringSubmatch(nameNoExt); len(m) > 1 {
|
|
info.ReleaseGroup = m[1]
|
|
}
|
|
if m := sourceRe.FindString(nameNoExt); m != "" {
|
|
info.Source = m
|
|
}
|
|
if m := resolutionRe.FindString(nameNoExt); m != "" {
|
|
info.Resolution = m
|
|
}
|
|
if m := videoCodecRe.FindString(nameNoExt); m != "" {
|
|
info.VideoCodec = m
|
|
}
|
|
if m := audioCodecRe.FindString(nameNoExt); m != "" {
|
|
info.AudioCodec = m
|
|
}
|
|
|
|
return info
|
|
}
|