import moviepy.editor as mp
import os
from pathlib import Path

class VideoProcessor:
    def __init__(self, input_dir, output_dir):
        self.input_dir = Path(input_dir)
        self.output_dir = Path(output_dir)
        self.output_dir.mkdir(exist_ok=True)
    
    def extract_audio(self, video_file, audio_format='wav', sample_rate=48000):
        """Extract broadcast quality audio from video"""
        video = mp.VideoFileClip(str(video_file))
        audio_path = self.output_dir / f"{video_file.stem}_audio.{audio_format}"
        
        # Extract with broadcast quality settings
        video.audio.write_audiofile(
            str(audio_path),
            fps=sample_rate,
            nbytes=3,  # 24-bit audio
            codec='pcm_s24le' if audio_format == 'wav' else 'libmp3lame'
        )
        video.close()
        return audio_path
    
    def batch_extract_audio(self):
        """Process all videos in directory"""
        video_extensions = ['.mp4', '.avi', '.mov', '.mkv']
        audio_files = []
        
        for video_file in self.input_dir.iterdir():
            if video_file.suffix.lower() in video_extensions:
                print(f"Processing: {video_file.name}")
                audio_path = self.extract_audio(video_file)
                audio_files.append(audio_path)
        
        return audio_files
    

if __name__ == "__main__":
    video_file = 'LBW.mp4'
    pipeline = VideoProcessor.extract_audio(video_file)
    results = VideoProcessor.batch_extract_audio
    
    print(results)