Spaces:
Sleeping
Sleeping
| import numpy as np | |
| import cv2 | |
| class ColorGrading: | |
| def apply_commercial_grade(self, clip): | |
| def color_grade(get_frame, t): | |
| frame = get_frame(t) | |
| enhanced = np.clip(frame * 1.05 + 3, 0, 255) | |
| enhanced = self._temperature_adjust(enhanced) | |
| return enhanced.astype(np.uint8) | |
| return clip.fl(color_grade) | |
| def _temperature_adjust(self, frame): | |
| frame[:, :, 0] = np.clip(frame[:, :, 0] * 1.02, 0, 255) | |
| frame[:, :, 2] = np.clip(frame[:, :, 2] * 0.98, 0, 255) | |
| return frame | |
| class TransitionEffects: | |
| def crossfade(self, clip, duration): | |
| return clip.crossfadein(duration) | |
| def slow_zoom(self, clip, zoom_factor=0.05): | |
| def zoom_effect(get_frame, t): | |
| frame = get_frame(t) | |
| progress = t / clip.duration | |
| current_zoom = 1 + progress * zoom_factor | |
| h, w = frame.shape[:2] | |
| new_h, new_w = int(h / current_zoom), int(w / current_zoom) | |
| start_y = (h - new_h) // 2 | |
| start_x = (w - new_w) // 2 | |
| cropped = frame[start_y:start_y + new_h, start_x:start_x + new_w] | |
| return cv2.resize(cropped, (w, h)) | |
| return clip.fl(zoom_effect) | |