diff options
Diffstat (limited to 'index.js')
-rw-r--r-- | index.js | 39 |
1 files changed, 39 insertions, 0 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 |