| import argparse | |
| from pipeline import merge_lips | |
| def main() -> None: | |
| parser = argparse.ArgumentParser(description="Step 4: Merge lip-synced face region back into original video.") | |
| parser.add_argument("--original-video", required=True, help="Path to original video") | |
| parser.add_argument("--lip-synced-video", required=True, help="Path to lip-synced face video from external module") | |
| parser.add_argument("--face-coords", required=True, help="Path to face coordinates pkl") | |
| parser.add_argument("--lip-coords", required=True, help="Path to lip coordinates pkl") | |
| parser.add_argument("--output", default="final_synced_output.mp4", help="Output final merged video path") | |
| parser.add_argument("--audio", default=None, help="Optional external audio path from Step 3") | |
| args = parser.parse_args() | |
| final_path, audio_used = merge_lips( | |
| original_video_path=args.original_video, | |
| lip_synced_video_path=args.lip_synced_video, | |
| face_coords_path=args.face_coords, | |
| lip_coords_path=args.lip_coords, | |
| final_output_path=args.output, | |
| audio_path=args.audio, | |
| ) | |
| print(f"Final merged video: {final_path}") | |
| print(f"Audio source used: {audio_used}") | |
| if __name__ == "__main__": | |
| main() | |