from typing import List from .base import EffectProcessor class TailEffect(EffectProcessor): """保留末尾效果处理器""" def validate_params(self) -> bool: """验证参数:保留的秒数""" if not self.params: return True # 默认不截取 try: tail_seconds = float(self.params) return tail_seconds >= 0 except ValueError: return False def generate_filter_args(self, video_input: str, effect_index: int) -> tuple[List[str], str]: """生成保留末尾效果的滤镜参数""" if not self.validate_params(): return [], video_input if not self.params: return [], video_input tail_seconds = float(self.params) if tail_seconds <= 0: return [], video_input output_stream = f"[v_eff{effect_index}]" # 使用reverse+trim+reverse的方法来精确获取最后N秒 filter_args = [ f"{video_input}reverse[v_rev{effect_index}]", f"[v_rev{effect_index}]trim=duration={tail_seconds}[v_trim{effect_index}]", f"[v_trim{effect_index}]reverse{output_stream}" ] return filter_args, output_stream def get_effect_name(self) -> str: return "tail"