File size: 2,251 Bytes
7daf628 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | """
Converts frames to videos.
input_dir=/scratch/shared/beegfs/piyush/datasets/Jester/images/
output_dir=/scratch/shared/beegfs/piyush/datasets/Jester/videos/
python shared/scripts/convert_frames_to_videos.py --input_dir $input_dir --output_dir $output_dir
"""
import os
import sys
import decord
import moviepy.editor as mpy
from glob import glob
from moviepy.editor import ImageSequenceClip
import shared.utils as su
def create_video(image_paths, output_file, fps=12):
"""
Convert a list of image files into an MP4 video
Parameters:
- image_paths: List of image file paths (sorted in desired order)
- output_file: Output filename (e.g., 'output.mp4')
- fps: Frames per second (default 12)
"""
clip = ImageSequenceClip(image_paths, fps=fps, load_images=True)
clip.write_videofile(output_file, codec='libx264', logger=None)
if __name__ == "__main__":
# Read arguments
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--input_dir", type=str, required=True)
parser.add_argument("--output_dir", type=str, required=True)
parser.add_argument("--fps", type=int, default=12)
parser.add_argument("--extension", type=str, default="jpg")
parser.add_argument("--debug", action="store_true")
parser.add_argument("--overwrite", action="store_true")
args = parser.parse_args()
# Create output directory
os.makedirs(args.output_dir, exist_ok=True)
# Get list of all frame folders
print("Getting list of all frame folders...")
folders = os.listdir(args.input_dir)
# Run the process for each folder
iterator = su.log.tqdm_iterator(folders, desc="Converting frames to videos")
for folder in iterator:
# Get output path
save_path = os.path.join(args.output_dir, f"{folder}.mp4")
if os.path.exists(save_path) and not args.overwrite:
continue
# Get list of frames
frame_paths = glob(
os.path.join(args.input_dir, folder, f"*.{args.extension}"),
)
# Save it as a video
create_video(frame_paths, save_path, fps=args.fps)
if args.debug:
print("Debugging mode. Exiting after processing one folder.")
break
|