import os import subprocess class DeepFuze: def __init__(self): self.video_path = "" self.audio_path = "" self.output_path = "" self.checkpoint_pth = "" self.sync_level = 5 self.transform_intensity = 3 def load_checkpoint(self, checkpoint_path): if not os.path.isdir(checkpoint_path): raise ValueError("chekpoint folder not found") self.checkpoint_path = checkpoint_path def load_audio(self, audio_path): try: if audio_path.split(".")[-1].lower() not in ["wav","mp3"]: raise ValueError("Audio file must be wav or mp3") if not os.path.isfile(audio_path): raise ValueError("Audio file not found") self.audio_path = audio_path print(f"Audio file loaded from {self.audio_path}") except Exception as e: print(f"Failed to load audio file: {e}") def load_video(self, video_path): try: if video_path.split(".")[-1].lower() not in ["mp4","avi","webm"]: raise ValueError("Video file must be mp4 or avi or webm") if not os.path.isfile(video_path): raise ValueError("Video file not found") self.video_path = video_path print(f"video file loaded from {self.video_path}") except Exception as e: print(f"Failed to load audio file: {e}") def generate(self,output_path,device='cpu'): try: command = [ 'python', './run.py', # Script to run '--frame-processors', "lip_syncer", "-s", self.audio_path, '-t', # Argument: segmentation path self.video_path, '-o', output_path, '--headless' ] if device=="cuda": command.extend(['--execution-providers',"cuda"]) elif device=="mps": command.extend(['--execution-providers',"coreml"]) result = subprocess.run(command,stdout=subprocess.PIPE) print("Output:", result.stdout) print("Errors:", result.stderr) print(f"Lipsynced video saved at {output_path}") return output_path except Exception as e: print(f"Failed to generate lipsynced video: {e}") return None # Usage example: if __name__ == "__main__": deepfuze = DeepFuze() # Load video and audio files deepfuze.load_video('path/to/video.mp4') deepfuze.load_audio('path/to/audio.mp3') deepfuze.load_checkpoint('path/to/checkpoint_path') # Generate lipsynced video output_path = deepfuze.generate(output='path/to/output.mp4') print(f"Lipsynced video saved at {output_path}")