Guest User

niceify.sh

a guest
Nov 10th, 2014
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.57 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. #                     [s4s] PUBLIC LICENSE
  4. #                   Version 1, December 2022
  5. #
  6. # Everyone is permitted to copy and distribute verbatim or modified
  7. # copies of this license document, and changing it is allowed as long
  8. # as the name is changed.
  9. #
  10. #                     [s4s] PUBLIC LICENSE
  11. #   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  12. #
  13. #  0. You can do whatever is eric, ebin, or nice
  14. #  1. The definitions of `eric', `ebin', and `nice' are up to you
  15. #  2. :^)
  16. #
  17. #  niceify.sh, version 0.22
  18. #
  19.  
  20. usage() {
  21.     printf "Usage: %s [ -n frame_num ] [ -f fps ] [ -o outfile ] -i infile\n" "$0"
  22.     printf "       Defaults: 36 frames, 24 fps, written to nice.webm\n"
  23.     exit
  24. }
  25.  
  26. confirm () {
  27.     read RESPONSE
  28.  
  29.     case "${RESPONSE}" in
  30.         y*|Y*)
  31.             return
  32.             ;;
  33.         *)
  34.             printf "Aborting\n"
  35.             exit
  36.             ;;
  37.     esac
  38. }
  39.  
  40. FRAME_NUM=36
  41. FPS=24
  42. OUT_FILE="nice.webm"
  43. IN_FILE="nice.png"
  44.  
  45. while getopts "n:f:o:i:" o
  46. do
  47.     case "${o}" in
  48.         n)
  49.             FRAME_NUM=$((${OPTARG}+0))
  50.             ;;
  51.         f)
  52.             FPS=$((${OPTARG}+0))
  53.             ;;
  54.         o)
  55.             OUT_FILE="${OPTARG}"
  56.             ;;
  57.         i)
  58.             IN_FILE="${OPTARG}"
  59.             ;;
  60.         *)
  61.             usage
  62.             ;;
  63.     esac
  64. done
  65.  
  66. shift $((${OPTIND}-1))
  67.  
  68.  
  69. if [ "${#}" != "0" ]
  70. then
  71.     usage
  72. fi
  73.  
  74. if [ ${FRAME_NUM} -lt 1 ]
  75. then
  76.     printf "Fatal: frame number must be > 0 (got '%d')\n" "${FRAME_NUM}"
  77.     usage
  78. fi
  79.  
  80. if [ ${FPS} -lt 1 ]
  81. then
  82.     printf "Fatal: fps '%d' is not supported\n" "${FPS}"
  83.     usage
  84. fi
  85.  
  86. if [ ! -e  "${IN_FILE}" ]
  87. then
  88.     printf "Fatal: input file '%s' does not exist\n" "${IN_FILE}"
  89.     usage
  90. fi
  91.  
  92. if which vpxenc >/dev/null 2>&1
  93. then
  94.     :
  95. else
  96.     printf "Fatal: no vpxenc found\n"
  97. fi
  98.  
  99. if which png2yuv >/dev/null 2>&1
  100. then
  101.     :
  102. else
  103.     printf "Fatal: no png2yuv found\n"
  104. fi
  105.  
  106. if [ -e "${OUT_FILE}" ]
  107. then
  108.     printf "\nFile %s exists. Overwrite? [y/N] " "${OUT_FILE}"
  109.     confirm
  110. fi
  111.  
  112. printf "Converting %s to %s at %d FPS and %d frames\n" \
  113.        "${IN_FILE}" "${OUT_FILE}" "${FPS}" "${FRAME_NUM}"
  114.  
  115. TEMP_DIR=$(mktemp -d)
  116.  
  117. for IDX in $(seq 1 "${FRAME_NUM}")
  118. do
  119.     HUE=$(($(($((${IDX}*200))/${FRAME_NUM}))+100))
  120.     if convert "${IN_FILE}" -modulate "100,100,${HUE}" \
  121.                "${TEMP_DIR}/mod.png" >/dev/null 2>&1
  122.     then
  123.         :
  124.     else
  125.         printf "Fatal: Some kind of problem creating temporary files\n"
  126.         rm -rf "${TEMP_DIR}"
  127.         exit 1
  128.     fi
  129.  
  130.     if convert "${TEMP_DIR}/mod.png" -background "#f0e0d6" -flatten \
  131.                "${TEMP_DIR}/nice_${IDX}.png" >/dev/null 2>&1
  132.     then
  133.         printf "Frame %s/%s\n" "${IDX}" "${FRAME_NUM}"
  134.     else
  135.         printf "Fatal: Some kind of problem creating temporary files\n"
  136.         rm -rf "${TEMP_DIR}"
  137.         exit 1
  138.     fi
  139. done
  140.  
  141. printf "png -> yuv ... "
  142. if png2yuv -I p -f "${FPS}" -b 1 -n "${FRAME_NUM}" -j \
  143.            "${TEMP_DIR}/nice_%d.png" > "${TEMP_DIR}/nice.yuv" 2>/dev/null
  144. then
  145.     printf "complete\n"
  146. else
  147.     printf "Fatal: some kind of problem with png2yuv\n"
  148.     rm -rf "${TEMP_DIR}"
  149.     exit 1
  150. fi
  151.  
  152. printf "yuv -> webm ... "
  153. if vpxenc --good --cpu-used=0 --auto-alt-ref=1 --lag-in-frames=16 \
  154.           --end-usage=vbr --passes=2 --threads=2 --target-bitrate=3000 \
  155.           -o "${OUT_FILE}" "${TEMP_DIR}/nice.yuv" >/dev/null 2>&1
  156. then
  157.     printf "complete\n"
  158. else
  159.     printf "Fatal: some kind of problem with vpxenc"
  160.     rm -rf "${TEMP_DIR}"
  161.     exit 1
  162. fi
  163.  
  164. rm -rf "${TEMP_DIR}"
Advertisement
Add Comment
Please, Sign In to add comment