Advertisement
Guest User

d.tube Sprite Generation Script. License: CC0

a guest
Feb 13th, 2018
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.18 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. if [ $# -ne 2 ]; then
  4.     echo
  5.     echo call: $0 input_file.mp4 output_file.jpg
  6.     exit 1
  7. fi
  8.  
  9. if [ "$(command -v ffmpeg)" = "" ]; then
  10.     echo
  11.     echo Error: FFmpeg not found
  12.     exit 1
  13. fi
  14.  
  15. if [ "$(command -v montage)" = "" ]; then
  16.     echo
  17.     echo Error: ImageMagick not found
  18.     exit 1
  19. fi
  20.  
  21. if [ ! -e $1 ]; then
  22.     echo
  23.     echo Error: Input File not found
  24.     exit 1
  25. fi
  26.  
  27. TEMPDIR=$(mktemp -d)
  28.  
  29. RUNTIME=$(ffprobe -hide_banner -loglevel error -select_streams v:0 -show_streams $1 2>/dev/null | grep duration= | sed -e 's/duration=//')
  30. RUNTIME=${RUNTIME%.*}
  31.  
  32. if [ $RUNTIME -lt 100 ]; then
  33.     MAX=$RUNTIME
  34.     STEPS=1
  35. else
  36.     MAX=100
  37.     STEPS=$(bc <<< "scale=2; $RUNTIME/100")
  38. fi
  39.  
  40. printf "Extracting frames from source video "
  41.  
  42. for i in `seq 0 $((MAX - 1))` ; do
  43.     lz=""
  44.     if [ $i -lt 10 ]; then lz=0; fi
  45.  
  46.     ffmpeg -hide_banner -loglevel error -accurate_seek -ss $(bc <<< $i*$STEPS) -i $1 -s 210x118 -frames:v 1 $TEMPDIR/sprite_$lz$i.bmp
  47.  
  48.     if [ "$((i%(MAX/4)))" = 0 ]; then printf "$((i/(MAX/4)*25))%% "; fi
  49. done
  50. printf "100%%\nCreating sprite image\n"
  51.  
  52. montage $TEMPDIR/sprite_*.bmp -mode Concatenate -tile 1x$MAX $2
  53.  
  54. echo Done.
  55. echo Video duration: $RUNTIME seconds
  56.  
  57. rm -rf $TEMPDIR
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement