Automated music library format conversion with cuesheet detection, tagging support and configurable regex to obtain tags from filenames. Configuration with ini-files to support multiple locations with multiple quality requirements.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.9 KiB

"""
Name: utils.py
Porpose: utils used by FFcuesplitter
Platform: MacOs, Gnu/Linux, FreeBSD
Writer: jeanslack <jeanlucperni@gmail.com>
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 <http://www.gnu.org/licenses/>.
"""
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)
<https://stackoverflow.com/questions/5389507/iterating-over-every-
two-elements-in-a-list>
"""
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)
# ------------------------------------------------------------------------