|
import argparse |
|
import csv |
|
import os |
|
|
|
from tqdm import tqdm |
|
|
|
|
|
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) |
|
|