From d39dd28762ff7d88ea792601406a7f86d4e98217 Mon Sep 17 00:00:00 2001 From: itouakirai <85016486+itouakirai@users.noreply.github.com> Date: Sat, 19 Oct 2024 11:10:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8D=E5=AE=8C=E6=95=B4=E9=9F=B3=E9=A2=91?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 9b9ea4e..54e4aa6 100644 --- a/main.go +++ b/main.go @@ -1873,14 +1873,26 @@ func rip(albumId string, token string, storefront string, userToken string) erro } } if dl_atmos { - fmt.Printf("Deleting original EC3 file: %s\n", filepath.Base(trackPath)) + //fmt.Printf("Deleting original EC3 file: %s\n", filepath.Base(trackPath)) if err := os.Remove(trackPath); err != nil { fmt.Printf("Error deleting file: %v\n", err) counter.Error++ continue } fmt.Printf("Successfully processed and deleted %s\n", filepath.Base(trackPath)) + trackPath = m4atrackPath } + if !(checkSongIntegrity(trackPath, manifest.Attributes.DurationInMillis)) { + fmt.Println("Audio Integrity : Bad") + if err := os.Remove(trackPath); err != nil { + fmt.Printf("Error deleting file: %v\n", err) + counter.Error++ + continue + } + counter.Error++ + continue + } + fmt.Println("Audio Integrity : OK") counter.Success++ okDict[albumId] = append(okDict[albumId], trackNum) } @@ -1991,6 +2003,18 @@ func main() { } } +func checkSongIntegrity(songPath string, duration int) bool { + duration = duration / 1000 + starttime := strconv.Itoa(duration - 2) + command := "ffmpeg" + args := []string{"-y", "-v", "error", "-ss", starttime, "-i", songPath, "-map", "0:a", "-c:a", "pcm_s16le", "-f", "null", "NUL"} + cmd := exec.Command(command, args...) + var stderr bytes.Buffer + cmd.Stderr = &stderr + err := cmd.Run() + return err == nil && stderr.Len() == 0 +} + func conventSyllableTTMLToLRC(ttml string) (string, error) { parsedTTML := etree.NewDocument() err := parsedTTML.ReadFromString(ttml) @@ -2692,6 +2716,7 @@ type SongAttributes struct { AlbumName string `json:"albumName"` TrackNumber int `json:"trackNumber"` ComposerName string `json:"composerName"` + DurationInMillis int `json:"durationInMillis"` } type AlbumAttributes struct {