check ffmpeg/ffmprobe paths in a thread

This commit is contained in:
Jack Robison 2020-03-27 12:12:35 -04:00 committed by Lex Berezhny
parent 33fbd715c0
commit e7cded7511

View file

@ -73,6 +73,10 @@ class VideoFileAnalyzer:
log.debug("Using %s at %s", version.splitlines()[0].split(" Copyright")[0], self._which_ffmpeg) log.debug("Using %s at %s", version.splitlines()[0].split(" Copyright")[0], self._which_ffmpeg)
return version return version
@staticmethod
def _which_ffmpeg_and_ffmprobe(path):
return shutil.which("ffmpeg", path=path), shutil.which("ffprobe", path=path)
async def _verify_ffmpeg_installed(self): async def _verify_ffmpeg_installed(self):
if self._ffmpeg_installed: if self._ffmpeg_installed:
return return
@ -81,17 +85,18 @@ class VideoFileAnalyzer:
if hasattr(self._conf, "data_dir"): if hasattr(self._conf, "data_dir"):
path += os.path.pathsep + os.path.join(getattr(self._conf, "data_dir"), "ffmpeg", "bin") path += os.path.pathsep + os.path.join(getattr(self._conf, "data_dir"), "ffmpeg", "bin")
path += os.path.pathsep + self._env_copy.get("PATH", "") path += os.path.pathsep + self._env_copy.get("PATH", "")
self._which_ffmpeg, self._which_ffprobe = await asyncio.get_running_loop().run_in_executor(
self._which_ffmpeg = shutil.which("ffmpeg", path=path) None, self._which_ffmpeg_and_ffmprobe, path
)
if not self._which_ffmpeg: if not self._which_ffmpeg:
log.warning("Unable to locate ffmpeg executable. Path: %s", path) log.warning("Unable to locate ffmpeg executable. Path: %s", path)
raise FileNotFoundError(f"Unable to locate ffmpeg executable. Path: {path}") raise FileNotFoundError(f"Unable to locate ffmpeg executable. Path: {path}")
self._which_ffprobe = shutil.which("ffprobe", path=path)
if not self._which_ffprobe: if not self._which_ffprobe:
log.warning("Unable to locate ffprobe executable. Path: %s", path) log.warning("Unable to locate ffprobe executable. Path: %s", path)
raise FileNotFoundError(f"Unable to locate ffprobe executable. Path: {path}") raise FileNotFoundError(f"Unable to locate ffprobe executable. Path: {path}")
if os.path.dirname(self._which_ffmpeg) != os.path.dirname(self._which_ffprobe): if os.path.dirname(self._which_ffmpeg) != os.path.dirname(self._which_ffprobe):
log.warning("ffmpeg and ffprobe are in different folders!") log.warning("ffmpeg and ffprobe are in different folders!")
await self._verify_executables() await self._verify_executables()
self._ffmpeg_installed = True self._ffmpeg_installed = True