Yuwen2024/ACaM-Bench

Dataset

0

stars

3

commits

1

linked in READMEs

Jun 23, 2026

updated

camera-movement
video
vision-language

README

ACaM-Bench

ACaM-Bench is an atomic, multiple-choice benchmark for evaluating whether vision-language models can recognize fine-grained camera movements in real-world and synthetic videos. It covers a two-level cinematographic taxonomy of 17 atomic camera movement classes spanning translations, rotations, focal-length changes, static shots, and object-centric movements.

Splits

Split# ItemsTaskSource
real14644-way multiple choiceCurated real-world clips
syn11794-way multiple choiceAI-generated clips (Veo 3.1 fast preview)
binary1510Yes/No questionSynthetic clips (balanced 755 Yes / 755 No)

Note on externally-sourced clips (not redistributed). Some real items are sourced from other benchmarks and, to respect their original licenses, are not redistributed here. Filenames in the JSONLs match the originals — download the clips from each source and place them under the paths below:

SourceItemsPlace under
CameraBench454real_videos/Camera_Motion_Bench/videos/
ShotBench359real_videos/ShotBench/video/
CineTechBench79real_videos/CineTechBench/dataset/clips/

The remaining real clips (FavorBench, MotionBench, self-collected) and all synthetic clips are included in the archives.

Dataset Structure

ACaM-Bench/
├── real_video_test.jsonl      # 1464 entries (4-way MCQ, real)
├── syn_video_test.jsonl       # 1179 entries (4-way MCQ, synthetic)
├── binary_test.jsonl          # 1510 entries (Yes/No, synthetic)
├── real_videos.zip            # real-world video files (unzip in place)
├── syn_videos.zip             # synthetic video files, also used by binary (unzip in place)
└── train.zip                  # training videos archive (see "Training data")

The video files are distributed as zip archives. Each archive already contains its top-level folder, so unzip them in the repo root and the paths in the JSONLs (e.g. real_videos/foo.mp4, syn_videos/bar.mp4) resolve as-is:

unzip real_videos.zip   # -> real_videos/...
unzip syn_videos.zip    # -> syn_videos/...

Fields

Each line in the JSONL is a JSON object:

FieldTypeDescription
imagestringRelative path to the video file (e.g. real_videos/foo.mp4)
camera movementlist[string]Ground-truth camera movement label(s)
questionstringThe natural-language question shown to the model
optionsdictFour answer choices keyed AD
correct_answerstringLetter of the correct option
sourcestringOrigin of the clip
durationfloatVideo duration in seconds (real split only)

binary split fields

The binary split uses a simpler schema (no options / correct_answer):

FieldTypeDescription
imagestringRelative path to the video file (e.g. syn_videos/foo.mp4)
camera_motionlist[string]The motion the question asks about
questionstringA Yes/No question, e.g. "Does the camera perform an arc movement?"
labelstringGround-truth answer, Yes or No
sourcestringOrigin of the clip

Training data

The training videos are provided as a single archive, train.zip. The archive contains the per-source folders directly (e.g. DeDopShots/, …), so extract it into a folder named training_videos/ to match the relative paths used by the training annotations:

# download from the dataset repo, then:
mkdir -p training_videos
unzip train.zip -d training_videos/
# results in training_videos/DeDopShots/..., etc.

The accompanying training annotations (train.json, released with the code) refer to videos via paths like training_videos/<source>/<file>.mp4, which resolve once the archive is extracted as above.

Note on externally-sourced training data (not redistributed). To respect their original licenses, some training videos are not redistributed here — train.zip excludes them. To use the full training set, obtain the clips from each source and place them under the paths below (filenames in train.json match):

SourcePlace under
CameraBenchtraining_videos/CameraBench_train_videos/
ShotQAtraining_videos/ShotQA_Training/

Contributors

Yuwen2024

3 commits

Yuwen2024/ACaM-Bench

Dataset

0

stars

3

commits

1

linked in READMEs

Jun 23, 2026

updated

camera-movement
video
vision-language

README

ACaM-Bench

ACaM-Bench is an atomic, multiple-choice benchmark for evaluating whether vision-language models can recognize fine-grained camera movements in real-world and synthetic videos. It covers a two-level cinematographic taxonomy of 17 atomic camera movement classes spanning translations, rotations, focal-length changes, static shots, and object-centric movements.

Splits

Split# ItemsTaskSource
real14644-way multiple choiceCurated real-world clips
syn11794-way multiple choiceAI-generated clips (Veo 3.1 fast preview)
binary1510Yes/No questionSynthetic clips (balanced 755 Yes / 755 No)

Note on externally-sourced clips (not redistributed). Some real items are sourced from other benchmarks and, to respect their original licenses, are not redistributed here. Filenames in the JSONLs match the originals — download the clips from each source and place them under the paths below:

SourceItemsPlace under
CameraBench454real_videos/Camera_Motion_Bench/videos/
ShotBench359real_videos/ShotBench/video/
CineTechBench79real_videos/CineTechBench/dataset/clips/

The remaining real clips (FavorBench, MotionBench, self-collected) and all synthetic clips are included in the archives.

Dataset Structure

ACaM-Bench/
├── real_video_test.jsonl      # 1464 entries (4-way MCQ, real)
├── syn_video_test.jsonl       # 1179 entries (4-way MCQ, synthetic)
├── binary_test.jsonl          # 1510 entries (Yes/No, synthetic)
├── real_videos.zip            # real-world video files (unzip in place)
├── syn_videos.zip             # synthetic video files, also used by binary (unzip in place)
└── train.zip                  # training videos archive (see "Training data")

The video files are distributed as zip archives. Each archive already contains its top-level folder, so unzip them in the repo root and the paths in the JSONLs (e.g. real_videos/foo.mp4, syn_videos/bar.mp4) resolve as-is:

unzip real_videos.zip   # -> real_videos/...
unzip syn_videos.zip    # -> syn_videos/...

Fields

Each line in the JSONL is a JSON object:

FieldTypeDescription
imagestringRelative path to the video file (e.g. real_videos/foo.mp4)
camera movementlist[string]Ground-truth camera movement label(s)
questionstringThe natural-language question shown to the model
optionsdictFour answer choices keyed AD
correct_answerstringLetter of the correct option
sourcestringOrigin of the clip
durationfloatVideo duration in seconds (real split only)

binary split fields

The binary split uses a simpler schema (no options / correct_answer):

FieldTypeDescription
imagestringRelative path to the video file (e.g. syn_videos/foo.mp4)
camera_motionlist[string]The motion the question asks about
questionstringA Yes/No question, e.g. "Does the camera perform an arc movement?"
labelstringGround-truth answer, Yes or No
sourcestringOrigin of the clip

Training data

The training videos are provided as a single archive, train.zip. The archive contains the per-source folders directly (e.g. DeDopShots/, …), so extract it into a folder named training_videos/ to match the relative paths used by the training annotations:

# download from the dataset repo, then:
mkdir -p training_videos
unzip train.zip -d training_videos/
# results in training_videos/DeDopShots/..., etc.

The accompanying training annotations (train.json, released with the code) refer to videos via paths like training_videos/<source>/<file>.mp4, which resolve once the archive is extracted as above.

Note on externally-sourced training data (not redistributed). To respect their original licenses, some training videos are not redistributed here — train.zip excludes them. To use the full training set, obtain the clips from each source and place them under the paths below (filenames in train.json match):

SourcePlace under
CameraBenchtraining_videos/CameraBench_train_videos/
ShotQAtraining_videos/ShotQA_Training/

Contributors

Yuwen2024

3 commits