diff --git a/src/bin/butcher b/src/bin/butcher index 10b47c2..3db56cf 100755 --- a/src/bin/butcher +++ b/src/bin/butcher @@ -1,70 +1,31 @@ #!/usr/bin/env nu -# Copyright 2025 Marty Sluijtman -# Distributed under the terms of the GPLv3 license -let savedir = match ($env.SCROTDIR | is-empty) { - true => $"($env.HOME)/Pictures/Screenshots" - false => $env.SCROTDIR +def main [input: string, --resize(-r): string, --length(-l): string = "00:00:05"] { + let resize = if ($resize | is-empty ) { "" } else { $resize } + destroy (glitch $input $resize $length) } -let date = ^date -Iseconds -let filename = $"($savedir)/($date)_screenshot.png" - -def notify [message: string] { - ^notify-send "Butcher" $message +def glitch [input: string, resize: string, length: string] { + let output = [ ($input | path parse | get stem ) "_glitch.mkv" ] | str join + let filter = if ($resize | is-not-empty) { + $"\'scale=($resize):-2,fps=60,frei0r=filter_name=glitch0r:filter_params=0.2|0.8|.04|1,rgbashift=rh=4:bh=-2,interlace=lowpass=complex\'" + } else { + "\'fps=60,frei0r=filter_name=glitch0r:filter_params=0.2|0.8|.04|1,rgbashift=rh=4:bh=-2,interlace=lowpass=complex\'" + } + #echo $"ffmpeg -loop 1 -i ($input) -filter_complex ($filter) -to ($length) ($output) -y" + ffmpeg -loop 1 -i $input -filter_complex $filter -to $length $output -y + echo $output } -def clipboard [] { - $in | ^pngquant - | ^xclip -sel clip -t image/png -} - -def main [--clipboard (-c)] { - let scrot = ^maim -ui root | complete - match $clipboard { - true => { - $scrot.stdout | clipboard - notify "Shot entire screen and tossed the output to the clipboard" - } - false => { - $scrot.stdout | save $filename - notify $"Shot entire screen and saved the result to:\n($filename)" - } - } -} - -def "main window" [--clipboard (-c)] { - let window = ^xdotool getactivewindow - let scrot = ^maim -ui $window | complet - match $clipboard { - true => { - $scrot.stdout | clipboad - notify $"Took screenshot of focussed window and tossed it to clipboard" - } - false => { - $scrot.stdout | save $filename - notify $"Saved screenshot of focussed window and save it to:\n($filename)" - } - } -} - -def "main selection" [--clipboard(-c)] { - let scrot = ^maim -su | complete - match $scrot.exit_code { - 0 => { - match $clipboard { - true => { - $scrot.stdout | clipboard - notify "Took screenshot and tossed it to clipboard" - } - false => { - $scrot.stdout | save $filename - notify $"Shot selection and saved it to:\n($filename)" - } - } - } - _ => { - notify "Screenshot selection cancelled" - exit 0 - } - } +def destroy [input: string] { + let output = ($input | path parse | get stem ) + let pngOutput = [ $output "_animated.png" ] | str join + let mp4Output = [ ($input | path parse | get stem ) "_animated.mp4" ] | str join + let mp4OutputFixed = [ ($mp4Output | path parse | get stem ) "_fixed.mp4" ] | str join + echo $"Creating destroyed png image at: ($pngOutput)" + magick -monitor $input $"APNG:($pngOutput)" + echo $"Creating video at: ($mp4Output)" + ffmpeg -i $pngOutput -vcodec libx265 -pix_fmt yuva420p $mp4Output -y + echo $"Fixing video at: ($mp4OutputFixed)" + ffmpeg -i $mp4Output $mp4OutputFixed -y } diff --git a/src/bin/destroy b/src/bin/destroy deleted file mode 100755 index 1a0091c..0000000 --- a/src/bin/destroy +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env nu - -def main [input: string, --resize(-r): string, --length(-l): string = "00:00:05"] { - let resize = if ($resize | is-empty ) { "" } else { $resize } - destroy (glitch $input $resize $length) -} - -def glitch [input: string, resize: string, length: string] { - let output = [ ($input | path parse | get stem ) "_glitch.mkv" ] | str join - let filter = if ($resize | is-not-empty) { - $"scale=($resize):-2,fps=60,frei0r=filter_name=glitch0r:filter_params=0.2|0.8|.04|1,rgbashift=rh=4:bh=-2,interlace=lowpass=complex" - } else { - "fps=60,frei0r=filter_name=glitch0r:filter_params=0.2|0.8|.04|1,rgbashift=rh=4:bh=-2,interlace=lowpass=complex" - } - #echo $"ffmpeg -loop 1 -i ($input) -filter_complex ($filter) -to ($length) ($output) -y" - ffmpeg -loop 1 -i $input -filter_complex $filter -to $length $output -y - echo $output -} - -def destroy [input: string] { - let output = ($input | path parse | get stem ) - let pngOutput = [ $output "_animated.png" ] | str join - let mp4Output = [ ($input | path parse | get stem ) "_animated.mp4" ] | str join - let mp4OutputFixed = [ ($mp4Output | path parse | get stem ) "_fixed.mp4" ] | str join - echo $"Creating destroyed png image at: ($pngOutput)" - magick -monitor $input $"APNG:($pngOutput)" - echo $"Creating video at: ($mp4Output)" - ffmpeg -i $pngOutput -vcodec libx265 -pix_fmt yuva420p $mp4Output -y - echo $"Fixing video at: ($mp4OutputFixed)" - ffmpeg -i $mp4Output $mp4OutputFixed -y -}