Any idea what this could be?? Is it something to do with pipe.each(“\r”) ??
]]>команда такая:
ffmpeg -i sqlintro1.flv -sameq 01sql.mov
Подскажите, если не затруднит, какими ключами можно уменьшить размер выходного файла, чтобы он был примерно таким же как и входной.
]]>Why? :)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | class MediaFormatException < StandardError end command_mencoder = "/usr/bin/mencoder /home/download/medien_trailer.mov -o /home/robin/download/output.avi -oac lavc -ovc lavc -lavcopts vcodec=xvid:acodec=mp3" command_ffmpeg = "/usr/bin/ffmpeg -y -i /home/download/medien_trailer.mov -vcodec xvid -acodec mp3 -ab 96 /home/robin/download/output.avi 2>&1" begin execute_mencoder(command_mencoder) execute_ffmpeg(command_ffmpeg) rescue print "ERROR\n" exit 1 end def execute_mencoder(command) progress = nil Open3.popen3(command) do |pipe| pipe.each("\r") do |line| if line =~ /Pos:[^(]*(\s*(\d+)%)/ p = $1.to_i p = 100 if p > 100 if progress != p progress = p print "PROGRESS: #{progress}\n" $defout.flush end end end end raise MediaFormatException if $?.exitstatus != 0 end def execute_ffmpeg(command) progress = nil Open3.popen3(command) do |pipe| pipe.each("\r") do |line| if line =~ /Duration: (\d{2}):(\d{2}):(\d{2}).(\d{1})/ duration = (($1.to_i * 60 + $2.to_i) * 60 + $3.to_i) * 10 + $4.to_i end if line =~ /time=(\d+).(\d+)/ if not duration.nil? and duration != 0 p = ($1.to_i * 10 + $2.to_i) * 100 / duration else p = 0 end p = 100 if p > 100 if progress != p progress = p print "PROGRESS: #{progress}\n" $defout.flush end end end end raise MediaFormatException if $?.exitstatus != 0 end |