From 871fd35d57f2926b2adb6bc20550611a5b1df4a6 Mon Sep 17 00:00:00 2001 From: David Date: Tue, 20 Aug 2013 08:41:16 -0700 Subject: [PATCH] Update PostProcessor.py Added option to set channels for audio extraction. Audio quality also supports sample rate integers. --- youtube_dl/PostProcessor.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/youtube_dl/PostProcessor.py b/youtube_dl/PostProcessor.py index fddf58606..ffbda5188 100644 --- a/youtube_dl/PostProcessor.py +++ b/youtube_dl/PostProcessor.py @@ -91,13 +91,14 @@ class FFmpegPostProcessor(PostProcessor): return fn class FFmpegExtractAudioPP(FFmpegPostProcessor): - def __init__(self, downloader=None, preferredcodec=None, preferredquality=None, nopostoverwrites=False): + def __init__(self, downloader=None, preferredcodec=None, preferredquality=None, preferredchannels=None, nopostoverwrites=False): FFmpegPostProcessor.__init__(self, downloader) if preferredcodec is None: preferredcodec = 'best' self._preferredcodec = preferredcodec self._preferredquality = preferredquality self._nopostoverwrites = nopostoverwrites + self._preferredchannels = preferredchannels def get_audio_codec(self, path): if not self._exes['ffprobe'] and not self._exes['avprobe']: @@ -163,6 +164,8 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor): more_opts += [self._exes['avconv'] and '-q:a' or '-aq', self._preferredquality] else: more_opts += [self._exes['avconv'] and '-b:a' or '-ab', self._preferredquality + 'k'] + if self._preferredchannels is not None: + more_opts += ['-ac', self._preferredchannels] else: # We convert the audio (lossy) acodec = {'mp3': 'libmp3lame', 'aac': 'aac', 'm4a': 'aac', 'opus': 'opus', 'vorbis': 'libvorbis', 'wav': None}[self._preferredcodec] @@ -171,8 +174,10 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor): if self._preferredquality is not None: if int(self._preferredquality) < 10: more_opts += [self._exes['avconv'] and '-q:a' or '-aq', self._preferredquality] - else: + elif int(self._preferredquality) < 8000: more_opts += [self._exes['avconv'] and '-b:a' or '-ab', self._preferredquality + 'k'] + else: + more_opts += [self._exes['avconv'] and '-ar', self._preferredquality] if self._preferredcodec == 'aac': more_opts += ['-f', 'adts'] if self._preferredcodec == 'm4a': @@ -182,7 +187,8 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor): if self._preferredcodec == 'wav': extension = 'wav' more_opts += ['-f', 'wav'] - + if self._preferredchannels is not None: + more_opts += ['-ac', self._preferredchannels] prefix, sep, ext = path.rpartition(u'.') # not os.path.splitext, since the latter does not work on unicode in all setups new_path = prefix + sep + extension