mirror of
https://github.com/KevinMidboe/spotify-downloader.git
synced 2025-10-29 18:00:15 +00:00
Add option for not falling back on YouTube metadata
This commit is contained in:
@@ -163,8 +163,6 @@ class Downloader:
|
|||||||
if not refined_songname == " - ":
|
if not refined_songname == " - ":
|
||||||
songname = refined_songname
|
songname = refined_songname
|
||||||
else:
|
else:
|
||||||
if not const.args.no_metadata:
|
|
||||||
log.warning("Could not find metadata")
|
|
||||||
songname = internals.sanitize_title(songname)
|
songname = internals.sanitize_title(songname)
|
||||||
|
|
||||||
return songname
|
return songname
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ default_conf = {
|
|||||||
"spotify-downloader": {
|
"spotify-downloader": {
|
||||||
"manual": False,
|
"manual": False,
|
||||||
"no-metadata": False,
|
"no-metadata": False,
|
||||||
|
"no-fallback-metadata": False,
|
||||||
"avconv": False,
|
"avconv": False,
|
||||||
"folder": internals.get_music_dir(),
|
"folder": internals.get_music_dir(),
|
||||||
"overwrite": "prompt",
|
"overwrite": "prompt",
|
||||||
@@ -132,7 +133,7 @@ def get_arguments(raw_args=None, to_group=True, to_merge=True):
|
|||||||
"-m",
|
"-m",
|
||||||
"--manual",
|
"--manual",
|
||||||
default=config["manual"],
|
default=config["manual"],
|
||||||
help="choose the track to download manually from a list " "of matching tracks",
|
help="choose the track to download manually from a list of matching tracks",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
@@ -142,6 +143,13 @@ def get_arguments(raw_args=None, to_group=True, to_merge=True):
|
|||||||
help="do not embed metadata in tracks",
|
help="do not embed metadata in tracks",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"-nf",
|
||||||
|
"--no-fallback-metadata",
|
||||||
|
default=config["no-fallback-metadata"],
|
||||||
|
help="use YouTube metadata as fallback if track not found on Spotify",
|
||||||
|
action="store_true",
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-a",
|
"-a",
|
||||||
"--avconv",
|
"--avconv",
|
||||||
@@ -284,6 +292,9 @@ def get_arguments(raw_args=None, to_group=True, to_merge=True):
|
|||||||
if parsed.avconv and parsed.trim_silence:
|
if parsed.avconv and parsed.trim_silence:
|
||||||
parser.error("--trim-silence can only be used with FFmpeg")
|
parser.error("--trim-silence can only be used with FFmpeg")
|
||||||
|
|
||||||
|
if parsed.no_metadata and parsed.no_fallback_metadata:
|
||||||
|
parser.error('--no-metadata and --no-fallback-metadata cannot be used together')
|
||||||
|
|
||||||
parsed.log_level = log_leveller(parsed.log_level)
|
parsed.log_level = log_leveller(parsed.log_level)
|
||||||
|
|
||||||
return parsed
|
return parsed
|
||||||
|
|||||||
@@ -45,29 +45,48 @@ def go_pafy(raw_song, meta_tags=None):
|
|||||||
return track_info
|
return track_info
|
||||||
|
|
||||||
|
|
||||||
def match_video_and_metadata(track, force_pafy=True):
|
def match_video_and_metadata(track):
|
||||||
""" Get and match track data from YouTube and Spotify. """
|
""" Get and match track data from YouTube and Spotify. """
|
||||||
meta_tags = None
|
meta_tags = None
|
||||||
|
|
||||||
|
|
||||||
|
def fallback_metadata(meta_tags):
|
||||||
|
fallback_metadata_info = "Track not found on Spotify, falling back on YouTube metadata"
|
||||||
|
skip_fallback_metadata_warning = "Fallback condition not met, shall not embed metadata"
|
||||||
|
if meta_tags is None:
|
||||||
|
if const.args.no_fallback_metadata:
|
||||||
|
log.warning(skip_fallback_metadata_warning)
|
||||||
|
else:
|
||||||
|
log.info(fallback_metadata_info)
|
||||||
|
meta_tags = generate_metadata(content)
|
||||||
|
return meta_tags
|
||||||
|
|
||||||
|
|
||||||
if internals.is_youtube(track):
|
if internals.is_youtube(track):
|
||||||
log.debug("Input song is a YouTube URL")
|
log.debug("Input song is a YouTube URL")
|
||||||
content = go_pafy(track, meta_tags=None)
|
content = go_pafy(track, meta_tags=None)
|
||||||
track = slugify(content.title).replace("-", " ")
|
track = slugify(content.title).replace("-", " ")
|
||||||
if not const.args.no_metadata:
|
if not const.args.no_metadata:
|
||||||
meta_tags = spotify_tools.generate_metadata(track)
|
meta_tags = spotify_tools.generate_metadata(track)
|
||||||
if meta_tags is None: # and const.args.allow_youtube:
|
meta_tags = fallback_metadata(meta_tags)
|
||||||
meta_tags = generate_metadata(content)
|
|
||||||
else:
|
|
||||||
# Let it generate metadata, youtube doesn't know spotify slang
|
|
||||||
if not const.args.no_metadata or internals.is_spotify(track):
|
|
||||||
meta_tags = spotify_tools.generate_metadata(track)
|
|
||||||
|
|
||||||
if force_pafy:
|
elif internals.is_spotify(track):
|
||||||
|
log.debug("Input song is a Spotify URL")
|
||||||
|
# Let it generate metadata, YouTube doesn't know Spotify slang
|
||||||
|
meta_tags = spotify_tools.generate_metadata(track)
|
||||||
content = go_pafy(track, meta_tags)
|
content = go_pafy(track, meta_tags)
|
||||||
if meta_tags is None: # and const.args.allow_youtube:
|
if const.args.no_metadata:
|
||||||
meta_tags = generate_metadata(content)
|
meta_tags = None
|
||||||
|
|
||||||
else:
|
else:
|
||||||
content = None
|
log.debug("Input song is plain text based")
|
||||||
|
if const.args.no_metadata:
|
||||||
|
content = go_pafy(track, meta_tags=None)
|
||||||
|
else:
|
||||||
|
meta_tags = spotify_tools.generate_metadata(track)
|
||||||
|
content = go_pafy(track, meta_tags=meta_tags)
|
||||||
|
meta_tags = fallback_metadata(meta_tags)
|
||||||
|
|
||||||
return content, meta_tags
|
return content, meta_tags
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user