diff options
author | Minteck <contact@minteck.org> | 2022-02-09 18:12:04 +0100 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2022-02-09 18:12:04 +0100 |
commit | e08d29ce6ecb59f876876ac49414ee1185b0b851 (patch) | |
tree | 1082f8a7209177634ffe3db810886c39f6493649 | |
parent | 22a25ded9f7d9c9a96cce8d1bc12475ca0434201 (diff) | |
download | youtoo-e08d29ce6ecb59f876876ac49414ee1185b0b851.tar.gz youtoo-e08d29ce6ecb59f876876ac49414ee1185b0b851.tar.bz2 youtoo-e08d29ce6ecb59f876876ac49414ee1185b0b851.zip |
The thing is now working as expected!
-rw-r--r-- | index.js | 39 | ||||
-rw-r--r-- | package.json | 2 |
2 files changed, 40 insertions, 1 deletions
@@ -72,6 +72,9 @@ console.error(e); lyrics = ""; } + if (!lyricsComplete) { + console.log("[" + song + "] Incomplete/nonexistent lyrics, will try to fetch at every sync."); + } let rmeta = { video: metadata.title, title: songTitle, @@ -118,4 +121,40 @@ console.log("Cleaning up...") if (fs.existsSync("./_youtoo/Dumps")) { fs.rmSync("./_youtoo/Dumps", { recursive: true }); } + + console.log("Fetching lyrics for incomplete songs...") + for (let file of fs.readdirSync("./_youtoo/Result")) { + let song = file.substring(0, file.length - 4); + if (fs.existsSync("./_youtoo/Metadata/" + song + ".json")) { + console.log("[" + song + "] Fetching metadata..."); + let metadata = JSON.parse(fs.readFileSync("./_youtoo/Metadata/" + song + ".json").toString()); + if (typeof metadata.complete !== "boolean" || !metadata.complete) { + console.log("[" + song + "] Gathering lyrics..."); + let lyricsComplete = false; + let lyrics = ""; + try { + let geniusSearchArtist = metadata.artists[0]; + let geniusSong = (await g.songs.search(geniusSearchArtist + " - " + metadata.title))[0]; + let geniusTitle = geniusSong.title.replace(/^([:\"'a-zA-Z0-9 .\-*\_\/\\,&]*)-( |)(.*)(\[(.*)\]|)/gm, "$3").replace(/(.*)\((feat|ft|with)(\.|:| |)(| |)([:\"'a-zA-Z0-9 .\-*\_\/\\,&]*)\)(.*)/gmi, "$1").replace(/(.*)\[(.*)\](.*)/gm, "$1").replace(/(.*)\((from|in|by)(\.|:| |)(| |)([:\"'a-zA-Z0-9 .\-*\_\/\\,&]*)\)(.*)/gmi, "$1").trim(); + console.log(geniusTitle.toLowerCase() + " <-> " + metadata.title.toLowerCase(), geniusTitle.toLowerCase() === metadata.title.toLowerCase()); + if (geniusTitle.toLowerCase() === metadata.title.toLowerCase() && geniusSong.raw.lyrics_state === "complete") { + lyricsComplete = true; + lyrics = (await geniusSong.lyrics()).trim() + } + } catch (e) { + console.error(e); + lyrics = ""; + } + if (!lyricsComplete) { + console.log("[" + song + "] Incomplete/nonexistent lyrics, will try to fetch at every sync."); + } + metadata.complete = lyricsComplete; + metadata.lyrics = lyrics; + fs.writeFileSync("./_youtoo/Metadata/" + song + ".json", JSON.stringify(metadata, null, 4)); + console.log("[" + song + "] Processing audio..."); + exec("ffmpeg", [ "-y", "-i", "./_youtoo/Result/" + file, "-c", "copy", "-metadata", "lyrics=" + lyrics, "-metadata", "encoded_by=" + require('./package.json').name + "/" + require('./package.json').version, "./_youtoo/_audio.mp3" ], { stdio: "inherit" }); + fs.renameSync("./_youtoo/_audio.mp3", "./_youtoo/Result/" + song + ".mp3"); + } + } + } })()
\ No newline at end of file diff --git a/package.json b/package.json index cb14605..ee3a1ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "youtoo", - "version": "1.2.23", + "version": "1.2.25", "description": "A program that downloads, sorts and names music from YouTube", "main": "index.js", "scripts": { |