Spaces:
Paused
Paused
| import cv2 | |
| import os | |
| import hashlib | |
| import numpy as np | |
| from moviepy import ImageSequenceClip | |
| def create_video_from_images(image_folder="images", output_video="videos/output_video.mp4", fps=30): | |
| """Create MP4 with lossless encoding using MoviePy""" | |
| os.makedirs(os.path.dirname(output_video), exist_ok=True) | |
| # Get sorted list of images | |
| image_files = sorted([os.path.join(image_folder, f) | |
| for f in os.listdir(image_folder) if f.endswith('.png')], | |
| key=lambda x: int(os.path.basename(x).split('.')[0])) | |
| # Create video with lossless settings | |
| clip = ImageSequenceClip(image_files, fps=fps) | |
| # FFmpeg parameters for lossless encoding | |
| clip.write_videofile( | |
| output_video, | |
| codec='libx264rgb', | |
| preset='ultrafast', | |
| ffmpeg_params=[ | |
| '-crf', '0', # Lossless | |
| '-color_range', '2', # Full color range | |
| '-pix_fmt', 'bgr24' # Match OpenCV's BGR format | |
| ] | |
| ) | |
| def extract_frames_from_video(video_path="videos/output_video.mp4", output_folder="extracted_frames"): | |
| """Extract frames with OpenCV and hash verification""" | |
| os.makedirs(output_folder, exist_ok=True) | |
| cap = cv2.VideoCapture(video_path) | |
| frame_count = 0 | |
| while True: | |
| success, frame = cap.read() | |
| if not success: | |
| break | |
| output_path = os.path.join(output_folder, f"{frame_count}.png") | |
| cv2.imwrite(output_path, frame, [cv2.IMWRITE_PNG_COMPRESSION, 0]) | |
| with open(output_path, 'rb') as f: | |
| current_hash = hashlib.sha256(f.read()).hexdigest() | |
| print(f"Frame {frame_count:04d} hash: {current_hash}") | |
| frame_count += 1 | |
| cap.release() | |