Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- # [s4s] PUBLIC LICENSE
- # Version 1, December 2022
- #
- # Everyone is permitted to copy and distribute verbatim or modified
- # copies of this license document, and changing it is allowed as long
- # as the name is changed.
- #
- # [s4s] PUBLIC LICENSE
- # TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- #
- # 0. You can do whatever is eric, ebin, or nice
- # 1. The definitions of `eric', `ebin', and `nice' are up to you
- # 2. :^)
- #
- # niceify.sh, version 0.22
- #
- usage() {
- printf "Usage: %s [ -n frame_num ] [ -f fps ] [ -o outfile ] -i infile\n" "$0"
- printf " Defaults: 36 frames, 24 fps, written to nice.webm\n"
- exit
- }
- confirm () {
- read RESPONSE
- case "${RESPONSE}" in
- y*|Y*)
- return
- ;;
- *)
- printf "Aborting\n"
- exit
- ;;
- esac
- }
- FRAME_NUM=36
- FPS=24
- OUT_FILE="nice.webm"
- IN_FILE="nice.png"
- while getopts "n:f:o:i:" o
- do
- case "${o}" in
- n)
- FRAME_NUM=$((${OPTARG}+0))
- ;;
- f)
- FPS=$((${OPTARG}+0))
- ;;
- o)
- OUT_FILE="${OPTARG}"
- ;;
- i)
- IN_FILE="${OPTARG}"
- ;;
- *)
- usage
- ;;
- esac
- done
- shift $((${OPTIND}-1))
- if [ "${#}" != "0" ]
- then
- usage
- fi
- if [ ${FRAME_NUM} -lt 1 ]
- then
- printf "Fatal: frame number must be > 0 (got '%d')\n" "${FRAME_NUM}"
- usage
- fi
- if [ ${FPS} -lt 1 ]
- then
- printf "Fatal: fps '%d' is not supported\n" "${FPS}"
- usage
- fi
- if [ ! -e "${IN_FILE}" ]
- then
- printf "Fatal: input file '%s' does not exist\n" "${IN_FILE}"
- usage
- fi
- if which vpxenc >/dev/null 2>&1
- then
- :
- else
- printf "Fatal: no vpxenc found\n"
- fi
- if which png2yuv >/dev/null 2>&1
- then
- :
- else
- printf "Fatal: no png2yuv found\n"
- fi
- if [ -e "${OUT_FILE}" ]
- then
- printf "\nFile %s exists. Overwrite? [y/N] " "${OUT_FILE}"
- confirm
- fi
- printf "Converting %s to %s at %d FPS and %d frames\n" \
- "${IN_FILE}" "${OUT_FILE}" "${FPS}" "${FRAME_NUM}"
- TEMP_DIR=$(mktemp -d)
- for IDX in $(seq 1 "${FRAME_NUM}")
- do
- HUE=$(($(($((${IDX}*200))/${FRAME_NUM}))+100))
- if convert "${IN_FILE}" -modulate "100,100,${HUE}" \
- "${TEMP_DIR}/mod.png" >/dev/null 2>&1
- then
- :
- else
- printf "Fatal: Some kind of problem creating temporary files\n"
- rm -rf "${TEMP_DIR}"
- exit 1
- fi
- if convert "${TEMP_DIR}/mod.png" -background "#f0e0d6" -flatten \
- "${TEMP_DIR}/nice_${IDX}.png" >/dev/null 2>&1
- then
- printf "Frame %s/%s\n" "${IDX}" "${FRAME_NUM}"
- else
- printf "Fatal: Some kind of problem creating temporary files\n"
- rm -rf "${TEMP_DIR}"
- exit 1
- fi
- done
- printf "png -> yuv ... "
- if png2yuv -I p -f "${FPS}" -b 1 -n "${FRAME_NUM}" -j \
- "${TEMP_DIR}/nice_%d.png" > "${TEMP_DIR}/nice.yuv" 2>/dev/null
- then
- printf "complete\n"
- else
- printf "Fatal: some kind of problem with png2yuv\n"
- rm -rf "${TEMP_DIR}"
- exit 1
- fi
- printf "yuv -> webm ... "
- if vpxenc --good --cpu-used=0 --auto-alt-ref=1 --lag-in-frames=16 \
- --end-usage=vbr --passes=2 --threads=2 --target-bitrate=3000 \
- -o "${OUT_FILE}" "${TEMP_DIR}/nice.yuv" >/dev/null 2>&1
- then
- printf "complete\n"
- else
- printf "Fatal: some kind of problem with vpxenc"
- rm -rf "${TEMP_DIR}"
- exit 1
- fi
- rm -rf "${TEMP_DIR}"
Advertisement
Add Comment
Please, Sign In to add comment