CoolFace
Datasetpublic

joakes90/Auto_Engine_Classification

Engine Sound Windows (YouTube-derived, metadata-only) Timestamps and weak labels for training an engine-configuration audio classifier (v-twin vs. inline-4 vs. flat-6, etc.) from short audio windows. This dataset does not contain audio. Each row points at a public YouTube video id plus a (start_sec, end_sec) window; you fetch and slice the audio yourself (see Reconstructing audio below). Why metadata-only The source audio was collected by searching YouTube (via… See the full description on the dataset page: https://huggingface.co/datasets/joakes90/Auto_Engine_Classification.

sourceHugging Facecc-by-sa-4.0updated 2mo agoView on Hugging Face
0likes34downloads
Dataset Card

Engine Sound Windows (YouTube-derived, metadata-only)

Timestamps and weak labels for training an engine-configuration audio classifier (v-twin vs. inline-4 vs. flat-6, etc.) from short audio windows. This dataset does not contain audio. Each row points at a public YouTube video id plus a (start_sec, end_sec) window; you fetch and slice the audio yourself (see Reconstructing audio below).

Why metadata-only

The source audio was collected by searching YouTube (via `yt-dlp`) for engine-sound terms and downloading matching videos. The dataset author does not hold redistribution rights to that audio, so — following the precedent set by AudioSet, MusicCaps, and FSD50K for exactly this situation — only the video id, window timestamps, and derived labels are published here, not audio bytes. This also means the cc-by-sa-4.0 license above covers only this repository's metadata (ids, timestamps, labels); the underlying YouTube videos remain under their original creators' copyright and are not relicensed or redistributed by this dataset in any form.

Dataset structure

ColumnTypeMeaning
window_idstringUnique id for this window (winNNN), stable across the whole corpus
youtube_idstring11-character YouTube video id (https://www.youtube.com/watch?v=<youtube_id>)
engine_classstringEngine configuration label, e.g. v8_flat, i4_diesel, single_two_stroke
start_sec / end_secfloatWindow bounds within the source video, in seconds
contains_targetboolSee Label semantics
quality_flagboolSee Label semantics
splitstringtrain or test — assigned per source video, so every window from one video stays in the same split

Windows are 2.0 seconds long with 1.0 second of step between consecutive windows (50% overlap), confirmed directly from the underlying manifest's timestamps.

Label semantics

contains_target and quality_flag are model-derived, not human-verified — they come from running `panns_inference`'s AudioTagging model (trained on AudioSet) over each window and thresholding two sets of its 527 class scores:

  • contains_target = True when the window's max score across a set of engine/vehicle AudioSet classes exceeds 0.585 — i.e. an engine sound was likely detected.
  • quality_flag = True when the window's max score across a set of background-noise/contamination AudioSet classes exceeds 0.2 — i.e. contamination was likely detected.

`quality_flag = True` is a caution flag, not an endorsement — despite the name, it does not mean the window is good quality. Treat both columns as weak, noisy supervision (useful for filtering or as auxiliary features) rather than ground truth.

engine_class, by contrast, comes from which search query the source video was found under — also not independently verified per-video (see Known limitations).

Engine classes

34 engine classes, 3,877 source videos, after exclusions below:

Engine classFilesWindowsTrainTest
2_rotor14143121364526669
h1210486330261837
h292560124033315679
h411240657322538404
h697843417091113430
i2_180127887717371615055
i2_180_two_stroke41916264872675
i2_27016913445611071223744
i2_3606324789189445845
i2_360_two_stroke441212411617507
i3133574964590911587
i439416855314094927604
i4_crossplane134682215463413587
i4_diesel7631606277213885
i511529789224197370
i5_diesel5221759195132246
i615749570405409030
i6_diesel52298301111718713
single_four_stroke101420452977112274
single_two_stroke9444185359738212
v10_72156630685150111567
v12112378822654811334
v2_4513816581514438721428
v2_909783045752197826
v48031392226018791
v4_two_stroke41975077352015
v6_1207231924240997825
v6_60211607534832412429
v6_90_even7643334364426892
v8_cross26514056211163128931
v8_diesel126477163005217664
v8_flat180811896536415825
v8_voodoo65349372463410303
vr6541126010374886

Class sizes are heavily imbalanced (10 to 394 files per class) — account for this when sampling/weighting during training.

Known limitations

  • Weak, auto-derived labels. contains_target/quality_flag come from an AudioSet-trained tagger's thresholded scores, not human review (see Label semantics).
  • Class imbalance. File counts per class range from 10 (h12) to 394 (i4).
  • All classes have representation in both train and test sets (no class has zero test windows after conflict exclusions).
  • Cross-class conflicts. Cross-referencing every video id against every engineclass it was scraped under found videos that had been pulled into **more than one conflicting engineclass** (almost certainly multi-engine compilation/comparison videos caught by more than one search query). All windows sourced from any of these videos were dropped entirely (99,105 of 1,983,082 rows, 5.0%) rather than guessing which label was correct. This also resulted in 9 engine classes being dropped entirely from the export (they had no videos that didn't also appear in at least one conflicting class). The class table above reflects the final, post-conflict list.
  • Link rot. Since only YouTube ids are published (see Why metadata-only), some fraction of source videos will become unavailable over time as creators delete or privatize them — unlike a self-hosted audio dataset, this one can shrink on its own.
  • `engine_class` isn't independently verified per video beyond the cross-class-conflict check above — a video could still be mislabeled by its original search query in a way that doesn't produce a detectable cross-class conflict (e.g. a single video mislabeled but never scraped under any other class).

Reconstructing audio

For a given row, download the source video's audio and trim to the window:

bash
yt-dlp -f bestaudio -x --audio-format m4a \
  "https://www.youtube.com/watch?v=<youtube_id>" -o source.m4a

ffmpeg -i source.m4a -ss <start_sec> -to <end_sec> -c copy window.m4a

For batch reconstruction, group rows by youtube_id first so each video is downloaded once regardless of how many windows come from it.

License and usage

The labels, timestamps, and ids in this repository are released under cc-by-sa-4.0. This does not extend any rights to the underlying YouTube video content, which remains the property of its original creators — this dataset does not redistribute, host, or relicense that audio. Commercial users should independently verify their own right to use any audio they fetch via the ids in this dataset.