Guest User

Untitled

a guest
Jun 17th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. # Author: Ayose Cazorla
  2. # Public Domain
  3. #
  4. # Normalize a lot of videos using ffmpeg and normalize-audio (both available as Debian packages)
  5. #
  6. # HRC on tha house...
  7.  
  8. AMPLITUDE="-12dBFS"
  9.  
  10. def say(msg)
  11. $stdout.print "\r#{msg}\033[K"
  12. $stdout.flush
  13. end
  14.  
  15. def run(*args)
  16. Process.waitpid(fork do
  17. STDIN.reopen("/dev/null", "r")
  18. STDERR.reopen("/dev/null", "w")
  19. STDOUT.reopen("/dev/null", "w")
  20. exec(*args)
  21. end)
  22. $?.success?
  23. end
  24.  
  25. NumProcessors = File.read("/proc/cpuinfo").grep(/^processor\s+:\s+\d+\s*$/).size
  26. MainThread = Thread.current
  27.  
  28. StreamFiles = {}
  29. VideoFiles = ARGV.grep(/^(?!-)/)
  30.  
  31. Dir.mkdir("streams") unless File.directory?("streams")
  32. Dir.mkdir("normalized") unless File.directory?("normalized")
  33.  
  34. def extract_streams(filename)
  35. basename = File.basename(filename)
  36. dest_audio = "streams/#{basename}.wav"
  37. dest_video = "streams/noaudio-#{basename}"
  38.  
  39. if run("ffmpeg", "-y", "-i", filename, "-vn", "-sameq", "-acodec", "pcm_s16le", "-ac", "2", "-ar", "44100", dest_audio) and
  40. run("ffmpeg", "-y", "-i", filename, "-an", "-vcodec", "copy", dest_video)
  41. StreamFiles[filename] = { :audio => dest_audio, :video => dest_video }
  42. end
  43. end
  44.  
  45. VideoFiles.each_with_index do |filename, index|
  46. say "Extracting #{index + 1}/#{VideoFiles.size}..."
  47. Thread.new { extract_streams filename }
  48.  
  49. sleep 0.5 while Thread.list.size > NumProcessors
  50. end
  51.  
  52. sleep 0.5 while Thread.list.size > 1
  53.  
  54. say "Normalizing..."
  55. puts
  56.  
  57. system "normalize-audio -a #{AMPLITUDE} streams/*.wav"
  58.  
  59. puts "Creating new videos..."
  60. n = 0
  61. StreamFiles.each_pair do |video_name, stream|
  62. n += 1
  63. Thread.new do
  64. say "[#{n} / #{StreamFiles.size}] Writing normalized"
  65. run "ffmpeg", "-y", "-i", stream[:video],"-i", stream[:audio], "-vcodec", "copy", "-acodec", "libmp3lame", "normalized/#{File.basename video_name}"
  66. File.unlink stream[:video]
  67. File.unlink stream[:audio]
  68. end
  69.  
  70. sleep 0.5 while Thread.list.size > NumProcessors
  71. end
  72.  
  73. sleep 0.5 while Thread.list.size > 1
  74. say "Done"
  75. puts
Add Comment
Please, Sign In to add comment