Fix m4a downloading

master
7x11x13 2022-01-07 05:39:27 -05:00
parent 698ce9396a
commit 69ef01d05f
2 changed files with 22 additions and 27 deletions

View File

@ -2,4 +2,4 @@
"""Python Soundcloud Music Downloader."""
__version__ = "v2.5.0"
__version__ = "v2.5.1"

View File

@ -69,8 +69,6 @@ import math
import mimetypes
import pathlib
import soundcloud
mimetypes.init()
import os
@ -93,7 +91,8 @@ import requests
from clint.textui import progress
from docopt import docopt
from pathvalidate import sanitize_filename
from soundcloud import BasicAlbumPlaylist, BasicTrack, MiniTrack, SoundCloud
from soundcloud import (BasicAlbumPlaylist, BasicTrack, MiniTrack, SoundCloud,
Transcoding)
from scdl import __version__, utils
@ -548,20 +547,10 @@ def download_original_file(client: SoundCloud, track: BasicTrack, title: str, pl
return (filename, False)
def get_track_m3u8(client: SoundCloud, track: BasicTrack, aac=False, **kwargs):
url = None
for transcoding in track.media.transcodings:
if transcoding.format.protocol == "hls":
if (not aac and transcoding.format.mime_type == "audio/mpeg") or (
aac and transcoding.format.mime_type == "audio/mp4"
):
url = transcoding.url
bitrate_KBps = 256 / 8 if aac else 128 / 8
total_bytes = bitrate_KBps * transcoding.duration
break
if not url:
raise SoundCloudException("Could not find mp3 or aac transcoding")
def get_track_m3u8(client: SoundCloud, track: BasicTrack, transcoding: Transcoding, **kwargs):
url = transcoding.url
bitrate_KBps = 256 / 8 if transcoding.preset == "aac_hq" else 128 / 8
total_bytes = bitrate_KBps * transcoding.duration
min_size = kwargs.get("min_size") or 0
max_size = kwargs.get("max_size") or math.inf # max size of 0 treated as no max size
@ -582,14 +571,20 @@ def download_hls(client: SoundCloud, track: BasicTrack, title: str, playlist_inf
if not track.media.transcodings:
raise SoundCloudException(f"Track {track.permalink_url} has no transcodings available")
if kwargs["onlymp3"]:
aac = False
else:
aac = any(
t.format.mime_type.startswith("audio/mp4")
for t in track.media.transcodings
)
logger.debug(f"Trancodings: {track.media.transcodings}")
transcodings = {t.preset: t for t in track.media.transcodings if t.format.protocol == "hls"}
transcoding = None
aac = False
if not kwargs.get("onlymp3") and "aac_hq" in transcodings:
transcoding = transcodings["aac_hq"]
aac = True
elif "mp3_0_0" in transcodings:
transcoding = transcodings["mp3_0_0"]
if not transcoding:
raise SoundCloudException(f"Could not find mp3_0_0 or aac_hq transcoding. Available transcodings: {list(transcodings)}")
filename = get_filename(track, None, aac, playlist_info, **kwargs)
logger.debug(f"filename : {filename}")
@ -598,7 +593,7 @@ def download_hls(client: SoundCloud, track: BasicTrack, title: str, playlist_inf
return (filename, True)
# Get the requests stream
url = get_track_m3u8(client, track, aac, **kwargs)
url = get_track_m3u8(client, track, transcoding, **kwargs)
filename_path = os.path.abspath(filename)
p = subprocess.Popen(