From 1a27022a63868b0497139d1f1d0b282f736a9e90 Mon Sep 17 00:00:00 2001 From: Paulo Nahes Date: Wed, 2 Mar 2016 14:21:19 -0300 Subject: [PATCH] Including feature to increase or decrease media (volume) audio level --- youtube_dl/__init__.py | 4 ++++ youtube_dl/options.py | 4 ++++ youtube_dl/postprocessor/ffmpeg.py | 7 ++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index 79b389840..88f9b7b81 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -168,6 +168,9 @@ def _real_main(argv=None): opts.audioquality = opts.audioquality.strip('k').strip('K') if not opts.audioquality.isdigit(): parser.error('invalid audio quality specified') + if opts.audiovolume: + if not opts.audioquality.isdigit(): + parser.error('invalid audio volume specified') if opts.recodevideo is not None: if opts.recodevideo not in ['mp4', 'flv', 'webm', 'ogg', 'mkv', 'avi']: parser.error('invalid video recode format specified') @@ -221,6 +224,7 @@ def _real_main(argv=None): 'key': 'FFmpegExtractAudio', 'preferredcodec': opts.audioformat, 'preferredquality': opts.audioquality, + 'preferredvolume': opts.audiovolume, 'nopostoverwrites': opts.nopostoverwrites, }) if opts.recodevideo: diff --git a/youtube_dl/options.py b/youtube_dl/options.py index 9dd7a8034..69b75569f 100644 --- a/youtube_dl/options.py +++ b/youtube_dl/options.py @@ -701,6 +701,10 @@ def parseOpts(overrideArguments=None): '--audio-quality', metavar='QUALITY', dest='audioquality', default='5', help='Specify ffmpeg/avconv audio quality, insert a value between 0 (better) and 9 (worse) for VBR or a specific bitrate like 128K (default %default)') + postproc.add_option( + '--audio-volume', metavar='VOLUME', + dest='audiovolume', + help='Specify ffmpeg/avconv audio volume, insert a value in dB to increase audio volume') postproc.add_option( '--recode-video', metavar='FORMAT', dest='recodevideo', default=None, diff --git a/youtube_dl/postprocessor/ffmpeg.py b/youtube_dl/postprocessor/ffmpeg.py index 380bc6f29..20f3ac9f9 100644 --- a/youtube_dl/postprocessor/ffmpeg.py +++ b/youtube_dl/postprocessor/ffmpeg.py @@ -166,12 +166,13 @@ class FFmpegPostProcessor(PostProcessor): class FFmpegExtractAudioPP(FFmpegPostProcessor): - def __init__(self, downloader=None, preferredcodec=None, preferredquality=None, nopostoverwrites=False): + def __init__(self, downloader=None, preferredcodec=None, preferredquality=None, preferredvolume=None, nopostoverwrites=False): FFmpegPostProcessor.__init__(self, downloader) if preferredcodec is None: preferredcodec = 'best' self._preferredcodec = preferredcodec self._preferredquality = preferredquality + self._preferredvolume = preferredvolume self._nopostoverwrites = nopostoverwrites def get_audio_codec(self, path): @@ -242,6 +243,8 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor): more_opts += ['-q:a', self._preferredquality] else: more_opts += ['-b:a', self._preferredquality + 'k'] + if self._preferredvolume is not None: + more_opts += ['-af', 'volume=volume='+self._preferredvolume+'dB:precision=fixed'] else: # We convert the audio (lossy) acodec = {'mp3': 'libmp3lame', 'aac': 'aac', 'm4a': 'aac', 'opus': 'opus', 'vorbis': 'libvorbis', 'wav': None}[self._preferredcodec] @@ -253,6 +256,8 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor): more_opts += ['-q:a', self._preferredquality] else: more_opts += ['-b:a', self._preferredquality + 'k'] + if self._preferredvolume is not None: + more_opts += ['-af', 'volume=volume='+self._preferredvolume+'dB:precision=fixed'] if self._preferredcodec == 'aac': more_opts += ['-f', 'adts'] if self._preferredcodec == 'm4a':