mirror of
https://github.com/KevinMidboe/spotify-downloader.git
synced 2025-12-08 20:39:08 +00:00
Merge pull request #580 from NightMachinary/master
Added --no-remove-original-file. Fixed a bug with ffmpeg accessing stdin.
This commit is contained in:
@@ -16,7 +16,7 @@ https://trac.ffmpeg.org/wiki/Encode/AAC
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def song(input_song, output_song, folder, avconv=False, trim_silence=False):
|
def song(input_song, output_song, folder, avconv=False, trim_silence=False, delete_original=True):
|
||||||
""" Do the audio format conversion. """
|
""" Do the audio format conversion. """
|
||||||
if avconv and trim_silence:
|
if avconv and trim_silence:
|
||||||
raise ValueError("avconv does not support trim_silence")
|
raise ValueError("avconv does not support trim_silence")
|
||||||
@@ -28,7 +28,7 @@ def song(input_song, output_song, folder, avconv=False, trim_silence=False):
|
|||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
convert = Converter(input_song, output_song, folder, delete_original=True)
|
convert = Converter(input_song, output_song, folder, delete_original=delete_original)
|
||||||
if avconv:
|
if avconv:
|
||||||
exit_code, command = convert.with_avconv()
|
exit_code, command = convert.with_avconv()
|
||||||
else:
|
else:
|
||||||
@@ -97,7 +97,7 @@ class Converter:
|
|||||||
return code, command
|
return code, command
|
||||||
|
|
||||||
def with_ffmpeg(self, trim_silence=False):
|
def with_ffmpeg(self, trim_silence=False):
|
||||||
ffmpeg_pre = "ffmpeg -y "
|
ffmpeg_pre = "ffmpeg -y -nostdin " # -nostdin is necessary for spotdl to be able to run in the backgroung.
|
||||||
|
|
||||||
if not log.level == 10:
|
if not log.level == 10:
|
||||||
ffmpeg_pre += "-hide_banner -nostats -v panic "
|
ffmpeg_pre += "-hide_banner -nostats -v panic "
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ class Downloader:
|
|||||||
const.args.folder,
|
const.args.folder,
|
||||||
avconv=const.args.avconv,
|
avconv=const.args.avconv,
|
||||||
trim_silence=const.args.trim_silence,
|
trim_silence=const.args.trim_silence,
|
||||||
|
delete_original=not const.args.no_remove_original,
|
||||||
)
|
)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
encoder = "avconv" if const.args.avconv else "ffmpeg"
|
encoder = "avconv" if const.args.avconv else "ffmpeg"
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ _LOG_LEVELS_STR = ["INFO", "WARNING", "ERROR", "DEBUG"]
|
|||||||
|
|
||||||
default_conf = {
|
default_conf = {
|
||||||
"spotify-downloader": {
|
"spotify-downloader": {
|
||||||
|
"no-remove-original": False,
|
||||||
"manual": False,
|
"manual": False,
|
||||||
"no-metadata": False,
|
"no-metadata": False,
|
||||||
"no-fallback-metadata": False,
|
"no-fallback-metadata": False,
|
||||||
@@ -139,6 +140,13 @@ def get_arguments(raw_args=None, to_group=True, to_merge=True):
|
|||||||
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(
|
||||||
|
"-nr",
|
||||||
|
"--no-remove-original",
|
||||||
|
default=config["no-remove-original"],
|
||||||
|
help="do not remove the original file after conversion",
|
||||||
|
action="store_true",
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"-nm",
|
"-nm",
|
||||||
"--no-metadata",
|
"--no-metadata",
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ class TestDownload:
|
|||||||
|
|
||||||
class TestFFmpeg:
|
class TestFFmpeg:
|
||||||
def test_convert_from_webm_to_mp3(self, filename_fixture, monkeypatch):
|
def test_convert_from_webm_to_mp3(self, filename_fixture, monkeypatch):
|
||||||
expect_command = "ffmpeg -y -hide_banner -nostats -v panic -i {0}.webm -codec:a libmp3lame -ar 44100 -b:a 192k -vn {0}.mp3".format(
|
expect_command = "ffmpeg -y -nostdin -hide_banner -nostats -v panic -i {0}.webm -codec:a libmp3lame -ar 44100 -b:a 192k -vn {0}.mp3".format(
|
||||||
os.path.join(const.args.folder, filename_fixture)
|
os.path.join(const.args.folder, filename_fixture)
|
||||||
)
|
)
|
||||||
monkeypatch.setattr("os.remove", lambda x: None)
|
monkeypatch.setattr("os.remove", lambda x: None)
|
||||||
@@ -126,7 +126,7 @@ class TestFFmpeg:
|
|||||||
assert " ".join(command) == expect_command
|
assert " ".join(command) == expect_command
|
||||||
|
|
||||||
def test_convert_from_webm_to_m4a(self, filename_fixture, monkeypatch):
|
def test_convert_from_webm_to_m4a(self, filename_fixture, monkeypatch):
|
||||||
expect_command = "ffmpeg -y -hide_banner -nostats -v panic -i {0}.webm -cutoff 20000 -codec:a aac -ar 44100 -b:a 192k -vn {0}.m4a".format(
|
expect_command = "ffmpeg -y -nostdin -hide_banner -nostats -v panic -i {0}.webm -cutoff 20000 -codec:a aac -ar 44100 -b:a 192k -vn {0}.m4a".format(
|
||||||
os.path.join(const.args.folder, filename_fixture)
|
os.path.join(const.args.folder, filename_fixture)
|
||||||
)
|
)
|
||||||
monkeypatch.setattr("os.remove", lambda x: None)
|
monkeypatch.setattr("os.remove", lambda x: None)
|
||||||
@@ -136,7 +136,7 @@ class TestFFmpeg:
|
|||||||
assert " ".join(command) == expect_command
|
assert " ".join(command) == expect_command
|
||||||
|
|
||||||
def test_convert_from_m4a_to_mp3(self, filename_fixture, monkeypatch):
|
def test_convert_from_m4a_to_mp3(self, filename_fixture, monkeypatch):
|
||||||
expect_command = "ffmpeg -y -hide_banner -nostats -v panic -i {0}.m4a -codec:v copy -codec:a libmp3lame -ar 44100 -b:a 192k -vn {0}.mp3".format(
|
expect_command = "ffmpeg -y -nostdin -hide_banner -nostats -v panic -i {0}.m4a -codec:v copy -codec:a libmp3lame -ar 44100 -b:a 192k -vn {0}.mp3".format(
|
||||||
os.path.join(const.args.folder, filename_fixture)
|
os.path.join(const.args.folder, filename_fixture)
|
||||||
)
|
)
|
||||||
monkeypatch.setattr("os.remove", lambda x: None)
|
monkeypatch.setattr("os.remove", lambda x: None)
|
||||||
@@ -146,7 +146,7 @@ class TestFFmpeg:
|
|||||||
assert " ".join(command) == expect_command
|
assert " ".join(command) == expect_command
|
||||||
|
|
||||||
def test_convert_from_m4a_to_webm(self, filename_fixture, monkeypatch):
|
def test_convert_from_m4a_to_webm(self, filename_fixture, monkeypatch):
|
||||||
expect_command = "ffmpeg -y -hide_banner -nostats -v panic -i {0}.m4a -codec:a libopus -vbr on -b:a 192k -vn {0}.webm".format(
|
expect_command = "ffmpeg -y -nostdin -hide_banner -nostats -v panic -i {0}.m4a -codec:a libopus -vbr on -b:a 192k -vn {0}.webm".format(
|
||||||
os.path.join(const.args.folder, filename_fixture)
|
os.path.join(const.args.folder, filename_fixture)
|
||||||
)
|
)
|
||||||
monkeypatch.setattr("os.remove", lambda x: None)
|
monkeypatch.setattr("os.remove", lambda x: None)
|
||||||
@@ -156,7 +156,7 @@ class TestFFmpeg:
|
|||||||
assert " ".join(command) == expect_command
|
assert " ".join(command) == expect_command
|
||||||
|
|
||||||
def test_convert_from_m4a_to_flac(self, filename_fixture, monkeypatch):
|
def test_convert_from_m4a_to_flac(self, filename_fixture, monkeypatch):
|
||||||
expect_command = "ffmpeg -y -hide_banner -nostats -v panic -i {0}.m4a -codec:a flac -ar 44100 -b:a 192k -vn {0}.flac".format(
|
expect_command = "ffmpeg -y -nostdin -hide_banner -nostats -v panic -i {0}.m4a -codec:a flac -ar 44100 -b:a 192k -vn {0}.flac".format(
|
||||||
os.path.join(const.args.folder, filename_fixture)
|
os.path.join(const.args.folder, filename_fixture)
|
||||||
)
|
)
|
||||||
monkeypatch.setattr("os.remove", lambda x: None)
|
monkeypatch.setattr("os.remove", lambda x: None)
|
||||||
@@ -166,7 +166,7 @@ class TestFFmpeg:
|
|||||||
assert " ".join(command) == expect_command
|
assert " ".join(command) == expect_command
|
||||||
|
|
||||||
def test_correct_container_for_m4a(self, filename_fixture, monkeypatch):
|
def test_correct_container_for_m4a(self, filename_fixture, monkeypatch):
|
||||||
expect_command = "ffmpeg -y -hide_banner -nostats -v panic -i {0}.m4a.temp -acodec copy -b:a 192k -vn {0}.m4a".format(
|
expect_command = "ffmpeg -y -nostdin -hide_banner -nostats -v panic -i {0}.m4a.temp -acodec copy -b:a 192k -vn {0}.m4a".format(
|
||||||
os.path.join(const.args.folder, filename_fixture)
|
os.path.join(const.args.folder, filename_fixture)
|
||||||
)
|
)
|
||||||
_, command = convert.song(
|
_, command = convert.song(
|
||||||
|
|||||||
Reference in New Issue
Block a user