this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

vid2gif: make more robust

- Add better option handling
- Add option to start gif at a specific timestamp of the video
- Add option to determine how long the gif will be

yemou 2bedf770 0e3ff583

+61 -15
+3 -3
flake.lock
··· 2 2 "nodes": { 3 3 "nixpkgs": { 4 4 "locked": { 5 - "lastModified": 1770841267, 6 - "narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=", 5 + "lastModified": 1771369470, 6 + "narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=", 7 7 "owner": "NixOS", 8 8 "repo": "nixpkgs", 9 - "rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae", 9 + "rev": "0182a361324364ae3f436a63005877674cf45efb", 10 10 "type": "github" 11 11 }, 12 12 "original": {
+58 -12
scritps/vid2gif
··· 1 1 #!/bin/sh 2 - scale=${3:-1} 3 - filters="scale=iw*${scale}:-1:flags=lanczos" 4 - palette_file=$(mktemp --tmpdir XXX.png) 2 + usage() { 3 + printf '%b\n' "${0##*/} -i <file> [OPTIONS]" \ 4 + "\noptions:" \ 5 + "\t-S TIMESTAMP - timestamp to start the gif" \ 6 + "\t-d SECONDS - how long the gif should be" \ 7 + "\t-o FILE - output file (default: out.gif)" \ 8 + "\t-s SCALE - border size (default: 1)" 9 + } 10 + 11 + while [ "$*" ] 12 + do 13 + case $1 in 14 + - ) shift; continue ;; 15 + -- ) shift; break ;; 16 + -* ) flag=${1#-}; shift ;; 17 + * ) shift; continue ;; 18 + esac 5 19 6 - [ -z "$1" ] && { 7 - printf '%s\n' "${0##*/}: missing input video" 8 - exit 1 9 - } 20 + while [ "$flag" ] 21 + do 22 + arg=${flag%"${flag#?}"} 10 23 11 - [ -z "$2" ] && { 12 - printf '%s\n' "${0##*/}: missing output gif" 13 - exit 1 24 + case $arg in 25 + h ) usage; exit 0 ;; 26 + S ) VID2GIF_START=$1; shift ;; 27 + d ) VID2GIF_DURATION=$1; shift ;; 28 + i ) VID2GIF_INPUT_FILE=$1; shift ;; 29 + s ) VID2GIF_SCALE=$1; shift ;; 30 + * ) printf '%s\n' "${0##*/}: -$arg: invalid argument" 1>&2 31 + usage 1>&2; exit 1 ;; 32 + esac 33 + 34 + flag=${flag#?} 35 + done 36 + done 37 + 38 + [ -z "$VID2GIF_INPUT_FILE" ] && { 39 + printf '%s\n' "${0##*/}: missing input video" 1>&2 40 + usage 1>&2; exit 1 14 41 } 15 42 16 - ffmpeg -hide_banner -loglevel warning -i "$1" -vf "$filters,palettegen" -update true -y "$palette_file" 17 - ffmpeg -hide_banner -loglevel warning -i "$1" -i "$palette_file" -filter_complex "$filters,paletteuse" "$2" 43 + start= 44 + duration= 45 + [ -n "$VID2GIF_START" ] && start="-ss" 46 + [ -n "$VID2GIF_DURATION" ] && duration="-t" 47 + 48 + : "${VID2GIF_SCALE:=1}" 49 + : "${VID2GIF_OUTPUT_FILE:=out.gif}" 50 + 51 + filters="scale=iw*${VID2GIF_SCALE}:-1:flags=lanczos" 52 + palette_file=$(mktemp --tmpdir XXX.png) 53 + 54 + ffmpeg -hide_banner -loglevel warning \ 55 + "$start" "$VID2GIF_START" \ 56 + "$duration" "$VID2GIF_DURATION" \ 57 + -i "$VID2GIF_INPUT_FILE" -vf "$filters,palettegen" -update true \ 58 + -y "$palette_file" 59 + ffmpeg -hide_banner -loglevel warning \ 60 + "$start" "$VID2GIF_START" \ 61 + "$duration" "$VID2GIF_DURATION" \ 62 + -i "$VID2GIF_INPUT_FILE" -i "$palette_file" -filter_complex "$filters,paletteuse" \ 63 + "$VID2GIF_OUTPUT_FILE" 18 64 19 65 rm "$palette_file"