X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=youtube_dl%2Fpostprocessor%2Fffmpeg.py;h=083c79592b54f069cc25512017260f10882fb76b;hb=bf7aa6301b30156d3badbd67a5a12bdb500a8366;hp=19fc135dc356017e7a540d512f870fe9298f408b;hpb=5f82b129e085eb122b6129df36e45925f5b4546a;p=youtube-dl.git diff --git a/youtube_dl/postprocessor/ffmpeg.py b/youtube_dl/postprocessor/ffmpeg.py index 19fc135dc..083c79592 100644 --- a/youtube_dl/postprocessor/ffmpeg.py +++ b/youtube_dl/postprocessor/ffmpeg.py @@ -8,7 +8,6 @@ import time from .common import AudioConversionError, PostProcessor from ..utils import ( - check_executable, compat_subprocess_get_DEVNULL, encodeArgument, encodeFilename, @@ -42,7 +41,7 @@ class FFmpegPostProcessorError(PostProcessingError): class FFmpegPostProcessor(PostProcessor): - def __init__(self, downloader, deletetempfiles=False): + def __init__(self, downloader=None, deletetempfiles=False): PostProcessor.__init__(self, downloader) self._versions = self.get_versions() self._deletetempfiles = deletetempfiles @@ -56,7 +55,8 @@ class FFmpegPostProcessor(PostProcessor): self._versions[self._executable], REQUIRED_VERSION): warning = u'Your copy of %s is outdated, update %s to version %s or newer if you encounter any errors.' % ( self._executable, self._executable, REQUIRED_VERSION) - self._downloader.report_warning(warning) + if self._downloader: + self._downloader.report_warning(warning) @staticmethod def get_versions(): @@ -74,6 +74,17 @@ class FFmpegPostProcessor(PostProcessor): return p return None + @property + def _probe_executable(self): + if self._downloader.params.get('prefer_ffmpeg', False): + prefs = ('ffprobe', 'avprobe') + else: + prefs = ('avprobe', 'ffprobe') + for p in prefs: + if self._versions[p]: + return p + return None + def _uses_avconv(self): return self._executable == 'avconv' @@ -119,11 +130,12 @@ class FFmpegExtractAudioPP(FFmpegPostProcessor): self._nopostoverwrites = nopostoverwrites def get_audio_codec(self, path): - if not self._exes['ffprobe'] and not self._exes['avprobe']: + + if not self._probe_executable: raise PostProcessingError(u'ffprobe or avprobe not found. Please install one.') try: cmd = [ - self._exes['avprobe'] or self._exes['ffprobe'], + self._probe_executable, '-show_streams', encodeFilename(self._ffmpeg_filename_argument(path), True)] handle = subprocess.Popen(cmd, stderr=compat_subprocess_get_DEVNULL(), stdout=subprocess.PIPE)