Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. import numpy as np
  2. from scipy.signal import find_peaks
  3. from moviepy.editor import VideoFileClip, concatenate
  4. import matplotlib.pyplot as plt
  5. import sys
  6. import argparse
  7.  
  8. ap = argparse.ArgumentParser()
  9. ap.add_argument("-v", "--video", help="path to the video file")
  10. args = vars(ap.parse_args())
  11.  
  12. if args.get("video", None) is None:
  13. raise Exception('--video is required')
  14.  
  15.  
  16. clip = VideoFileClip(args["video"])
  17.  
  18. cut = lambda i: clip.audio.subclip(i,i+1).to_soundarray(fps=22)
  19. volume = lambda array: np.sqrt(((1.0*array)**2).mean())
  20. volumes = [volume(cut(i)) for i in range(0,int(clip.duration-1))]
  21.  
  22. duration = 10
  23. averaged_volumes = np.array([sum(volumes[i:i+duration])/duration for i in range(len(volumes))])
  24.  
  25. peaks_times, _ = find_peaks(averaged_volumes, distance=20)
  26.  
  27. final_times=[peaks_times[0]]
  28. for t in peaks_times:
  29. if (t - final_times[-1]) < 60:
  30. if averaged_volumes[t] > averaged_volumes[final_times[-1]]:
  31. final_times[-1] = t
  32. else:
  33. final_times.append(t)
  34.  
  35. final = concatenate([clip.subclip(max(t-5,0),min(t+5, clip.duration))
  36. for t in final_times])
  37. final.to_videofile('cuts.mp4')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement