Initial commit

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-19 22:45:04 -05:00
commit 33d1f89930
4 changed files with 796 additions and 0 deletions

70
README.md Normal file
View File

@@ -0,0 +1,70 @@
# ffsuper.sh — FFmpeg helper
`ffsuper.sh` is a Swiss-army FFmpeg helper that wraps common batch operations: resize presets, custom resizes, rotation, trimming, speedup, merge, lossless cut, 60fps interpolation, H.265 transcode, and simple finders.
## Quick start
```bash
chmod +x ffsuper.sh
./ffsuper.sh help
./ffsuper.sh examples
```
## Subcommands
- `preset <name>` (or call the preset name directly): `medium|medium60|medium5994|large|large60|small60|resize60|default|noaudio|noaudio-small|169to43|43to169`.
- `resize [opts] [file]`: Custom resize with audio; omit `file` to batch all `.mp4` in the directory.
- `small [opts] [file]`: Alias for `resize` (defaults to 960x540@29.97).
- `rotate <90cw|90ccw|180> [resize opts] [file]`: Rotate then resize; omit `file` to batch all `.mp4`.
- `trim <start> [end] <file>`: Trim then (optionally) resize; outputs `basename_START-END.mp4` (same naming as `cut`) at source size by default.
- `speedup <2x|4x> [file]`: Speed video/audio; outputs `*_2x.mp4` or `*_4x.mp4`. No `file` means batch all `.mp4`.
- `merge [out]`: Concat all `*.mp4` into `merged.mp4` (or custom name); always processes all `.mp4` in the directory.
- `cut <start> [end] <file>`: Lossless segment copy (no re-encode).
- `interpolate60 [file]`: Motion interpolation to 60fps; omit `file` to batch all `.mp4`; outputs `*_60fps.mp4`.
- `h265 [file]`: Transcode to H.265, keep resolution, copy audio, safe subtitles; omit `file` to batch all `.mp4`.
- `find <hevc|60fps|large|medium>`: Probe current dir and list matching files.
- `help`, `examples`.
## Common examples
- Default resize (960x540@29.97): `./ffsuper.sh resize` (options below)
- `./ffsuper.sh medium``*_medium.mp4` (1280x720@29.97).
- `./ffsuper.sh medium60``*_medium_60fps.mp4` (1280x720@60).
- `./ffsuper.sh resize60``*_60fps.mp4` (960x540@60).
- `./ffsuper.sh large``*_large.mp4` (1920x1080@29.97).
- `./ffsuper.sh large60``*_large_60fps.mp4` (1920x1080@60).
- `./ffsuper.sh small``*_resized.mp4` (960x540@29.97; alias of resize).
- `./ffsuper.sh small60``*_60fps.mp4` (960x540@59.94, ~7M).
- `./ffsuper.sh 169to43``*_aspectfixed.mp4` (force 4:3).
- `./ffsuper.sh 43to169``*_aspectfixed.mp4` (force 16:9).
- `./ffsuper.sh noaudio input.mp4``*_noaudio.mp4` (drop audio only, copy video, keep resolution).
- `./ffsuper.sh resize --no-audio``*_noaudio.mp4`.
- `./ffsuper.sh rotate 90cw``*_rotated.mp4`.
- `./ffsuper.sh rotate 180``*_rotated.mp4` (180° flip).
- `./ffsuper.sh merge myjoined.mp4` → concat all mp4s.
- `./ffsuper.sh cut 00:01:00 00:02:00 input.mp4` → lossless slice.
- `./ffsuper.sh h265 input.mp4` → H.265 output, same resolution.
## Resize options (used by resize/rotate and presets)
- `--width N` (default 960)
- `--height N` (default 540)
- `--fps F` (default `30000/1001`; empty keeps source)
- `--bitrate BR` (default 2500k for HW encode)
- `--codec NAME` (`libx264` default, or `h264_videotoolbox`)
- `--audio MODE` (`aac` default, `copy`, or `none`)
- `--audio-br BR` (default 160k)
- `--suffix STR` (default `_resized`, overridden by some commands/presets)
- `--overwrite` (clobber outputs)
- `--dry-run` (print commands only)
- `--force-aspect R` (e.g., 4:3 or 16:9, applies setdar)
- `--no-audio` sets `RES_AUDIO=none` and default suffix `_noaudio`.
## Notes and behaviors
- Rotation defaults to suffix `_rotated`.
- Trim keeps source resolution unless you pass explicit `--width/--height`.
- Trim output naming matches `cut`: `basename_START-END.mp4`.
- `noaudio` stream-copies video and drops audio without resizing.
- Presets set their own suffixes as noted above.
- Finder uses `ffprobe` to avoid brittle grep parsing.
- Except for `merge`, `trim`, `cut`, and `find`, providing a single mp4 limits processing to that file; omit it to process all `.mp4` in the directory.
- Existing outputs prompt for overwrite; `--overwrite` (where available) auto-accepts.
## Dependencies
- FFmpeg/ffprobe in PATH (`brew install ffmpeg` on macOS).