[YoutubeDL] Output avconv/ffmpeg versions if -v is given
This commit is contained in:
parent
a7e97f6db1
commit
d28b517154
3 changed files with 48 additions and 14 deletions
|
@ -1,4 +1,5 @@
|
|||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
@ -18,6 +19,23 @@ 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.PIPE).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):
|
||||
pass
|
||||
|
||||
|
@ -25,22 +43,26 @@ class FFmpegPostProcessorError(PostProcessingError):
|
|||
class FFmpegPostProcessor(PostProcessor):
|
||||
def __init__(self, downloader=None, deletetempfiles=False):
|
||||
PostProcessor.__init__(self, downloader)
|
||||
self._exes = self.detect_executables()
|
||||
self._versions = self.get_versions()
|
||||
self._deletetempfiles = deletetempfiles
|
||||
|
||||
@staticmethod
|
||||
def detect_executables():
|
||||
def get_versions():
|
||||
programs = ['avprobe', 'avconv', 'ffmpeg', 'ffprobe']
|
||||
return dict((program, check_executable(program, ['-version'])) for program in programs)
|
||||
return dict((program, get_version(program)) for program in programs)
|
||||
|
||||
def _get_executable(self):
|
||||
if self._downloader.params.get('prefer_ffmpeg', False):
|
||||
return self._exes['ffmpeg'] or self._exes['avconv']
|
||||
prefs = ('ffmpeg', 'avconv')
|
||||
else:
|
||||
return self._exes['avconv'] or self._exes['ffmpeg']
|
||||
prefs = ('avconv', 'ffmpeg')
|
||||
for p in prefs:
|
||||
if self._versions[p]:
|
||||
return p
|
||||
return None
|
||||
|
||||
def _uses_avconv(self):
|
||||
return self._get_executable() == self._exes['avconv']
|
||||
return self._get_executable() == 'avconv'
|
||||
|
||||
def run_ffmpeg_multiple_files(self, input_paths, out_path, opts):
|
||||
if not self._get_executable():
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue