Gros refactoring
This commit is contained in:
parent
6008aa68f6
commit
4a6bfc951f
368 changed files with 22503 additions and 3 deletions
76
backend/convert_video.py
Normal file
76
backend/convert_video.py
Normal file
|
@ -0,0 +1,76 @@
|
|||
import logging
|
||||
import os
|
||||
import cv2
|
||||
|
||||
def convert_video(images_path, output_path, width, height, fps, stilltime):
|
||||
"""
|
||||
Convert images in output_path into a mp4 file using OpenCV.
|
||||
:param images_path: Path to the directory containing input images
|
||||
:param output_path: Path for the output video file
|
||||
:param width: Width of the output video
|
||||
:param height: Height of the output video
|
||||
:param fps: Frames per second for the output video
|
||||
:param stilltime: Duration (in seconds) each image should be displayed
|
||||
:return: True if conversion was successful, False otherwise
|
||||
"""
|
||||
logging.info(f"Starting video conversion. OpenCV version: {cv2.__version__}")
|
||||
logging.info(f"Parameters: images_path={images_path}, output_path={output_path}, width={width}, height={height}, fps={fps}, stilltime={stilltime}")
|
||||
|
||||
# Check if the output directory exists
|
||||
output_dir = os.path.dirname(output_path)
|
||||
if not os.path.exists(output_dir):
|
||||
os.makedirs(output_dir)
|
||||
logging.info(f"Created output directory: {output_dir}")
|
||||
|
||||
# Define a frame array
|
||||
frame_array = []
|
||||
|
||||
# List all files in images_path
|
||||
files = [f for f in os.listdir(images_path) if os.path.isfile(os.path.join(images_path, f))]
|
||||
files.sort()
|
||||
logging.info(f"Found {len(files)} files in {images_path}")
|
||||
|
||||
# Read and process images
|
||||
for i, file in enumerate(files):
|
||||
file_path = os.path.join(images_path, file)
|
||||
logging.info(f'Processing image {i+1}/{len(files)}: {file_path}')
|
||||
img = cv2.imread(file_path)
|
||||
if img is None:
|
||||
logging.error(f"Failed to read image: {file_path}")
|
||||
continue
|
||||
if img.shape[:2] != (height, width):
|
||||
logging.info(f"Resizing image from {img.shape[:2]} to {(height, width)}")
|
||||
img = cv2.resize(img, (width, height))
|
||||
for _ in range(int(fps * stilltime)):
|
||||
frame_array.append(img)
|
||||
|
||||
logging.info(f"Total frames to write: {len(frame_array)}")
|
||||
|
||||
# Create video writer
|
||||
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
|
||||
video_writer = cv2.VideoWriter(output_path, fourcc, fps, (width, height))
|
||||
|
||||
if not video_writer.isOpened():
|
||||
logging.error(f"Failed to open VideoWriter for {output_path}")
|
||||
return False
|
||||
|
||||
# Write frames
|
||||
for i, frame in enumerate(frame_array):
|
||||
video_writer.write(frame)
|
||||
if i % 100 == 0:
|
||||
logging.info(f"Wrote frame {i+1}/{len(frame_array)}")
|
||||
|
||||
video_writer.release()
|
||||
|
||||
# Verify output
|
||||
if os.path.exists(output_path):
|
||||
file_size = os.path.getsize(output_path)
|
||||
logging.info(f'Finished converting. Output file: {output_path}, Size: {file_size} bytes')
|
||||
if file_size > 1000:
|
||||
return True
|
||||
else:
|
||||
logging.warning(f"Output file is suspiciously small: {file_size} bytes")
|
||||
else:
|
||||
logging.error(f"Output file was not created: {output_path}")
|
||||
|
||||
return False
|
Loading…
Add table
Add a link
Reference in a new issue