Safetensors
English
llava
video-retrieval
text-to-video-search
multimodal-embedding
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