diff --git a/scanner/metadata_ffmpeg.go b/scanner/metadata_ffmpeg.go index c2b7bf430..8bf8480b0 100644 --- a/scanner/metadata_ffmpeg.go +++ b/scanner/metadata_ffmpeg.go @@ -104,6 +104,9 @@ var ( // Duration: 00:04:16.00, start: 0.000000, bitrate: 995 kb/s` durationRx = regexp.MustCompile(`^\s\sDuration: ([\d.:]+).*bitrate: (\d+)`) + // Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 192 kb/s + bitRateRx = regexp.MustCompile(`^\s{4}Stream #\d+:\d+: (Audio):.*, (\d+) kb/s`) + // Stream #0:1: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 600x600 [SAR 1:1 DAR 1:1], 90k tbr, 90k tbn, 90k tbc` coverRx = regexp.MustCompile(`^\s{4}Stream #\d+:\d+: (Video):.*`) ) @@ -163,9 +166,10 @@ func (m *Metadata) parseInfo(info string) { } match := tagsRx.FindStringSubmatch(line) if len(match) > 0 { - // Skip when the tag was previously found tagName := strings.ToLower(match[1]) tagValue := strings.TrimSpace(match[2]) + + // Skip when the tag was previously found if _, ok := m.tags[tagName]; !ok { m.tags[tagName] = tagValue } @@ -184,6 +188,12 @@ func (m *Metadata) parseInfo(info string) { if len(match) > 1 { m.tags["bitrate"] = match[2] } + continue + } + + match = bitRateRx.FindStringSubmatch(line) + if len(match) > 0 { + m.tags["bitrate"] = match[2] } } } diff --git a/scanner/metadata_test.go b/scanner/metadata_test.go index 49b08b6ad..35bfec6b1 100644 --- a/scanner/metadata_test.go +++ b/scanner/metadata_test.go @@ -79,6 +79,15 @@ Input #0, mp3, from '/Users/deluan/Music/iTunes/iTunes Media/Music/Compilations/ Expect(md.HasPicture()).To(BeTrue()) }) + It("gets bitrate from the stream, if available", func() { + const output = ` +Input #0, mp3, from '/Users/deluan/Music/iTunes/iTunes Media/Music/Compilations/Putumayo Presents Blues Lounge/09 Pablo's Blues.mp3': + Duration: 00:00:01.02, start: 0.000000, bitrate: 477 kb/s + Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 192 kb/s` + md, _ := extractMetadata("tests/fixtures/test.mp3", output) + Expect(md.BitRate()).To(Equal(192)) + }) + It("parses correctly the compilation tag", func() { const output = ` Input #0, mp3, from '/Users/deluan/Music/iTunes/iTunes Media/Music/Compilations/Putumayo Presents Blues Lounge/09 Pablo's Blues.mp3':