Cleaner code for ffprobe and avprobe backends
Better detection of duration when using ffprobe or avprobe
This commit is contained in:
parent
ac784e354f
commit
7f33af96aa
3 changed files with 52 additions and 73 deletions
|
|
@ -56,30 +56,6 @@ class avprobe(devede.executor.executor):
|
|||
def process_stderr(self,data):
|
||||
return
|
||||
|
||||
def get_division(self,data):
|
||||
|
||||
pos = data.find("/")
|
||||
pos2 = data.find(":")
|
||||
|
||||
if (pos == -1):
|
||||
pos = pos2
|
||||
|
||||
if (pos == -1):
|
||||
try:
|
||||
return float(data)
|
||||
except:
|
||||
return 0
|
||||
else:
|
||||
try:
|
||||
data1 = float(data[:pos])
|
||||
data2 = float(data[pos+1:])
|
||||
except:
|
||||
return 0
|
||||
if (data2 == 0):
|
||||
return 0
|
||||
else:
|
||||
return (float(int((data1 / data2)*1000.0)))/1000.0
|
||||
|
||||
def get_film_data(self, file_name):
|
||||
""" processes a file, refered by the FILE_MOVIE movie object, and fills its
|
||||
main data (resolution, FPS, length...) """
|
||||
|
|
@ -128,13 +104,9 @@ class avprobe(devede.executor.executor):
|
|||
self.original_height = int(float(element["height"]))
|
||||
if ("bit_rate" in element):
|
||||
self.original_videorate = int(float(element["bit_rate"]))/1000
|
||||
else:
|
||||
self.original_videorate = 0
|
||||
self.original_fps = self.get_division(element["avg_frame_rate"])
|
||||
if ("display_aspect_ratio" in element):
|
||||
self.original_aspect_ratio = self.get_division(element["display_aspect_ratio"])
|
||||
else:
|
||||
self.original_aspect_ratio = 0
|
||||
|
||||
elif (element["codec_type"]=="audio"):
|
||||
self.audio_streams += 1
|
||||
|
|
@ -142,8 +114,6 @@ class avprobe(devede.executor.executor):
|
|||
if (self.audio_streams == 1):
|
||||
if ("bit_rate" in element):
|
||||
self.original_audiorate = int(float(element["bit_rate"]))/1000
|
||||
else:
|
||||
self.original_audiorate = 0
|
||||
self.original_audiorate_uncompressed = int(float(element["sample_rate"]))
|
||||
|
||||
self.original_size = str(self.original_width)+"x"+str(self.original_height)
|
||||
|
|
@ -168,12 +138,7 @@ class avprobe(devede.executor.executor):
|
|||
for line in stdout2.split("\n"):
|
||||
line = line.strip()
|
||||
if line.startswith("Duration: "):
|
||||
pos = line.find(",")
|
||||
elements = line[10:pos].strip().split(":")
|
||||
self.original_length = 0
|
||||
for element in elements:
|
||||
self.original_length *= 60
|
||||
self.original_length += int(float(element)+0.99)
|
||||
self.original_length = self.get_time(line[10:])
|
||||
break
|
||||
|
||||
return False # no error
|
||||
|
|
|
|||
|
|
@ -339,3 +339,52 @@ class executor(GObject.GObject):
|
|||
text=text.replace('"','"')
|
||||
text=text.replace("'",''')
|
||||
return text
|
||||
|
||||
|
||||
def get_division(self,data):
|
||||
|
||||
pos = data.find("/")
|
||||
pos2 = data.find(":")
|
||||
|
||||
if (pos == -1):
|
||||
pos = pos2
|
||||
|
||||
if (pos == -1):
|
||||
try:
|
||||
return float(data)
|
||||
except:
|
||||
return 0
|
||||
else:
|
||||
try:
|
||||
data1 = float(data[:pos])
|
||||
data2 = float(data[pos+1:])
|
||||
except:
|
||||
return 0
|
||||
if (data2 == 0):
|
||||
return 0
|
||||
else:
|
||||
return (float(int((data1 / data2)*1000.0)))/1000.0
|
||||
|
||||
|
||||
def get_time(self,line):
|
||||
|
||||
time_string = ""
|
||||
|
||||
for letter in line.strip():
|
||||
if (letter == ':') or (letter == '.') or (letter.isdigit()):
|
||||
time_string += letter
|
||||
else:
|
||||
break
|
||||
|
||||
elements = time_string.split(":")
|
||||
|
||||
if (len(elements) == 0):
|
||||
return -1
|
||||
|
||||
value = 0
|
||||
for element in elements:
|
||||
if (element == ''):
|
||||
continue
|
||||
value *= 60
|
||||
value += int(0.5 + float(element))
|
||||
return value
|
||||
|
|
|
|||
|
|
@ -56,30 +56,6 @@ class ffprobe(devede.executor.executor):
|
|||
def process_stderr(self,data):
|
||||
return
|
||||
|
||||
def get_division(self,data):
|
||||
|
||||
pos = data.find("/")
|
||||
pos2 = data.find(":")
|
||||
|
||||
if (pos == -1):
|
||||
pos = pos2
|
||||
|
||||
if (pos == -1):
|
||||
try:
|
||||
return float(data)
|
||||
except:
|
||||
return 0
|
||||
else:
|
||||
try:
|
||||
data1 = float(data[:pos])
|
||||
data2 = float(data[pos+1:])
|
||||
except:
|
||||
return 0
|
||||
if (data2 == 0):
|
||||
return 0
|
||||
else:
|
||||
return (float(int((data1 / data2)*1000.0)))/1000.0
|
||||
|
||||
def get_film_data(self, file_name):
|
||||
""" processes a file, refered by the FILE_MOVIE movie object, and fills its
|
||||
main data (resolution, FPS, length...) """
|
||||
|
|
@ -128,13 +104,9 @@ class ffprobe(devede.executor.executor):
|
|||
self.original_height = int(float(element["height"]))
|
||||
if ("bit_rate" in element):
|
||||
self.original_videorate = int(float(element["bit_rate"]))/1000
|
||||
else:
|
||||
self.original_videorate = 0
|
||||
self.original_fps = self.get_division(element["avg_frame_rate"])
|
||||
if ("display_aspect_ratio" in element):
|
||||
self.original_aspect_ratio = self.get_division(element["display_aspect_ratio"])
|
||||
else:
|
||||
self.original_aspect_ratio = 0
|
||||
|
||||
elif (element["codec_type"]=="audio"):
|
||||
self.audio_streams += 1
|
||||
|
|
@ -142,8 +114,6 @@ class ffprobe(devede.executor.executor):
|
|||
if (self.audio_streams == 1):
|
||||
if ("bit_rate" in element):
|
||||
self.original_audiorate = int(float(element["bit_rate"]))/1000
|
||||
else:
|
||||
self.original_audiorate = 0
|
||||
self.original_audiorate_uncompressed = int(float(element["sample_rate"]))
|
||||
|
||||
self.original_size = str(self.original_width)+"x"+str(self.original_height)
|
||||
|
|
@ -168,12 +138,7 @@ class ffprobe(devede.executor.executor):
|
|||
for line in stdout2.split("\n"):
|
||||
line = line.strip()
|
||||
if line.startswith("Duration: "):
|
||||
pos = line.find(",")
|
||||
elements = line[10:pos].strip().split(":")
|
||||
self.original_length = 0
|
||||
for element in elements:
|
||||
self.original_length *= 60
|
||||
self.original_length += int(float(element)+0.99)
|
||||
self.original_length = self.get_time(line[10:])
|
||||
break
|
||||
|
||||
return False # no error
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue