Repository navigation
Releases: noxend/shrinkit
Release list
v3.2.0
shrinkit: edit and shrinkit: run, which replace mark cuts, presets managed from the command line, and documentation at https://noxend.github.io/shrinkit/.
New
shrinkit: editon up to 10 recordings writes one text file with a block for each: its own preset, cuts and settings;merge = truejoins the results.shrinkit: runon that file runs it in a terminal window, a line per step and a progress bar.shrinkit editandshrinkit rundo the same from a terminal.shrinkit preset add,edit,removeandsyncmake, open or remove a preset and its right-click entry in one command; a removed preset's file goes to the trash.
Changed
- mark cuts is gone and
.cutsfiles are no longer read: put their ranges into an edit file, or pass them with--cut. - edit and merge take at most 10 recordings at a time.
Fixed
- A preset name can no longer reach outside presets/.
--cut 0-endsays nothing was left to encode instead of an ffmpeg error, and a missing ffprobe is named, in a banner too.
Update with brew upgrade --cask shrnkit. It rebuilds the right-click entries: mark cuts goes, edit and run come.
v3.1.0
shrinkit doctor, and fixes for failures that used to say nothing.
New
shrinkit doctorchecks the install and says what is wrong and what to run to fix it: which shrinkit is running, ffmpeg, the working folder, the watcher, the right-click entries, the settings, the presets and what is waiting in input/. It only reads, and its output can go into an issue as it is.
Fixed
- In settings.conf, a last line with no line break after it and a first line behind a byte-order mark were dropped without a word; both are read now. A line without "=" is logged.
shrinkit config <key> <value>no longer deletes a last line with no line break. - An & or < in the working folder's name no longer breaks the watcher, and a $ or a backtick in a folder or preset name no longer runs as code when you right-click.
shrinkit setupsays so when macOS refuses to start the watcher, instead of "Done."- A lock left by a stopped run is taken over when its process number now belongs to another program, where it used to stop every later run.
- An empty file in input/ is logged as empty, not as still being written.
Update with brew upgrade --cask shrnkit. It rebuilds the right-click entries, so the ones from 3.0.0 get the new quoting.
v3.0.0
shrinkit now installs and updates through Homebrew. The install.sh, update.sh and uninstall.sh scripts are gone.
Install
brew tap noxend/shrinkit https://github.com/noxend/shrinkit
brew install --cask noxend/shrinkit/shrnkitshrinkit is not in Homebrew's official catalog. The first command adds this repository as a tap, and Homebrew installs and updates shrinkit from there. The package is shrnkit because Homebrew already has a different app named shrinkit. The command is still shrinkit. Update with brew upgrade --cask shrnkit. brew uninstall --cask shrnkit removes the watcher, the right-click entries and the command, and leaves your recordings and settings where they are.
Coming from 2.x
Install with brew over the old version. It keeps your working folder, settings and presets, takes over the watcher and the right-click entries, and removes the old copy from ~/.local/bin. You no longer need the clone.
New
shrinkit: mergejoins several recordings into one. Select them in Finder, right-click, pick it, then shrink the result.--keep 1:00-2:00names the part to keep, the other side of--cut.shrinkit config folder <path>moves the working folder and takes your settings and presets along.shrinkit setupandshrinkit teardownreplace the old scripts when you run from a clone.
Fixed
- Right-clicking a recording on the Desktop, in Documents or in Downloads produces the result instead of failing.
- Logging out or quitting during an encode stops ffmpeg and removes the partial file.
shrinkit configshows the values in effect, where it used to show the file.- A comma as the decimal separator in the system locale no longer breaks runs.
v2.0.0
Cutting a stretch out of a recording, and five settings removed.
New
-
Cut a stretch out of a recording. On the command line, name the ranges with
--cut, once each:shrinkit --cut 0:32-0:35 --cut 2:30-end recording.mov
Or put a
<recording>.cutstext file next to the video, one range per line, which is what the
right-click menu uses and what survives being closed and come back to.shrinkit: mark cuts
opens the video and the sidecar together, so you can read the timestamps off the player while you
type them in.0-0:20 0:32-0:35 1:10-1:12.5 2:30-end0is the start andendis the real length of the clip, so trimming either edge is the same
range as everything else. The cut frames are never written to the output at all, which is the
point if you are cutting a password or a private chat out of a recording rather than just
shortening it.--cutreplaces the sidecar for that run rather than adding to it, the same way
every other flag beats the config file. -
keep_daysdeletes originals from.processed/once they are that many days old. It defaults to
0, which keeps them forever, so nothing changes until you set it. -
A
sharppreset atcrf = 18, for a clip going into a pull request where the reviewer has to
read the diff rather than just see that something moved.
Changed
Five settings are gone. An old settings.conf still loads, they are simply ignored from now on, so
read this list before upgrading rather than after.
-
output_diris gone. Results go tooutput/again. If you had pointed it somewhere else, that is
where your recordings stopped arriving. To send them elsewhere now, replaceoutput/with a
symlink to wherever you want them. -
output_suffixis gone, and output files are named after the preset that ran.clip.movcomes
back asclip-tiny.mp4, or plainclip.mp4when no preset was named. It used to be
clip-2x.mp4, so anything downstream matching that pattern needs a second look. -
trim_idleis gone. It renumbered timestamps against the frame rate the container claims, and
screen recordings lie about that: a ReplayKit capture reports 120 while actually running nearer
32. Measured on a real clip, a filter tuned to drop zero frames still compressed 24.6 seconds
down to 7.8. It had been doing that to every recording since v1.0.0, on top of whatever it
legitimately trimmed. Cutting a stretch out on purpose covers the same ground and does not read a
frame rate from anywhere. -
notify_titleis gone; the banner says shrinkit. -
check_updatesis gone. It ran agit fetchfrom inside the encoder, which is not where a
network call belongs.
Presets are renamed, and there are three of them: 2x for speed, sharp for detail, tiny for
size. default was empty and only held a place in the menu, and chat said where the file was
going rather than what it does. ./update.sh renames your files in place and leaves any preset you
wrote yourself alone, but --preset chat in a script or an alias needs changing to --preset tiny
by hand.
Fixed
- A failed move into place is reported instead of finishing silently and leaving a stray part-file
behind. - A cut range that starts at or past the end of the clip is rejected, instead of encoding a full
length copy and reporting a cut that never happened. - A
.cutssidecar selected in Finder alongside its video is skipped instead of being handed to
ffmpeg as a video. - A locked or unwritable original no longer files its
.cutssidecar away without it. - The warning about a misnamed sidecar no longer fires for an unrelated recording whose name starts
the same way. - Two runs writing the same output name no longer produce an unplayable file. Each encode goes to a
hidden part-file and is renamed into place. fpsis capped at 240, so a typo cannot start an encode that never finishes.- A cut range typed as exactly
6.0-6.1is no longer rejected for being a hair under a tenth of a
second. - The frame rate cap is applied after the speed change on the cuts path too, so
fps = 20with
cuts and 3x speed no longer ships at 60.
Upgrading
./update.shYour recordings carry over untouched, and so does settings.conf. What needs your attention is the
Changed list above: output_dir and output_suffix change where files land and what they are
called, and a renamed preset breaks any script that named the old one.
v1.0.0
Renamed from demo-video-optimizer. The command, the launchd label, the environment variables and
the working folder all moved with it.
New
trim_idlecuts out the parts where the screen is not changing. A 20 second test clip with four
seconds of movement in it came out at 2 seconds instead of 10. Off by default. It also stands
down on any file that keeps its audio, because dropping video frames would leave the sound behind.- Every setting works as a flag, so one file can be handled differently without editing anything:
shrinkit --speed 4 --crf 32 recording.mov. - Presets. Put a file of settings in
presets/and use it with--preset chat. Any preset can get
its own right-click entry:shrinkit preset install chat. shrinkit configprints what is in effect.shrinkit config crf 32changes one line and leaves
the comments around it alone.shrinkit config editopens the file.
Changed
- Settings are
key = valueinsettings.conf. An oldersettings.jsoncis converted during
install and kept as a.bak. The JSON version started a JavaScript interpreter on every single
encode to read fifteen keys, and one missing comma put every setting back to its default without
telling you. output_suffixunderstands{speed}, sospeed = 3stops producing files called-2x.- The Finder entry is now called Shrink Video.
Fixed
- A queue of large files could lose its lock halfway through an encode, once the run passed thirty
minutes, and a second run would pick the same file up. The lock now records the pid holding it,
and only a run that has actually died gets overruled. - A
//or a#inside a setting value no longer cuts the value short. --helpprints usage instead of being treated as a filename.
The test suite had 54 checks before this release and has 89 now. GitHub Actions runs them plus
shfmt on a macOS runner.
Upgrading
./update.shThat pulls and reinstalls. It takes the old demo-video-optimizer install apart, moves
~/Movies/demo-recordings to ~/Movies/shrinkit, and converts your settings. Recordings, settings
and presets all carry over.