# Video Content Detection + Renaming — Production Script

A working YOLO-based pipeline for detecting video content from frames and renaming generically-named recovered video files (FILE000.MOV pattern).

## Script

Saved at `/tmp/rename_videos.py` and `/tmp/rename_videos2.py` on rayserver.

### Workflow
1. List all files in the target directory starting with "FILE" (generically-named recovered files)
2. Extract a video frame at 3 seconds using ffmpeg; fall back to 1 second for short clips
3. Run YOLOv8n on CPU for content detection
4. Build descriptive filename: `{people_count}_people_{object1}_{object2}.mov`
5. Handle filename collisions with `_1`, `_2` suffixes
6. Files with no detections → `scene.mov`

### Key design decisions
- **CPU inference** — Viable for 80-100 files at ~3-5s/file. GPU not needed for this scale
- **ffmpeg single-frame extraction** — Much faster than processing the entire video
- **3-second offset** — Early enough to avoid blank intros, late enough to have content
- **startswith("FILE") guard** — Makes the script idempotent (won't rename already-named files)

### Performance reference
- **80 files**: ~4-6 minutes total (i7-10700K, CPU)
- **~60 files** get descriptive names, **~20** remain as `scene` (blank/dark)

### Full script (80-file version)
See `/tmp/rename_videos.py` and `/tmp/rename_videos2.py` for the two-phase version that handled 80 files.

### Edge cases
- `.3GP` files are valid video containers — include them
- Short clips (<3s): ffmpeg clips to available duration, produces a valid frame
- Broken headers: ffmpeg hangs if file is truncated — always set `timeout=20`
- Collisions: use `while os.path.exists(dst)` loop with incrementing counter
