Open-Sora / tools /datasets /csvutil.py
kadirnar's picture
Upload 98 files
e7d5680 verified
raw
history blame contribute delete
No virus
3 kB
import argparse
import csv
import os
from tqdm import tqdm
# path, name, #frames
PREFIX = [
"The video shows",
"The video captures",
"The video features",
"The video depicts",
"The video presents",
"The video features",
"The video is ",
"In the video,",
]
def get_video_length(path):
import cv2
cap = cv2.VideoCapture(path)
return int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
def main(args):
input_path = args.input
output_path = args.output
if output_path is None:
name = os.path.basename(input_path)
name, ext = os.path.splitext(name)
if args.fmin is not None:
name += f"_fmin_{args.fmin}"
if args.fmax is not None:
name += f"_fmax_{args.fmax}"
if args.remove_empty_caption:
name += "_rec"
if args.remove_caption_prefix:
name += "_rcp"
if args.root is not None:
name += f"_root"
if args.relength:
name += "_relength"
output_path = os.path.join(os.path.dirname(input_path), name + ext)
with open(input_path, "r") as f:
reader = csv.reader(f)
data = list(reader)
print("Number of videos before filtering:", len(data))
data_new = []
for i, row in tqdm(enumerate(data)):
path = row[0]
caption = row[1]
n_frames = int(row[2])
if args.fmin is not None and n_frames < args.fmin:
continue
if args.fmax is not None and n_frames > args.fmax:
continue
if args.remove_empty_caption and len(caption) == 0:
continue
if args.remove_caption_prefix:
for prefix in PREFIX:
if caption.startswith(prefix):
caption = caption[len(prefix) :].strip()
if caption[0].islower():
caption = caption[0].upper() + caption[1:]
row[1] = caption
break
if args.root is not None:
row[0] = os.path.join(args.root, path)
if args.relength:
n_frames = get_video_length(row[0])
row[2] = n_frames
data_new.append(row)
print("Number of videos after filtering:", len(data_new))
with open(output_path, "w") as f:
writer = csv.writer(f)
writer.writerows(data_new)
print("Output saved to", output_path)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("input", type=str)
parser.add_argument("--output", type=str, default=None)
parser.add_argument("--fmin", type=int, default=None)
parser.add_argument("--fmax", type=int, default=None)
parser.add_argument("--root", type=str, default=None)
parser.add_argument("--remove-empty-caption", action="store_true")
parser.add_argument("--remove-caption-prefix", action="store_true")
parser.add_argument("--relength", action="store_true")
args = parser.parse_args()
main(args)