Advertisement
arkanon

AnimatorSH

Jul 29th, 2018
2,706
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.89 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Arkanon <arkanon@lsd.org.br>
  4. # 2018/07/28 (Sat) 06:22:03 -03
  5. # 2018/07/28 (Sat) 00:59:20 -03
  6.  
  7. # How to create a video from images with FFmpeg? <http://stackoverflow.com/a/24966617>
  8.  
  9.  # teste
  10.  #   00:10:01.447
  11.  #   00:00:00.613
  12.  #   00:10:01.548
  13.  repeat=100
  14.    incr=1
  15.    size=200
  16.  
  17. ## facebook - 20180728-051042
  18. ##   01:33:11.068
  19. ##   00:00:19.954
  20. ##   01:33:31.022
  21. #repeat=200
  22. #  incr=.1
  23. #  size=800
  24.  
  25.    time=$(date +%Y%m%d-%H%M%S)
  26.     svg=frame.svg
  27.   start=-2
  28.     end=135
  29.     dir=frames-$time
  30.    qual=70%
  31.   video=eclipse-$time.mp4
  32.    rate=30/1
  33.  
  34.   mkdir -p $dir
  35.  
  36.   time \
  37.   {
  38.  
  39.     time \
  40.     {
  41.  
  42.       lst=$(bc <<< "1+2*$repeat+($end-($start))/$incr")
  43.       pos=$start
  44.  
  45.       # repete $repeat vezes o primeiro frame
  46.       one=1
  47.       one=$(printf %0${#lst}d $one)
  48.       sed -ri "/tat/{n;s/\([^)]+\)/($pos)/}" frame.svg
  49.       convert $svg -resize $size -quality $qual $dir/f$one.jpg
  50.       for frm in $(seq 2 $((repeat+1)))
  51.       {
  52.         frm=$(printf %0${#lst}d $frm)
  53.         echo "frame $frm/$lst: $pos"
  54.         cp -al $dir/f$one.jpg $dir/f$frm.jpg
  55.       }
  56.  
  57.       pos=$(bc <<< "$pos+$incr")
  58.       frm=$((repeat+2))
  59.       while (( $(bc <<< "$pos < $end + $incr") == 1 ))
  60.       do
  61.         frm=$(printf %0${#lst}d $frm)
  62.         echo "frame $frm/$lst: $pos"
  63.         sed -ri "/tat/{n;s/\([^)]+\)/($pos)/}" frame.svg
  64.         convert $svg -resize $size -quality $qual $dir/f$frm.jpg
  65.         pos=$(bc <<< "$pos+$incr")
  66.         ((frm=10#$frm+1))
  67.       done
  68.  
  69.       # repete $repeat vezes o último frame
  70.       one=$((frm-1))
  71.       one=$(printf %0${#lst}d $one)
  72.       for frm in $(seq $((one+1)) $((one+repeat)))
  73.       {
  74.         frm=$(printf %0${#lst}d $frm)
  75.         echo "frame $frm/$lst: $pos"
  76.         cp -al $dir/f$one.jpg $dir/f$frm.jpg
  77.       }
  78.  
  79.     }
  80.  
  81.     time ffmpeg -r $rate -i $dir/f%04d.jpg -c:v libx264 -pix_fmt yuv420p $video
  82.  
  83.   }
  84.  
  85. # EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement