#!/usr/bin/ruby -w if ARGV.size < 2 $stderr.puts "I need two or three parameters" $stderr.puts "#{$0} file.srt add_seconds [from_subtitle_number]" exit(1) end filename = ARGV.shift add = Float(ARGV.shift) mark = ARGV.shift || '1' inside = false File.readlines(filename).each_with_index do |line,count| if inside if line =~ /^(\d\d):(\d\d):(\d\d),(\d+) --> (\d\d):(\d\d):(\d\d),(\d+)/ h1, m1, s1, us1, h2, m2, s2, us2 = $1, $2, $3, $4, $5, $6, $7, $8 h1, m1, s1, us1 = h1.to_i, m1.to_i, s1.to_i, us1.to_i * 1_000 h2, m2, s2, us2 = h2.to_i, m2.to_i, s2.to_i, us2.to_i * 1_000 t1 = Time.local(2006, 1, 1, h1, m1, s1, us1) + add t2 = Time.local(2006, 1, 1, h2, m2, s2, us2) + add line = "#{t1.hour.to_s.rjust(2, '0')}:#{t1.min.to_s.rjust(2, '0')}:#{t1.sec.to_s.rjust(2, '0')},#{t1.usec / 1000} --> #{t2.hour.to_s.rjust(2, '0')}:#{t2.min.to_s.rjust(2, '0')}:#{t2.sec.to_s.rjust(2, '0')},#{t2.usec / 1000}\r\n" end else if line =~ /^#{mark}/ inside = true end end $stderr.puts "#{count} lines..." if count % 100 == 0 and count != 0 print line end