mirror of
https://github.com/zhaarey/apple-music-downloader.git
synced 2025-10-23 15:11:05 +00:00
Merge pull request #88 from itouakirai/main
This commit is contained in:
2
go.mod
2
go.mod
@@ -40,6 +40,6 @@ require (
|
|||||||
github.com/go-resty/resty/v2 v2.16.5
|
github.com/go-resty/resty/v2 v2.16.5
|
||||||
github.com/itouakirai/mp4ff v0.0.0-20250930132656-98812935a1c7
|
github.com/itouakirai/mp4ff v0.0.0-20250930132656-98812935a1c7
|
||||||
github.com/olekukonko/tablewriter v0.0.5
|
github.com/olekukonko/tablewriter v0.0.5
|
||||||
github.com/zhaarey/go-mp4tag v0.0.0-20250210094042-22578afc09bf
|
github.com/zhaarey/go-mp4tag v0.0.0-20251021234435-2c70f6b1bf76
|
||||||
gopkg.in/yaml.v2 v2.2.8
|
gopkg.in/yaml.v2 v2.2.8
|
||||||
)
|
)
|
||||||
|
|||||||
6
go.sum
6
go.sum
@@ -27,8 +27,6 @@ github.com/grafov/m3u8 v0.11.1 h1:igZ7EBIB2IAsPPazKwRKdbhxcoBKO3lO1UY57PZDeNA=
|
|||||||
github.com/grafov/m3u8 v0.11.1/go.mod h1:nqzOkfBiZJENr52zTVd/Dcl03yzphIMbJqkXGu+u080=
|
github.com/grafov/m3u8 v0.11.1/go.mod h1:nqzOkfBiZJENr52zTVd/Dcl03yzphIMbJqkXGu+u080=
|
||||||
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
|
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog=
|
||||||
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
|
github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68=
|
||||||
github.com/itouakirai/mp4ff v0.0.0-20250929054714-77e796d393ee h1:IIMI9QdTGdveHtSy/d1NWLVd42bw4OXBINlwtdgIS9s=
|
|
||||||
github.com/itouakirai/mp4ff v0.0.0-20250929054714-77e796d393ee/go.mod h1:epcaTcHNf0fgnK8d2MP/gPQNji50kvZa9ZxzX06UOoA=
|
|
||||||
github.com/itouakirai/mp4ff v0.0.0-20250930132656-98812935a1c7 h1:KhMNPs/FW9fsiei6qD8h07ArJqYjvpIjk1zqeyv06Xw=
|
github.com/itouakirai/mp4ff v0.0.0-20250930132656-98812935a1c7 h1:KhMNPs/FW9fsiei6qD8h07ArJqYjvpIjk1zqeyv06Xw=
|
||||||
github.com/itouakirai/mp4ff v0.0.0-20250930132656-98812935a1c7/go.mod h1:epcaTcHNf0fgnK8d2MP/gPQNji50kvZa9ZxzX06UOoA=
|
github.com/itouakirai/mp4ff v0.0.0-20250930132656-98812935a1c7/go.mod h1:epcaTcHNf0fgnK8d2MP/gPQNji50kvZa9ZxzX06UOoA=
|
||||||
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
|
github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw=
|
||||||
@@ -71,8 +69,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
|||||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
github.com/zhaarey/go-mp4tag v0.0.0-20250210094042-22578afc09bf h1:WzZoh9wvukQu2We8dw/bFmLfb5XsC5bGGU/Izhd/UOo=
|
github.com/zhaarey/go-mp4tag v0.0.0-20251021234435-2c70f6b1bf76 h1:ON+3W/tNJ6Hujez1ITh9cy3RpFUfLg3NKuKb2PJBg8Q=
|
||||||
github.com/zhaarey/go-mp4tag v0.0.0-20250210094042-22578afc09bf/go.mod h1:cqL6le//aG0AE1/VE1um2m+8dKa8te/WhHWqzrHMDys=
|
github.com/zhaarey/go-mp4tag v0.0.0-20251021234435-2c70f6b1bf76/go.mod h1:cqL6le//aG0AE1/VE1um2m+8dKa8te/WhHWqzrHMDys=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
|||||||
15
main.go
15
main.go
@@ -872,7 +872,6 @@ func ripTrack(track *task.Track, token string, mediaUserToken string) {
|
|||||||
convertedPath = strings.TrimSuffix(trackPath, filepath.Ext(trackPath)) + "." + strings.ToLower(Config.ConvertFormat)
|
convertedPath = strings.TrimSuffix(trackPath, filepath.Ext(trackPath)) + "." + strings.ToLower(Config.ConvertFormat)
|
||||||
considerConverted = true
|
considerConverted = true
|
||||||
}
|
}
|
||||||
|
|
||||||
//get lrc
|
//get lrc
|
||||||
var lrc string = ""
|
var lrc string = ""
|
||||||
if Config.EmbedLrc || Config.SaveLrcFile {
|
if Config.EmbedLrc || Config.SaveLrcFile {
|
||||||
@@ -944,9 +943,10 @@ func ripTrack(track *task.Track, token string, mediaUserToken string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//这里利用MP4box将fmp4转化为mp4,并添加ilst box与cover,方便后面的mp4tag添加更多自定义标签
|
||||||
tags := []string{
|
tags := []string{
|
||||||
"tool=",
|
"tool=",
|
||||||
fmt.Sprintf("artist=%s", track.Resp.Attributes.ArtistName),
|
"artist=AppleMusic",
|
||||||
}
|
}
|
||||||
if Config.EmbedCover {
|
if Config.EmbedCover {
|
||||||
if (strings.Contains(track.PreID, "pl.") || strings.Contains(track.PreID, "ra.")) && Config.DlAlbumcoverForPlaylist {
|
if (strings.Contains(track.PreID, "pl.") || strings.Contains(track.PreID, "ra.")) && Config.DlAlbumcoverForPlaylist {
|
||||||
@@ -1336,8 +1336,8 @@ func ripAlbum(albumId string, token string, storefront string, mediaUserToken st
|
|||||||
os.MkdirAll(albumFolderPath, os.ModePerm)
|
os.MkdirAll(albumFolderPath, os.ModePerm)
|
||||||
album.SaveName = albumFolderName
|
album.SaveName = albumFolderName
|
||||||
fmt.Println(albumFolderName)
|
fmt.Println(albumFolderName)
|
||||||
if Config.SaveArtistCover {
|
if Config.SaveArtistCover && len(meta.Data[0].Relationships.Artists.Data) > 0{
|
||||||
if len(meta.Data[0].Relationships.Artists.Data) > 0 {
|
if meta.Data[0].Relationships.Artists.Data[0].Attributes.Artwork.Url != "" {
|
||||||
_, err = writeCover(singerFolder, "folder", meta.Data[0].Relationships.Artists.Data[0].Attributes.Artwork.Url)
|
_, err = writeCover(singerFolder, "folder", meta.Data[0].Relationships.Artists.Data[0].Attributes.Artwork.Url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("Failed to write artist cover.")
|
fmt.Println("Failed to write artist cover.")
|
||||||
@@ -2003,9 +2003,11 @@ func mvDownloader(adamID string, saveDir string, token string, storefront string
|
|||||||
videom3u8url, _ := extractVideo(mvm3u8url)
|
videom3u8url, _ := extractVideo(mvm3u8url)
|
||||||
videokeyAndUrls, _ := runv3.Run(adamID, videom3u8url, token, mediaUserToken, true, "")
|
videokeyAndUrls, _ := runv3.Run(adamID, videom3u8url, token, mediaUserToken, true, "")
|
||||||
_ = runv3.ExtMvData(videokeyAndUrls, vidPath)
|
_ = runv3.ExtMvData(videokeyAndUrls, vidPath)
|
||||||
|
defer os.Remove(vidPath)
|
||||||
audiom3u8url, _ := extractMvAudio(mvm3u8url)
|
audiom3u8url, _ := extractMvAudio(mvm3u8url)
|
||||||
audiokeyAndUrls, _ := runv3.Run(adamID, audiom3u8url, token, mediaUserToken, true, "")
|
audiokeyAndUrls, _ := runv3.Run(adamID, audiom3u8url, token, mediaUserToken, true, "")
|
||||||
_ = runv3.ExtMvData(audiokeyAndUrls, audPath)
|
_ = runv3.ExtMvData(audiokeyAndUrls, audPath)
|
||||||
|
defer os.Remove(audPath)
|
||||||
|
|
||||||
tags := []string{
|
tags := []string{
|
||||||
"tool=",
|
"tool=",
|
||||||
@@ -2070,6 +2072,7 @@ func mvDownloader(adamID string, saveDir string, token string, storefront string
|
|||||||
tags = append(tags, fmt.Sprintf("cover=%s", covPath))
|
tags = append(tags, fmt.Sprintf("cover=%s", covPath))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
defer os.Remove(covPath)
|
||||||
|
|
||||||
tagsString := strings.Join(tags, ":")
|
tagsString := strings.Join(tags, ":")
|
||||||
muxCmd := exec.Command("MP4Box", "-itags", tagsString, "-quiet", "-add", vidPath, "-add", audPath, "-keep-utc", "-new", mvOutPath)
|
muxCmd := exec.Command("MP4Box", "-itags", tagsString, "-quiet", "-add", vidPath, "-add", audPath, "-keep-utc", "-new", mvOutPath)
|
||||||
@@ -2079,10 +2082,6 @@ func mvDownloader(adamID string, saveDir string, token string, storefront string
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Printf("\rMV Remuxed. \n")
|
fmt.Printf("\rMV Remuxed. \n")
|
||||||
defer os.Remove(vidPath)
|
|
||||||
defer os.Remove(audPath)
|
|
||||||
defer os.Remove(covPath)
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user