@ -278,7 +278,10 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor):
raise PostProcessingError ( ' WARNING: unable to obtain file audio codec with ffprobe ' )
more_opts = [ ]
if self . _preferredcodec == ' best ' or self . _preferredcodec == filecodec or ( self . _preferredcodec == ' m4a ' and filecodec == ' aac ' ) :
if ( self . _preferredcodec == ' best '
or ( self . _preferredquality is None
and ( self . _preferredcodec == filecodec
or ( self . _preferredcodec == ' m4a ' and filecodec == ' aac ' ) ) ) ) :
if filecodec == ' aac ' and self . _preferredcodec in [ ' m4a ' , ' best ' ] :
# Lossless, but in another container
acodec = ' copy '
@ -297,7 +300,7 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor):
acodec = ' libmp3lame '
extension = ' mp3 '
more_opts = [ ]
if self . _preferredquality is not None :
self . _preferredquality = self . _preferredquality if self . _preferredquality else " 5 "
if int ( self . _preferredquality ) < 10 :
more_opts + = [ ' -q:a ' , self . _preferredquality ]
else :
@ -307,7 +310,7 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor):
acodec = ACODECS [ self . _preferredcodec ]
extension = self . _preferredcodec
more_opts = [ ]
if self . _preferredquality is not None :
self . _preferredquality = self . _preferredquality if self . _preferredquality else " 5 "
# The opus codec doesn't support the -aq option
if int ( self . _preferredquality ) < 10 and extension != ' opus ' :
more_opts + = [ ' -q:a ' , self . _preferredquality ]
@ -329,14 +332,20 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor):
information [ ' filepath ' ] = new_path
information [ ' ext ' ] = extension
# If we download foo.mp3 and convert it to... foo.mp3, then don't delete foo.mp3, silly.
if ( new_path == path
or ( self . _nopostoverwrites and os . path . exists ( encodeFilename ( new_path ) ) ) ) :
# Don't overwrite files if the nopostoverwrites option is active or if
# ffmpeg would just copy them anyway
if ( new_path == path and acodec == ' copy ' and not self . _configuration_args ( ) ) or ( self . _nopostoverwrites and os . path . exists ( encodeFilename ( new_path ) ) ) :
self . _downloader . to_screen ( ' [ffmpeg] Post-process file %s exists, skipping ' % new_path )
return [ ] , information
try :
self . _downloader . to_screen ( ' [ffmpeg] Destination: ' + new_path )
if new_path == path :
temp_filename = prepend_extension ( path , ' temp ' )
self . run_ffmpeg ( path , temp_filename , acodec , more_opts )
os . remove ( encodeFilename ( path ) )
os . rename ( encodeFilename ( temp_filename ) , encodeFilename ( path ) )
else :
self . run_ffmpeg ( path , new_path , acodec , more_opts )
except AudioConversionError as e :
raise PostProcessingError (
@ -350,6 +359,9 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor):
new_path , time . time ( ) , information [ ' filetime ' ] ,
errnote = ' Cannot update utime of audio file ' )
if new_path == path :
return [ ] , information
else :
return [ path ] , information