From a0d340bab6b329c9709f010f5eb4fca29935d30d Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Wed, 12 Aug 2020 22:24:48 +0200 Subject: [PATCH 1/7] Fix parsing FFStream for iPhone XS videos --- ffprobe/ffprobe.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ffprobe/ffprobe.py b/ffprobe/ffprobe.py index 61caaca..7da2a94 100644 --- a/ffprobe/ffprobe.py +++ b/ffprobe/ffprobe.py @@ -118,7 +118,9 @@ class FFStream: def __init__(self, data_lines): for line in data_lines: - self.__dict__.update({key: value for key, value, *_ in [line.strip().split('=')]}) + kv = [line.strip().split('=')] + if len(kv[0]) == 2: + self.__dict__.update({key: value for key, value, *_ in kv}) try: self.__dict__['framerate'] = round( From d968124a4c88ca2ba0336207cbd2d45461f5b4ff Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Wed, 12 Aug 2020 22:46:30 +0200 Subject: [PATCH 2/7] Add FFStream.rotation --- ffprobe/ffprobe.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ffprobe/ffprobe.py b/ffprobe/ffprobe.py index 7da2a94..56f3a1a 100644 --- a/ffprobe/ffprobe.py +++ b/ffprobe/ffprobe.py @@ -194,6 +194,13 @@ def frame_size(self): return size + def rotation(self): + """ + Returns the video rotation if the stream is a video stream. + Returns 0 if it is not a video stream. + """ + return int(self.__dict__.get('TAG:rotate', '0')) + def pixel_format(self): """ Returns a string representing the pixel format of the video stream. e.g. yuv420p. From 8c7f4598f527ab06a35ddd9aa970a31260808e69 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Fri, 25 Sep 2020 22:10:03 +0200 Subject: [PATCH 3/7] Add FFStream.comment --- ffprobe/ffprobe.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ffprobe/ffprobe.py b/ffprobe/ffprobe.py index 56f3a1a..2a4fc8f 100644 --- a/ffprobe/ffprobe.py +++ b/ffprobe/ffprobe.py @@ -269,3 +269,9 @@ def bit_rate(self): return int(self.__dict__.get('bit_rate', '')) except ValueError: raise FFProbeError('None integer bit_rate') + + def comment(self): + """ + Returns the 'comment' Metadata tag contents. + """ + return self.__dict__.get('TAG:comment', None) From d980c14f35f42578622bac67f86d00628209c2e0 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Fri, 25 Sep 2020 22:42:44 +0200 Subject: [PATCH 4/7] Fix parsing metadata --- ffprobe/ffprobe.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/ffprobe/ffprobe.py b/ffprobe/ffprobe.py index 2a4fc8f..eb6871b 100644 --- a/ffprobe/ffprobe.py +++ b/ffprobe/ffprobe.py @@ -76,12 +76,10 @@ def __init__(self, path_to_video): is_metadata = False stream_metadata_met = True elif is_metadata: - splits = line.split(',') - for s in splits: - m = re.search(r'(\w+)\s*:\s*(.*)$', s) - if m is not None: - # print(m.groups()) - self.metadata[m.groups()[0]] = m.groups()[1].strip() + m = re.search(r'(\w+)\s*:\s*(.*)$', line) + if m is not None: + # print(m.groups()) + self.metadata[m.groups()[0]] = m.groups()[1].strip() if '[STREAM]' in line: stream = True From 6219cde357e4b537d99040fe2020b01d5384693f Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Fri, 25 Sep 2020 22:12:28 +0200 Subject: [PATCH 5/7] Bump version to 1.0.4 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 8b496ab..ad69aea 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ setup( name='ffprobe-python', - version='1.0.3', + version='1.0.4', description=""" A wrapper around ffprobe command to extract metadata from media files. """, From 15826f39b1c8a4e61e2b0c3f774d69e8489cc8e7 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Fri, 15 Jan 2021 12:35:43 +0100 Subject: [PATCH 6/7] Try getting duration from TAG:DURATION if present --- ffprobe/ffprobe.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ffprobe/ffprobe.py b/ffprobe/ffprobe.py index eb6871b..848f1f2 100644 --- a/ffprobe/ffprobe.py +++ b/ffprobe/ffprobe.py @@ -229,7 +229,11 @@ def duration_seconds(self): try: duration = float(self.__dict__.get('duration', '')) except ValueError: - raise FFProbeError('None numeric duration') + try: + duration_str = self.__dict__.get('TAG:DURATION', '').split(':') + duration = int(duration_str[0]) * 3600 + int(duration_str[1]) * 60 + float(duration_str[2]) + except ValueError: + raise FFProbeError('None numeric duration') else: duration = 0.0 From a5bcb94198b22d966f0829fdf635a94bdba94621 Mon Sep 17 00:00:00 2001 From: Dominik Kapusta Date: Fri, 15 Jan 2021 12:36:17 +0100 Subject: [PATCH 7/7] Bump version to 1.0.5 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index ad69aea..f4ba7bb 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ setup( name='ffprobe-python', - version='1.0.4', + version='1.0.5', description=""" A wrapper around ffprobe command to extract metadata from media files. """,