Untitled
import cv2 import os import shutil from tqdm import tqdm # Create directories for output and frames def create_dirs(output_folder): if os.path.exists(output_folder): shutil.rmtree(output_folder) os.makedirs(output_folder) os.makedirs(os.path.join(output_folder, "frames")) # Extract frames from video def extract_frames(video_path, frame_folder): video_capture = cv2.VideoCapture(video_path) total_frames = int(video_capture.get(cv2.CAP_PROP_FRAME_COUNT)) print(f"Extracting {total_frames} frames...") for frame_count in tqdm(range(total_frames)): ret, frame = video_capture.read() if not ret: break # Save each frame as an image cv2.imwrite(os.path.join(frame_folder, f"frame_{frame_count:04d}.jpg"), frame) video_capture.release() print("Frame extraction complete.") # Process the frames to create new frames by averaging and finding the median def process_frames(frame_folder, output_folder): frame_files = sorted(os.listdir(frame_folder)) processed_frames = [] print(f"Processing frames...") for i in tqdm(range(len(frame_files) - 1)): frame1 = cv2.imread(os.path.join(frame_folder, frame_files[i])) frame2 = cv2.imread(os.path.join(frame_folder, frame_files[i + 1])) # Ensure frames are of the same size if frame1.shape != frame2.shape: continue # Add the frames and find the median pixel by pixel new_frame = cv2.add(frame1, frame2) median_frame = cv2.medianBlur(new_frame, 3) # You can adjust the kernel size here # Save the processed frame processed_filename = f"processed_frame_{i:04d}.jpg" cv2.imwrite(os.path.join(output_folder, processed_filename), median_frame) processed_frames.append(median_frame) print("Frames processing complete.") return processed_frames # Combine processed frames into the final video def combine_frames(processed_frames, output_video_path): if not processed_frames: print("No frames to combine.") return height, width, _ = processed_frames[0].shape fourcc = cv2.VideoWriter_fourcc(*"mp4v") # You can change codec here video_writer = cv2.VideoWriter(output_video_path, fourcc, 30, (width, height)) print(f"Combining frames into final video...") for i, frame in tqdm(enumerate(processed_frames), total=len(processed_frames)): video_writer.write(frame) video_writer.release() print(f"Video saved at {output_video_path}") # Main function to run the entire process def main(source_folder, output_folder, video_filename): create_dirs(output_folder) video_path = os.path.join(source_folder, video_filename) frame_folder = os.path.join(output_folder, "frames") # Step 1: Extract frames from video extract_frames(video_path, frame_folder) # Step 2: Process frames (e.g., averaging and median calculation) processed_frames = process_frames(frame_folder, output_folder) # Step 3: Combine frames into the final video output_video_path = os.path.join(output_folder, "output_video.mp4") combine_frames(processed_frames, output_video_path) # Step 4: Clean up the frames after processing to save space shutil.rmtree(frame_folder) print("Temporary frame files deleted.") if __name__ == "__main__": source_folder = "source_video_folder" # Folder containing your video file output_folder = "output_folder" # Folder where processed frames and final video will be saved video_filename = "video.mp4" # Name of the video file in the source folder main(source_folder, output_folder, video_filename)
Leave a Comment