diff --git a/flake.lock b/flake.lock index 1b8772e..42ea3b1 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1770841267, - "narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=", + "lastModified": 1771369470, + "narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae", + "rev": "0182a361324364ae3f436a63005877674cf45efb", "type": "github" }, "original": { diff --git a/scritps/vid2gif b/scritps/vid2gif index 5049d6b..b9bd5a4 100755 --- a/scritps/vid2gif +++ b/scritps/vid2gif @@ -1,19 +1,65 @@ #!/bin/sh -scale=${3:-1} -filters="scale=iw*${scale}:-1:flags=lanczos" -palette_file=$(mktemp --tmpdir XXX.png) - -[ -z "$1" ] && { - printf '%s\n' "${0##*/}: missing input video" - exit 1 +usage() { + printf '%b\n' "${0##*/} -i [OPTIONS]" \ + "\noptions:" \ + "\t-S TIMESTAMP - timestamp to start the gif" \ + "\t-d SECONDS - how long the gif should be" \ + "\t-o FILE - output file (default: out.gif)" \ + "\t-s SCALE - border size (default: 1)" } -[ -z "$2" ] && { - printf '%s\n' "${0##*/}: missing output gif" - exit 1 +while [ "$*" ] +do + case $1 in + - ) shift; continue ;; + -- ) shift; break ;; + -* ) flag=${1#-}; shift ;; + * ) shift; continue ;; + esac + + while [ "$flag" ] + do + arg=${flag%"${flag#?}"} + + case $arg in + h ) usage; exit 0 ;; + S ) VID2GIF_START=$1; shift ;; + d ) VID2GIF_DURATION=$1; shift ;; + i ) VID2GIF_INPUT_FILE=$1; shift ;; + s ) VID2GIF_SCALE=$1; shift ;; + * ) printf '%s\n' "${0##*/}: -$arg: invalid argument" 1>&2 + usage 1>&2; exit 1 ;; + esac + + flag=${flag#?} + done +done + +[ -z "$VID2GIF_INPUT_FILE" ] && { + printf '%s\n' "${0##*/}: missing input video" 1>&2 + usage 1>&2; exit 1 } -ffmpeg -hide_banner -loglevel warning -i "$1" -vf "$filters,palettegen" -update true -y "$palette_file" -ffmpeg -hide_banner -loglevel warning -i "$1" -i "$palette_file" -filter_complex "$filters,paletteuse" "$2" +start= +duration= +[ -n "$VID2GIF_START" ] && start="-ss" +[ -n "$VID2GIF_DURATION" ] && duration="-t" + +: "${VID2GIF_SCALE:=1}" +: "${VID2GIF_OUTPUT_FILE:=out.gif}" + +filters="scale=iw*${VID2GIF_SCALE}:-1:flags=lanczos" +palette_file=$(mktemp --tmpdir XXX.png) + +ffmpeg -hide_banner -loglevel warning \ + "$start" "$VID2GIF_START" \ + "$duration" "$VID2GIF_DURATION" \ + -i "$VID2GIF_INPUT_FILE" -vf "$filters,palettegen" -update true \ + -y "$palette_file" +ffmpeg -hide_banner -loglevel warning \ + "$start" "$VID2GIF_START" \ + "$duration" "$VID2GIF_DURATION" \ + -i "$VID2GIF_INPUT_FILE" -i "$palette_file" -filter_complex "$filters,paletteuse" \ + "$VID2GIF_OUTPUT_FILE" rm "$palette_file"