Skip to content

Commit a0d4125

Browse files
committed
Handle and log possible errors in extracting fps from video files
1 parent d960d82 commit a0d4125

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

df3d/core.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -419,14 +419,29 @@ def get_fps(self):
419419
cmd = ["ffprobe", "-v", "error", "-select_streams", "v:0",
420420
"-show_entries", "stream=avg_frame_rate", "-of",
421421
"default=noprint_wrappers=1:nokey=1", vid]
422-
rates.append(subprocess.check_output(cmd, text=True))
422+
try:
423+
rates.append(subprocess.check_output(cmd, text=True))
424+
except:
425+
logger.warning(f"Command failed: {' '.join(cmd)}")
426+
break
423427
if len(rates) == 0:
424428
return None
425429
if any(rate != rates[0] for rate in rates):
426-
return None
427-
# All videos returned the same rate, so we return that
428-
numerator, denominator = map(int, rates[0].split('/'))
429-
return numerator / denominator if denominator != 0 else None
430+
logger.warning("Framerates of input videos differ from one another,"
431+
f" using the first one: {rates}")
432+
rate = rates[0]
433+
try:
434+
return float(rate)
435+
except ValueError:
436+
pass
437+
try:
438+
numerator, denominator = map(int, rate.split('/'))
439+
return numerator / denominator if denominator != 0 else None
440+
except ValueError:
441+
pass
442+
logger.warning(f'Could not parse framerate from string "{rate}" returned'
443+
' by ffprobe command, so setting fps to None.')
444+
return None
430445

431446
def expand_videos(self):
432447
"""expands video camera_x.mp4 into set of images camera_x_img_y.jpg"""

0 commit comments

Comments
 (0)