import re from datetime import datetime from math import ceil def validate_time_format(time_str): pattern = r'^([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|\d{1,2})$' return bool(re.match(pattern, time_str)) def get_duration_wave(audio): waveform, sample_rate = audio["waveform"], audio["sample_rate"] # 防止话说不完 return ceil(waveform.shape[2] / sample_rate) + 0.1 class VideoStartPointDurationCompute: @classmethod def INPUT_TYPES(s): return { "required": { "start_time": ("STRING", {"forceInput": True}), "audio": ("AUDIO", {"forceInput": True}), "fps": ("INT", {"default": 25, "step": 1}), }, } RETURN_TYPES = ("INT", "INT",) RETURN_NAMES = ("起始帧位", "帧数") FUNCTION = "compute" CATEGORY = "不忘科技-自定义节点🚩" def compute(self, start_time, audio, fps): if not validate_time_format(start_time): raise ValueError("start_time或者end_time时间格式不对(start_time or end_time is not in time format)") time_format = "%H:%M:%S" start_dt = datetime.strptime(start_time, time_format) start_sec = (start_dt - datetime(1900, 1, 1)).total_seconds() start_point = int(start_sec * fps) print("audio duration %.2f s"%get_duration_wave(audio)) duration = get_duration_wave(audio) * fps return (start_point, duration,)