Optimizes ffprobe usage
This commit is contained in:
@@ -13,6 +13,7 @@ from ffx.model.pattern import Pattern
|
||||
class FileProperties():
|
||||
|
||||
FILE_EXTENSIONS = ['mkv', 'mp4', 'avi', 'flv', 'webm']
|
||||
FFPROBE_COMMAND_TOKENS = ["ffprobe", "-hide_banner", "-show_format", "-show_streams", "-of", "json"]
|
||||
|
||||
SE_INDICATOR_PATTERN = '([sS][0-9]+[eE][0-9]+)'
|
||||
SEASON_EPISODE_INDICATOR_MATCH = '[sS]([0-9]+)[eE]([0-9]+)'
|
||||
@@ -78,6 +79,26 @@ class FileProperties():
|
||||
self.__season = -1
|
||||
self.__episode = -1
|
||||
|
||||
self.__ffprobeData = None
|
||||
|
||||
|
||||
def _getFfprobeData(self):
|
||||
if self.__ffprobeData is not None:
|
||||
return self.__ffprobeData
|
||||
|
||||
ffprobeOutput, ffprobeError, returnCode = executeProcess(
|
||||
FileProperties.FFPROBE_COMMAND_TOKENS + [self.__sourcePath]
|
||||
)
|
||||
|
||||
if 'Invalid data found when processing input' in ffprobeError:
|
||||
raise Exception(f"File {self.__sourcePath} does not contain valid stream data")
|
||||
|
||||
if returnCode != 0:
|
||||
raise Exception(f"ffprobe returned with error {returnCode}")
|
||||
|
||||
self.__ffprobeData = json.loads(ffprobeOutput)
|
||||
return self.__ffprobeData
|
||||
|
||||
|
||||
def getFormatData(self):
|
||||
"""
|
||||
@@ -99,22 +120,7 @@ class FileProperties():
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
# ffprobe -hide_banner -show_format -of json
|
||||
ffprobeOutput, ffprobeError, returnCode = executeProcess(["ffprobe",
|
||||
"-hide_banner",
|
||||
"-show_format",
|
||||
"-of", "json",
|
||||
self.__sourcePath]) #,
|
||||
#context = self.context)
|
||||
|
||||
if 'Invalid data found when processing input' in ffprobeError:
|
||||
raise Exception(f"File {self.__sourcePath} does not contain valid stream data")
|
||||
|
||||
if returnCode != 0:
|
||||
raise Exception(f"ffprobe returned with error {returnCode}")
|
||||
|
||||
return json.loads(ffprobeOutput)['format']
|
||||
return self._getFfprobeData()['format']
|
||||
|
||||
|
||||
def getStreamData(self):
|
||||
@@ -159,24 +165,7 @@ class FileProperties():
|
||||
}
|
||||
}
|
||||
"""
|
||||
|
||||
# ffprobe -hide_banner -show_streams -of json
|
||||
ffprobeOutput, ffprobeError, returnCode = executeProcess(["ffprobe",
|
||||
"-hide_banner",
|
||||
"-show_streams",
|
||||
"-of", "json",
|
||||
self.__sourcePath]) #,
|
||||
#context = self.context)
|
||||
|
||||
if 'Invalid data found when processing input' in ffprobeError:
|
||||
raise Exception(f"File {self.__sourcePath} does not contain valid stream data")
|
||||
|
||||
|
||||
if returnCode != 0:
|
||||
raise Exception(f"ffprobe returned with error {returnCode}")
|
||||
|
||||
|
||||
return json.loads(ffprobeOutput)['streams']
|
||||
return self._getFfprobeData()['streams']
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user