def process_status_line(klass, video, line): error = klass._check_for_errors(line) if error: return {'finished': True, 'error': error} match = klass.DURATION_RE.match(line) if match is not None: hours, minutes, seconds, centi = [ int(m) for m in match.groups()[:4] ] return { 'duration': hms_to_seconds(hours, minutes, seconds + 0.01 * centi) } match = klass.PROGRESS_RE.match(line) if match is not None: t = match.group(1) if ':' in t: hours, minutes, seconds = [float(m) for m in t.split(':')[:3]] return {'progress': hms_to_seconds(hours, minutes, seconds)} else: return {'progress': float(t)} match = klass.LAST_PROGRESS_RE.match(line) if match is not None: return {'finished': True}
def process_status_line(klass, video, line): error = klass._check_for_errors(line) if error: return {'finished': True, 'error': error} match = klass.DURATION_RE.match(line) if match is not None: hours, minutes, seconds, centi = [ int(m) for m in match.groups()[:4]] return {'duration': hms_to_seconds(hours, minutes, seconds + 0.01 * centi)} match = klass.FIRST_PASS.match(line) if match is not None: t = match.group(1) if ':' in t: hours, minutes, seconds = [float(m) for m in t.split(':')[:3]] return {'pass1': hms_to_seconds(hours, minutes, seconds)} else: return {'pass1': float(t)} match = klass.PROGRESS_RE.match(line) if match is not None: t = match.group(1) if ':' in t: hours, minutes, seconds = [float(m) for m in t.split(':')[:3]] return {'pass2': hms_to_seconds(hours, minutes, seconds)} else: return {'pass2': float(t)} match = klass.LAST_PROGRESS_RE.match(line) if match is not None: return {'finished': True}
def process_status_line(klass, video, line): error = klass._check_for_errors(line) if error: return {"finished": True, "error": error} match = klass.DURATION_RE.match(line) if match is not None: hours, minutes, seconds, centi = [int(m) for m in match.groups()[:4]] return {"duration": hms_to_seconds(hours, minutes, seconds + 0.01 * centi)} match = klass.PROGRESS_RE.match(line) if match is not None: t = match.group(1) if ":" in t: hours, minutes, seconds = [float(m) for m in t.split(":")[:3]] return {"progress": hms_to_seconds(hours, minutes, seconds)} else: return {"progress": float(t)} match = klass.LAST_PROGRESS_RE.match(line) if match is not None: return {"finished": True}
def test_hms_to_seconds(self): self.assertEqual(utils.hms_to_seconds(3, 2, 1), 3 * 3600 + 2 * 60 + 1)
def test_hms_to_seconds_floats(self): self.assertEqual(utils.hms_to_seconds(3.0, 2.0, 1.5), 3 * 3600 + 2 * 60 + 1.5)
def extract_info(ast): info = {} # logging.info("get_media_info: %s", ast.pformat()) input0 = ast.get_by_key("Input #0") if not input0: raise ValueError("no input #0") foo, info['container'], bar = input0.line.split(', ', 2) if ',' in info['container']: info['container'] = info['container'].split(',') metadata = input0.get_by_key("Metadata") if metadata: for key in ('title', 'artist', 'album', 'track', 'genre'): node = metadata.get_by_key(key) if node: info[key] = node.line.split(':', 1)[1].strip() major_brand_node = metadata.get_by_key("major_brand") extra_container_types = [] if major_brand_node: major_brand = major_brand_node.line.split(':')[1].strip() extra_container_types = [major_brand] else: major_brand = None compatible_brands_node = metadata.get_by_key("compatible_brands") if compatible_brands_node: line = compatible_brands_node.line.split(':')[1].strip() extra_container_types.extend(line[i:i + 4] for i in range(0, len(line), 4) if line[i:i + 4] != major_brand) if extra_container_types: if not isinstance(info['container'], list): info['container'] = [info['container']] info['container'].extend(extra_container_types) duration = input0.get_by_key("Duration:") if duration: _, rest = duration.line.split(':', 1) duration_string, _ = rest.split(', ', 1) logging.info("duration: %r", duration_string) try: hours, minutes, seconds = [ float(i) for i in duration_string.split(':') ] except ValueError: if duration_string.strip() != "N/A": logging.warn("Error parsing duration string: %r", duration_string) else: info['duration'] = hms_to_seconds(hours, minutes, seconds) for stream_node in duration.children: stream = stream_node.line if "Video:" in stream: stream_number, video, data = stream.split(': ', 2) video_codec = data.split(', ')[0] if ' ' in video_codec: video_codec, drmp = video_codec.split(' ', 1) if 'drm' in drmp: info.setdefault('has_drm', []).append('video') info['video_codec'] = video_codec match = SIZE_RE.search(data) if match: info["width"] = int(match.group(1)) info["height"] = int(match.group(2)) elif 'Audio:' in stream: stream_number, video, data = stream.split(': ', 2) audio_codec = data.split(', ')[0] if ' ' in audio_codec: audio_codec, drmp = audio_codec.split(' ', 1) if 'drm' in drmp: info.setdefault('has_drm', []).append('audio') info['audio_codec'] = audio_codec return info
def extract_info(ast): info = {} # logging.info("get_media_info: %s", ast.pformat()) input0 = ast.get_by_key("Input #0") if not input0: raise ValueError("no input #0") foo, info['container'], bar = input0.line.split(', ', 2) if ',' in info['container']: info['container'] = info['container'].split(',') metadata = input0.get_by_key("Metadata") if metadata: for key in ('title', 'artist', 'album', 'track', 'genre'): node = metadata.get_by_key(key) if node: info[key] = node.line.split(':', 1)[1].strip() major_brand_node = metadata.get_by_key("major_brand") extra_container_types = [] if major_brand_node: major_brand = major_brand_node.line.split(':')[1].strip() extra_container_types = [major_brand] else: major_brand = None compatible_brands_node = metadata.get_by_key("compatible_brands") if compatible_brands_node: line = compatible_brands_node.line.split(':')[1].strip() extra_container_types.extend(line[i:i+4] for i in range(0, len(line), 4) if line[i:i+4] != major_brand) if extra_container_types: if not isinstance(info['container'], list): info['container'] = [info['container']] info['container'].extend(extra_container_types) duration = input0.get_by_key("Duration:") if duration: _, rest = duration.line.split(':', 1) duration_string, _ = rest.split(', ', 1) hours, minutes, seconds = [ float(i) for i in duration_string.split(':')] info['duration'] = hms_to_seconds(hours, minutes, seconds) for stream_node in duration.children: stream = stream_node.line if "Video:" in stream: stream_number, video, data = stream.split(': ', 2) video_codec = data.split(', ')[0] if ' ' in video_codec: video_codec, drmp = video_codec.split(' ', 1) if 'drm' in drmp: info.setdefault('has_drm', []).append('video') info['video_codec'] = video_codec match = SIZE_RE.search(data) if match: info["width"] = int(match.group(1)) info["height"] = int(match.group(2)) elif 'Audio:' in stream: stream_number, video, data = stream.split(': ', 2) audio_codec = data.split(', ')[0] if ' ' in audio_codec: audio_codec, drmp = audio_codec.split(' ', 1) if 'drm' in drmp: info.setdefault('has_drm', []).append('audio') info['audio_codec'] = audio_codec return info