Пример #1
0
    def _download_single(self, songname):
        # deal with file formats containing slashes to non-existent directories
        songpath = os.path.join(const.args.folder, os.path.dirname(songname))
        os.makedirs(songpath, exist_ok=True)
        input_song = songname + const.args.input_ext
        output_song = songname + const.args.output_ext
        if youtube_tools.download_song(input_song, self.content):
            print("")
            try:
                convert.song(
                    input_song,
                    output_song,
                    const.args.folder,
                    avconv=const.args.avconv,
                    trim_silence=const.args.trim_silence,
                )
            except FileNotFoundError:
                encoder = "avconv" if const.args.avconv else "ffmpeg"
                log.warning(
                    "Could not find {0}, skip encoding".format(encoder))
                output_song = self.unconverted_filename(songname)

            if not const.args.no_metadata and self.meta_tags is not None:
                metadata.embed(os.path.join(const.args.folder, output_song),
                               self.meta_tags)
            return True
 def test_convert_from_m4a_to_mp3(self):
     expect_return_code = 0
     return_code = convert.song(file_name + ".m4a",
                                file_name + ".mp3",
                                const.args.folder,
                                avconv=True)
     assert return_code == expect_return_code
Пример #3
0
 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(
         os.path.join(const.args.folder, filename_fixture))
     monkeypatch.setattr("os.remove", lambda x: None)
     _, command = convert.song(filename_fixture + ".m4a",
                               filename_fixture + ".mp3", const.args.folder)
     assert " ".join(command) == expect_command
Пример #4
0
 def test_convert_from_webm_to_m4a(self, filename_fixture, monkeypatch):
     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))
     monkeypatch.setattr("os.remove", lambda x: None)
     _, command = convert.song(filename_fixture + ".webm",
                               filename_fixture + ".m4a", const.args.folder)
     assert " ".join(command) == expect_command
 def test_correct_container_for_m4a(self, filename_fixture, monkeypatch):
     expect_command = "ffmpeg -y -nostdin -hide_banner -nostats -v panic -i {0}.m4a.temp -acodec copy -b:a 320k -vn {0}.m4a".format(
         os.path.join(const.args.folder, filename_fixture)
     )
     _, command = convert.song(
         filename_fixture + ".m4a", filename_fixture + ".m4a", const.args.folder
     )
     assert " ".join(command) == expect_command
Пример #6
0
    def download(self, folder):
        if self._audio:
            down_item = self.is_audio()
            filename = down_item.download(folder)
            input_song = self.title() + ".webm"
            output_song = self.title() + ".mp3"
            convert.song(
                input_song,
                output_song,
                folder,
                avconv=const.args.avconv,
                trim_silence=const.args.trim_silence,
                delete_original=not const.args.no_remove_original,
            )

        else:
            down_item = self.is_video()
            filename = down_item.download(folder)
 def test_convert_from_m4a_to_webm(self, filename_fixture, monkeypatch):
     expect_command = "ffmpeg -y -nostdin -hide_banner -nostats -v panic -i {0}.m4a -codec:a libopus -vbr on -b:a 320k -vn {0}.webm".format(
         os.path.join(const.args.folder, filename_fixture)
     )
     monkeypatch.setattr("os.remove", lambda x: None)
     _, command = convert.song(
         filename_fixture + ".m4a", filename_fixture + ".webm", const.args.folder
     )
     assert " ".join(command) == expect_command
Пример #8
0
 def test_convert_from_m4a_to_mp3(self, filename_fixture, monkeypatch):
     monkeypatch.setattr("os.remove", lambda x: None)
     expect_command = "avconv -loglevel 0 -i {0}.m4a -ab 192k {0}.mp3 -y".format(
         os.path.join(const.args.folder, filename_fixture))
     _, command = convert.song(
         filename_fixture + ".m4a",
         filename_fixture + ".mp3",
         const.args.folder,
         avconv=True,
     )
     assert " ".join(command) == expect_command
 def test_convert_from_m4a_to_flac(self):
     expect_return_code = 0
     return_code = convert.song(file_name + ".m4a", file_name + ".flac",
                                const.args.folder)
     assert return_code == expect_return_code
 def test_convert_from_webm_to_m4a(self):
     expect_return_code = 0
     return_code = convert.song(file_name + ".webm", file_name + ".m4a",
                                const.args.folder)
     assert return_code == expect_return_code
Пример #11
0
def download_single(raw_song, number=None):
    """ Logic behind downloading a song. """

    if internals.is_youtube(raw_song):
        log.debug('Input song is a YouTube URL')
        content = youtube_tools.go_pafy(raw_song, meta_tags=None)
        raw_song = slugify(content.title).replace('-', ' ')
        meta_tags = spotify_tools.generate_metadata(raw_song)
    else:
        meta_tags = spotify_tools.generate_metadata(raw_song)
        content = youtube_tools.go_pafy(raw_song, meta_tags)

    if content is None:
        log.debug('Found no matching video')
        return

    if const.args.download_only_metadata and meta_tags is None:
        log.info('Found no metadata. Skipping the download')
        return

    # "[number]. [artist] - [song]" if downloading from list
    # otherwise "[artist] - [song]"
    youtube_title = youtube_tools.get_youtube_title(content, number)
    log.info('{} ({})'.format(youtube_title, content.watchv_url))

    # generate file name of the song to download
    songname = content.title

    if meta_tags is not None:
        refined_songname = internals.format_string(const.args.file_format,
                                                   meta_tags,
                                                   slugification=True)
        log.debug('Refining songname from "{0}" to "{1}"'.format(
            songname, refined_songname))
        if not refined_songname == ' - ':
            songname = refined_songname
    else:
        log.warning('Could not find metadata')
        songname = internals.sanitize_title(songname)

    if const.args.dry_run:
        return

    if not check_exists(songname, raw_song, meta_tags):
        # deal with file formats containing slashes to non-existent directories
        songpath = os.path.join(const.args.folder, os.path.dirname(songname))
        os.makedirs(songpath, exist_ok=True)
        input_song = songname + const.args.input_ext
        output_song = songname + const.args.output_ext
        if youtube_tools.download_song(input_song, content):
            try:
                convert.song(input_song,
                             output_song,
                             const.args.folder,
                             avconv=const.args.avconv,
                             trim_silence=const.args.trim_silence)
            except FileNotFoundError:
                encoder = 'avconv' if const.args.avconv else 'ffmpeg'
                log.warning(
                    'Could not find {0}, skipping conversion'.format(encoder))
                const.args.output_ext = const.args.input_ext
                output_song = songname + const.args.output_ext

            if not const.args.input_ext == const.args.output_ext:
                os.remove(os.path.join(const.args.folder, input_song))
            if not const.args.no_metadata and meta_tags is not None:
                metadata.embed(os.path.join(const.args.folder, output_song),
                               meta_tags)
            return True
Пример #12
0
def download_single(raw_song, number=None):
    """ Logic behind downloading a song. """
    content, meta_tags = youtube_tools.match_video_and_metadata(raw_song)

    if content is None:
        log.debug("Found no matching video")
        return

    if const.args.download_only_metadata and meta_tags is None:
        log.info("Found no metadata. Skipping the download")
        return

    # "[number]. [artist] - [song]" if downloading from list
    # otherwise "[artist] - [song]"
    youtube_title = youtube_tools.get_youtube_title(content, number)
    log.info("{} ({})".format(youtube_title, content.watchv_url))

    # generate file name of the song to download
    songname = content.title

    if meta_tags is not None:
        refined_songname = internals.format_string(const.args.file_format,
                                                   meta_tags,
                                                   slugification=True)
        log.debug('Refining songname from "{0}" to "{1}"'.format(
            songname, refined_songname))
        if not refined_songname == " - ":
            songname = refined_songname
    else:
        if not const.args.no_metadata:
            log.warning("Could not find metadata")
        songname = internals.sanitize_title(songname)

    if const.args.dry_run:
        return

    if not check_exists(songname, raw_song, meta_tags):
        # deal with file formats containing slashes to non-existent directories
        songpath = os.path.join(const.args.folder, os.path.dirname(songname))
        os.makedirs(songpath, exist_ok=True)
        input_song = songname + const.args.input_ext
        output_song = songname + const.args.output_ext
        if youtube_tools.download_song(input_song, content):
            print("")
            try:
                convert.song(
                    input_song,
                    output_song,
                    const.args.folder,
                    avconv=const.args.avconv,
                    trim_silence=const.args.trim_silence,
                )
            except FileNotFoundError:
                encoder = "avconv" if const.args.avconv else "ffmpeg"
                log.warning(
                    "Could not find {0}, skipping conversion".format(encoder))
                const.args.output_ext = const.args.input_ext
                output_song = songname + const.args.output_ext

            if not const.args.input_ext == const.args.output_ext:
                os.remove(os.path.join(const.args.folder, input_song))
            if not const.args.no_metadata and meta_tags is not None:
                metadata.embed(os.path.join(const.args.folder, output_song),
                               meta_tags)
            return True
Пример #13
0
 def test_convert_from_m4a_to_webm(self):
     expect_return_code = 0
     return_code = convert.song(file_name + '.m4a', file_name + '.webm',
                                const.args.folder)
     assert return_code == expect_return_code