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):
|
def process_stderr(self,data):
|
||||||
return
|
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):
|
def get_film_data(self, file_name):
|
||||||
""" processes a file, refered by the FILE_MOVIE movie object, and fills its
|
""" processes a file, refered by the FILE_MOVIE movie object, and fills its
|
||||||
main data (resolution, FPS, length...) """
|
main data (resolution, FPS, length...) """
|
||||||
|
|
@ -128,13 +104,9 @@ class avprobe(devede.executor.executor):
|
||||||
self.original_height = int(float(element["height"]))
|
self.original_height = int(float(element["height"]))
|
||||||
if ("bit_rate" in element):
|
if ("bit_rate" in element):
|
||||||
self.original_videorate = int(float(element["bit_rate"]))/1000
|
self.original_videorate = int(float(element["bit_rate"]))/1000
|
||||||
else:
|
|
||||||
self.original_videorate = 0
|
|
||||||
self.original_fps = self.get_division(element["avg_frame_rate"])
|
self.original_fps = self.get_division(element["avg_frame_rate"])
|
||||||
if ("display_aspect_ratio" in element):
|
if ("display_aspect_ratio" in element):
|
||||||
self.original_aspect_ratio = self.get_division(element["display_aspect_ratio"])
|
self.original_aspect_ratio = self.get_division(element["display_aspect_ratio"])
|
||||||
else:
|
|
||||||
self.original_aspect_ratio = 0
|
|
||||||
|
|
||||||
elif (element["codec_type"]=="audio"):
|
elif (element["codec_type"]=="audio"):
|
||||||
self.audio_streams += 1
|
self.audio_streams += 1
|
||||||
|
|
@ -142,8 +114,6 @@ class avprobe(devede.executor.executor):
|
||||||
if (self.audio_streams == 1):
|
if (self.audio_streams == 1):
|
||||||
if ("bit_rate" in element):
|
if ("bit_rate" in element):
|
||||||
self.original_audiorate = int(float(element["bit_rate"]))/1000
|
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_audiorate_uncompressed = int(float(element["sample_rate"]))
|
||||||
|
|
||||||
self.original_size = str(self.original_width)+"x"+str(self.original_height)
|
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"):
|
for line in stdout2.split("\n"):
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
if line.startswith("Duration: "):
|
if line.startswith("Duration: "):
|
||||||
pos = line.find(",")
|
self.original_length = self.get_time(line[10:])
|
||||||
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)
|
|
||||||
break
|
break
|
||||||
|
|
||||||
return False # no error
|
return False # no error
|
||||||
|
|
|
||||||
|
|
@ -338,4 +338,53 @@ class executor(GObject.GObject):
|
||||||
text=text.replace('>','>')
|
text=text.replace('>','>')
|
||||||
text=text.replace('"','"')
|
text=text.replace('"','"')
|
||||||
text=text.replace("'",''')
|
text=text.replace("'",''')
|
||||||
return text
|
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):
|
def process_stderr(self,data):
|
||||||
return
|
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):
|
def get_film_data(self, file_name):
|
||||||
""" processes a file, refered by the FILE_MOVIE movie object, and fills its
|
""" processes a file, refered by the FILE_MOVIE movie object, and fills its
|
||||||
main data (resolution, FPS, length...) """
|
main data (resolution, FPS, length...) """
|
||||||
|
|
@ -128,13 +104,9 @@ class ffprobe(devede.executor.executor):
|
||||||
self.original_height = int(float(element["height"]))
|
self.original_height = int(float(element["height"]))
|
||||||
if ("bit_rate" in element):
|
if ("bit_rate" in element):
|
||||||
self.original_videorate = int(float(element["bit_rate"]))/1000
|
self.original_videorate = int(float(element["bit_rate"]))/1000
|
||||||
else:
|
|
||||||
self.original_videorate = 0
|
|
||||||
self.original_fps = self.get_division(element["avg_frame_rate"])
|
self.original_fps = self.get_division(element["avg_frame_rate"])
|
||||||
if ("display_aspect_ratio" in element):
|
if ("display_aspect_ratio" in element):
|
||||||
self.original_aspect_ratio = self.get_division(element["display_aspect_ratio"])
|
self.original_aspect_ratio = self.get_division(element["display_aspect_ratio"])
|
||||||
else:
|
|
||||||
self.original_aspect_ratio = 0
|
|
||||||
|
|
||||||
elif (element["codec_type"]=="audio"):
|
elif (element["codec_type"]=="audio"):
|
||||||
self.audio_streams += 1
|
self.audio_streams += 1
|
||||||
|
|
@ -142,8 +114,6 @@ class ffprobe(devede.executor.executor):
|
||||||
if (self.audio_streams == 1):
|
if (self.audio_streams == 1):
|
||||||
if ("bit_rate" in element):
|
if ("bit_rate" in element):
|
||||||
self.original_audiorate = int(float(element["bit_rate"]))/1000
|
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_audiorate_uncompressed = int(float(element["sample_rate"]))
|
||||||
|
|
||||||
self.original_size = str(self.original_width)+"x"+str(self.original_height)
|
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"):
|
for line in stdout2.split("\n"):
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
if line.startswith("Duration: "):
|
if line.startswith("Duration: "):
|
||||||
pos = line.find(",")
|
self.original_length = self.get_time(line[10:])
|
||||||
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)
|
|
||||||
break
|
break
|
||||||
|
|
||||||
return False # no error
|
return False # no error
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue