Article: Trượt thời gian trong tập tin phụ đề .srt 626

alide.myopenid.com 32
Updated about 1 year ago

Phụ đề tìm được trên mạng thỉnh thoảng lệch so với phim. Đoạn mã Ruby sau cho phép trượt thời gian trong tập tin phụ đề .srt. Dùng Ruby để xử lí chuỗi thích hơn shell, grep, sed, awk, perl nhiều.

Tập tin .rst chỉ là tập tin văn bản bình thường, các dòng có dạng:

1
00:02:11,000 --> 00:02:15,402
Very early in my life
it was too late.

2
00:02:15,437 --> 00:02:18,530
At 18,
it was already too late.

3
00:02:18,574 --> 00:02:20,803
At 18, I aged.

4
00:02:20,843 --> 00:02:23,333
This aging was brutal.

Muốn trượt thời gian đi, cần cộng trừ lượng thời gian nào đó:

require 'time'

DS = ARGV[0].to_f

$stdin.each_line do |line|
line.gsub!(/\d\d:\d\d:\d\d,\d\d\d/) do |time|
# DS không thể lớn quá, nhưng chọn lúc 9h sáng để tránh nhảy sang ngày khác
ref = Time.at(0) # Thu Jan 01 09:00:00 +0900 1970
time = Time.parse(time, ref) + DS
time.strftime('%H:%M:%S') + ',' + (time.usec/1000).to_s
end
puts line
end

Cách dùng chương trình srta.rb trên: cat TAP_TIN_GOC.srt | ruby srta.rb SO_GIAY > TAP_TIN.srt.

Chỗ quan trọng nhất là hàm gsub!, nó thay thế cụm kí tự này bằng cụm kí tự kia. Ruby thích ở chỗ cho dùng block với gsub! để tạo cụm kí tự kia dựa trên cụm kí tự này: tham số của block chính là cụm kí tự này.

Comments

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content