//
you're reading...
Codes, Ruby

Trượt Thời Gian Trong Tập Tin Phụ Đề .SRT

Ý tưởng chính của mẫu bài tập nho nhỏ này là từ của alide đó bên trang CNTT, viết code về việc trượt thời gian trong tập tin phụ đề .srt. Khi tải các tập tin phụ đề nào đó trên mạng về nhiều khi không khớp so với phim đang xem. Đoạn mã Ruby dưới đây cho phép bạn trượt thời gian trong tập tin phụ đề .srt 1 cách dễ dàng, qua đó cho thấy được là việc xử lí chuỗi kí tự trong Ruby thật hay và mạnh mẽ.

Trong đó: các tập tin phụ đề chỉ là dạng văn bản bình thường, và được định dạng theo kiểu sau:

1
00:00:23,030 –> 00:00:24,980
Bạn bè là gì ?

2
00:00:28,210 –> 00:00:30,660
Cần đến ai đó?

3
00:00:30,660 –> 00:00:33,030
Ai đó trong đời bạn?

4
00:00:33,030 –> 00:00:37,200
Là người giúp đỡ hay cản trở bạn?

5
00:00:38,450 –> 00:00:43,270
Là người để chuyện trò, hay là người để đánh nhau?

Sử dụng thư viện ‘time’ của Ruby để giúp cho việc xử lí thời gian 1 cách dễ dàng hơn.

require  'time'

#Lay Tham So
ds = ARGV[0].to_f
fn1 = ARGV[1].to_s
fn2 = ARGV[2].to_s

#Mo File De Ghi Ket Qua
f1 = File.new(fn1, "r")
f2 = File.new(fn2, "w")

#Doc File De Xu Li
f1.each do |line|

timenew = ""
line.scan(/^\d+:\d+:\d+,\d+/) do |time|

time = Time.parse(time) + ds
timenew << time.strftime('%H:%M:%S') + ',' + (time.usec/1000).to_s

end
line.scan(/\d+:\d+:\d+,\d+$/) do |time|

time = Time.parse(time) + ds
timenew << ' --> ' + time.strftime('%H:%M:%S') + ',' + (time.usec/1000).to_s
line = timenew

end
f2.puts line

end

#Dong File
f1.close
f2.close

Để sử dụng đoạn mã chương trình Ruby trên ta gõ như sau:

ruby  shifttime.rb So_Giay Tap_Tin_Goc.srt Tap_Tin_Dich.srt

Trong đó: các tham số đầu vào là thời gian muốn cộng thêm hay trừ bớt, tên tập tin .srt nguồn và tên tập tin .srt đích.

~Fri3ng3R~

Advertisements

Discussion

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: