import pandas as pd import subprocess import os from tqdm import tqdm def slice_sign_dataset(csv_path, video_dir="fsl-data/raw_videos", output_dir="fsl-data/sliced_dataset"): df = pd.read_csv(csv_path) print(f"[*] Beginning slicing of {len(df)} samples...") for idx, row in tqdm(df.iterrows(), total=len(df)): filename = row['filename'] label = row['label'] start_f = int(row['start_frame']) end_f = int(row['end_frame']) video_stem = os.path.splitext(filename)[0] target_folder = os.path.join(output_dir, video_stem, label) os.makedirs(target_folder, exist_ok=True) output_filename = f"sample_{idx:04d}.mp4" output_path = os.path.join(target_folder, output_filename) if os.path.exists(output_path): continue start_sec = start_f / 30.0 duration_sec = (end_f - start_f) / 30.0 input_path = os.path.join(video_dir, filename) cmd = [ 'ffmpeg', '-y', '-ss', str(start_sec), '-i', input_path, '-t', str(duration_sec), '-c', 'copy', '-loglevel', 'error', output_path ] try: subprocess.run(cmd, check=True) except subprocess.CalledProcessError as e: print(f"[!] Error slicing {filename} at index {idx}: {e}") if __name__ == "__main__": slice_sign_dataset("master_annotations.csv")