| import os |
| from pathlib import Path |
| import random |
| import sys |
| import ffmpeg |
|
|
| from rich.console import Console |
|
|
| import msg |
|
|
| console = Console() |
|
|
|
|
| def rich_print(text, style: str = ""): |
| console.print(text, style=style) |
|
|
|
|
| def random_background(folder: str = "background") -> Path: |
| """ |
| Returns the filename of a random file in the specified folder. |
| |
| Args: |
| folder(str): The folder containing the files. |
| |
| Returns: |
| Path: The absolute path of the random file. |
| """ |
| |
| directory = Path(folder).absolute() |
|
|
| |
| if not directory.exists(): |
| directory.mkdir() |
|
|
| |
| random_file = random.choice(os.listdir(directory)) |
|
|
| |
| |
| return directory / random_file |
|
|
| def get_info(filename: str, kind: str): |
| global probe |
|
|
| try: |
| probe = ffmpeg.probe(filename) |
| except ffmpeg.Error as e: |
| console.log(f"{msg.ERROR}{e.stderr}") |
| sys.exit(1) |
|
|
| if kind == 'video': |
| global video_stream |
|
|
| |
| for stream in probe['streams']: |
| if stream['codec_type'] == 'video': |
| video_stream = stream |
| break |
|
|
| duration = float(video_stream['duration']) |
| width = int(video_stream['width']) |
| height = int(video_stream['height']) |
|
|
| return {'width': width, 'height': height, 'duration': duration} |
|
|
| elif kind == 'audio': |
| global audio_stream |
|
|
| |
| for stream in probe['streams']: |
| if stream['codec_type'] == 'audio': |
| audio_stream = stream |
| break |
|
|
| duration = float(audio_stream['duration']) |
|
|
| return {'duration': duration} |
|
|
|
|
| def convert_time(time_in_seconds): |
| """ |
| Converts time in seconds to a string in the format "hh:mm:ss.mmm". |
| |
| Args: |
| time_in_seconds (float): The time in seconds to be converted. |
| |
| Returns: |
| str: The time in the format "hh:mm:ss.mmm". |
| """ |
| hours = int(time_in_seconds // 3600) |
| minutes = int((time_in_seconds % 3600) // 60) |
| seconds = int(time_in_seconds % 60) |
| milliseconds = int((time_in_seconds - int(time_in_seconds)) * 1000) |
| return f"{hours:02d}:{minutes:02d}:{seconds:02d}.{milliseconds:03d}" |
|
|
|
|
| def rgb_to_bgr(rgb: str) -> str: |
| """ |
| Converts a color from RGB to BGR. |
| |
| Args: |
| rgb (str): The color in RGB format. |
| |
| Returns: |
| str: The color in BGR format. |
| |
| Example: |
| >>> rgb_to_bgr("FFF000") |
| "000FFF" |
| """ |
|
|
| return rgb[4:6] + rgb[2:4] + rgb[0:2] |
|
|