import ffmpeg import os import sys class VideoProcessor: def __init__(self): pass def get_video_info(self, input_path: str): try: probe = ffmpeg.probe(input_path) video_stream = next((stream for stream in probe['streams'] if stream['codec_type'] == 'video'), None) return video_stream except ffmpeg.Error as e: print(f"Error probing video: {e.stderr}", file=sys.stderr) return None def split_video(self, input_path: str, start_time: str, end_time: str, output_path: str): """ 使用 FFmpeg 切割视频 Args: input_path: 输入视频路径 start_time: 开始时间 (HH:MM:SS) end_time: 结束时间 (HH:MM:SS) output_path: 输出文件路径 """ print(f"[*] 正在切割视频: {start_time} - {end_time} -> {output_path}") try: ( ffmpeg .input(input_path, ss=start_time, to=end_time) .output(output_path, c='copy') # Stream copy for speed and quality .overwrite_output() .run(capture_stdout=True, capture_stderr=True) ) print(f"[+] 切割成功: {output_path}") return True except ffmpeg.Error as e: print(f"[-] 切割失败: {e.stderr.decode('utf8')}", file=sys.stderr) return False def extract_audio(self, input_path: str, output_path: str): """ 提取音频用于 ASR """ try: ( ffmpeg .input(input_path) .output(output_path, ac=1, ar=16000) # Mono, 16k for ASR .overwrite_output() .run(quiet=True) ) return True except ffmpeg.Error as e: print(f"[-] 音频提取失败: {e.stderr.decode('utf8')}") return False