Motion Scout 50
Find motion files under a size limit you choose, and review them before copying.
Working Available to download. Below, a sample run from the terminal.
The problem
Pulling every motion file under a size limit out of years of project folders takes a day of sorting by hand.
What I built
A command line tool that finds the motion files, explains each choice, and copies only what fits, without touching a source file.
- Explains why each file was picked
- Unsure files go to review
- Copies, never moves or deletes
Features and limits
Built and tested
- Scores each video as motion or not, from name, folder, format and duration, and prints the reasons.
- Sorts into ready, too large and review. Unsure means review, never a guess.
- Dry run by default; --apply copies, never moves, deletes or overwrites.
- Optional re-encode with ffmpeg, kept only if the result fits the limit.
- CSV report of every file, its score, reasons and action.
- Skips render cache and proxy folders; refuses an output folder inside a scanned folder.
Limits
- Classification reads names and duration, not the picture. Badly named files land in review.
- Tested on Linux with Python 3.13 and ffmpeg 7. macOS and Windows not yet tested.
- Re-encode targets size, not quality: a long clip under a small limit will look soft, or stay in too large.
Planned
Configurable limit, dry run, better classification and no forced network downloads.
How to use
- Download and unzip. No install: it is one Python file.
- Dry run: python3 motion_scout.py "/path/to/Projects" --out "/path/to/Motion under 50MB"
- Read the list and the reasons.
- Run again with --apply to copy, add --reencode to fit oversized motion files (needs ffmpeg).
- Open motion-scout-report.csv. To remove the tool, delete its folder.
How it works
- Standard library only. ffprobe for duration when present; nothing is required or downloaded.
- Destination names are checked before every write, so nothing is ever overwritten.
- Re-encode: bitrate budget from the clip's duration, two attempts, result kept only if it is under the limit.
- Tests make their own clips with ffmpeg and compare source checksums before and after.
Tested versions & limits
- Pass Dry run writes nothing; classes right on synthetic clips Linux, Python 3.13, ffmpeg 7
- Pass Apply copies; source checksums unchanged Linux, Python 3.13
- Pass Second run never overwrites Linux, Python 3.13
- Pass Re-encode lands under the limit Linux, ffmpeg 7
- Pass Output inside a source is refused Linux, Python 3.13
- Pass Release: tests rerun from the unzipped package; public scan clean Linux
Last verified 2026-10-31.
Tested on Linux only.
Details
- Input
- User-selected folders
- Output
- Ready files, review queue and CSV report
- Runs in
- Python 3.9+ on macOS, Linux or Windows. ffmpeg optional. Tested on Linux only so far.
- Source
- Original, rebuilt from scratch