|
|
@ -11,6 +11,7 @@ from ..utils import (
|
|
|
|
compat_subprocess_get_DEVNULL,
|
|
|
|
compat_subprocess_get_DEVNULL,
|
|
|
|
encodeArgument,
|
|
|
|
encodeArgument,
|
|
|
|
encodeFilename,
|
|
|
|
encodeFilename,
|
|
|
|
|
|
|
|
get_exe_version,
|
|
|
|
is_outdated_version,
|
|
|
|
is_outdated_version,
|
|
|
|
PostProcessingError,
|
|
|
|
PostProcessingError,
|
|
|
|
prepend_extension,
|
|
|
|
prepend_extension,
|
|
|
@ -19,23 +20,6 @@ from ..utils import (
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_version(executable):
|
|
|
|
|
|
|
|
""" Returns the version of the specified executable,
|
|
|
|
|
|
|
|
or False if the executable is not present """
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
out, err = subprocess.Popen(
|
|
|
|
|
|
|
|
[executable, '-version'],
|
|
|
|
|
|
|
|
stdout=subprocess.PIPE, stderr=subprocess.STDOUT).communicate()
|
|
|
|
|
|
|
|
except OSError:
|
|
|
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
firstline = out.partition(b'\n')[0].decode('ascii', 'ignore')
|
|
|
|
|
|
|
|
m = re.search(r'version\s+([0-9._-a-zA-Z]+)', firstline)
|
|
|
|
|
|
|
|
if not m:
|
|
|
|
|
|
|
|
return u'present'
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
return m.group(1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class FFmpegPostProcessorError(PostProcessingError):
|
|
|
|
class FFmpegPostProcessorError(PostProcessingError):
|
|
|
|
pass
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
@ -61,7 +45,7 @@ class FFmpegPostProcessor(PostProcessor):
|
|
|
|
@staticmethod
|
|
|
|
@staticmethod
|
|
|
|
def get_versions():
|
|
|
|
def get_versions():
|
|
|
|
programs = ['avprobe', 'avconv', 'ffmpeg', 'ffprobe']
|
|
|
|
programs = ['avprobe', 'avconv', 'ffmpeg', 'ffprobe']
|
|
|
|
return dict((program, get_version(program)) for program in programs)
|
|
|
|
return dict((p, get_exe_version(p, args=['-version'])) for p in programs)
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
@property
|
|
|
|
def _executable(self):
|
|
|
|
def _executable(self):
|
|
|
|