""" Name: utils.py Porpose: utils used by FFcuesplitter Platform: MacOs, Gnu/Linux, FreeBSD Writer: jeanslack license: GPL3 Rev: January 16 2022 Code checker: flake8 and pylint #################################################################### This file is part of FFcuesplitter. FFcuesplitter is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. FFcuesplitter is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with FFcuesplitter. If not, see . """ import subprocess import platform import datetime def pairwise(iterable): """ Return a zip object from iterable. This function is used by run method. ---- USE: after splitting ffmpeg's progress strings such as: output = "frame= 1178 fps=155 q=29.0 size= 2072kB time=00:00:39.02 bitrate= 435.0kbits/s speed=5.15x " in a list as: iterable = ['frame', '1178', 'fps', '155', 'q', '29.0', 'size', '2072kB', 'time', '00:00:39.02', 'bitrate', '435.0kbits/s', speed', '5.15x'] for x, y in pairwise(iterable): (x,y) """ itobj = iter(iterable) # list_iterator object return zip(itobj, itobj) # zip object pairs from list iterable object # ------------------------------------------------------------------------ def frames_to_seconds(frames): """ Converts frames (10407600) to seconds (236.0) and then converts them to a time format string (0:03:56) using datetime. """ secs = frames / 44100 return str(datetime.timedelta(seconds=secs)) # ------------------------------------------------------------------------ class Popen(subprocess.Popen): """ Inherit subprocess.Popen class to set _startupinfo. This avoids displaying a console window on MS-Windows using GUI's . """ if platform.system() == 'Windows': _startupinfo = subprocess.STARTUPINFO() _startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW else: _startupinfo = None def __init__(self, *args, **kwargs): """Constructor """ super().__init__(*args, **kwargs, startupinfo=self._startupinfo) # def communicate_or_kill(self, *args, **kwargs): # return process_communicate_or_kill(self, *args, **kwargs) # ------------------------------------------------------------------------