1.7 KiB
1.7 KiB
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
- List all files in the target directory starting with "FILE" (generically-named recovered files)
- Extract a video frame at 3 seconds using ffmpeg; fall back to 1 second for short clips
- Run YOLOv8n on CPU for content detection
- Build descriptive filename:
{people_count}_people_{object1}_{object2}.mov - Handle filename collisions with
_1,_2suffixes - 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
.3GPfiles 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