SRT फ़ाइल किससे बनी होती है
SRT फ़ाइल नंबर वाले ब्लॉकों की एक सूची होती है। हर ब्लॉक में तीन हिस्से होते हैं: एक नंबर, hours:minutes:seconds,milliseconds के रूप में लिखा शुरू और खत्म होने का समय, और टेक्स्ट की एक या दो लाइनें। एक खाली लाइन ब्लॉक को खत्म करती है।
329
00:24:22,584 --> 00:24:23,784
absence ...
वीडियो प्लेयर सिर्फ़ समय पढ़ता है। वह शुरू होने के समय से खत्म होने के समय तक टेक्स्ट दिखाता है और बाकी सब अनदेखा कर देता है। इसीलिए कोई अनुवाद पढ़ने में बिल्कुल सही लगकर भी चलने में गड़बड़ हो सकता है: शब्द ठीक होते हैं, पर गलत समय से जुड़ जाते हैं।
अनुवाद टाइमिंग कैसे बिगाड़ता है: तीन तरीके
ये उदाहरण चार लंबे जॉब के हमारे टेस्ट से हैं, जिसमें तीन चैट मॉडलों ने 1,200 लाइनों की एक ही 85 मिनट की SRT फ़ाइल का स्पैनिश में अनुवाद एक ही जवाब में किया।
1. कोई लाइन अपनी पिछली लाइन में मिल जाती है। ओरिजिनल में लाइन 328 में "...take advantage of Lady Bracknell's temporary" था और लाइन 329 में "absence ..."। एक मॉडल ने पूरा वाक्य लाइन 328 में रख दिया और लाइन 329 हटा दी। स्क्रीन पर अब "absence" एक सेकंड पहले दिखता है, और लाइन 329 का टाइम स्लॉट खाली रह जाता है।
2. छूटी हुई लाइन के बाद सब कुछ दोबारा नंबर हो जाता है। उसी मॉडल ने फ़ाइल के बाकी हिस्से को 329 से बिना किसी गैप के नंबर दे दिए। लाइन 357 पर दूसरी बार लाइन मिलने के बाद 1,200 में से 870 लाइनों का नंबर ओरिजिनल से अलग था। फ़ाइल फिर भी चलती है। लेकिन अगर आप या आपका एडिटर अनुवाद को ओरिजिनल से लाइन नंबर के आधार पर मिलाएँ, तो 329 के बाद की हर लाइन गलत लाइन से जुड़ जाती है।
3. टाइम कोड का एक अंक बदल जाता है। एक दूसरे मॉडल ने उस लाइन के लिए 00:54:55,839 --> 00:54:51,039 लिख दिया जो असल में 00:54:45,839 --> 00:54:51,039 थी। अब वह लाइन शुरू होने से पहले ही खत्म हो जाती है। प्लेयर के हिसाब से वह छूट जाती है, पल भर भी नहीं दिखती, या फ़ाइल लोड ही नहीं होती।
पूरी फ़ाइल का खिसकना, जिसमें पहली ही लाइन से हर लाइन एक बराबर आगे-पीछे हो, एक अलग समस्या है: सबटाइटल वीडियो के किसी दूसरे कट या फ़्रेम रेट के लिए बने थे। इसकी वजह अनुवाद नहीं होता।
2 मिनट की जाँच
किसी भी टेक्स्ट एडिटर में ओरिजिनल और अनुवाद वाली फ़ाइल को अगल-बगल खोलें।
- आख़िरी लाइन। दोनों फ़ाइलों के अंत पर जाएँ। आख़िरी नंबर और आख़िरी टाइम कोड एक जैसे होने चाहिए। अगर अनुवाद 1,198 पर ख़त्म होता है और ओरिजिनल 1,200 पर, तो दो लाइनें आपस में मिल गई हैं या छूट गई हैं।
- बीच की तीन लाइनें। ओरिजिनल से तीन टाइम कोड चुनें, लगभग एक चौथाई, आधे और तीन चौथाई हिस्से के आसपास से, और अनुवाद में उन्हें खोजें। दोनों फ़ाइलों में हर टाइम कोड के साथ नंबर भी वही होना चाहिए। जहाँ पहली बार नंबर अलग दिखें, वहीं कोई लाइन गायब हुई है।
- नामुमकिन टाइम। ऐसी कोई भी लाइन ढूँढें जिसका एंड टाइम उसके स्टार्ट टाइम से पहले का हो। लंबी फ़ाइल में एक छोटी स्क्रिप्ट या सबटाइटल एडिटर की एरर चेक ऐसी लाइनें तुरंत पकड़ लेती है।
- आख़िरी दस मिनट। अनुवाद को अपने प्लेयर में लोड करें और अंत के पास पहुँचें। अगर वहाँ लाइनें सही समय पर आ रही हैं, तो फ़ाइल के ठीक होने की संभावना बहुत ज़्यादा है।
अगर आपके पास Python है, तो यह छोटी स्क्रिप्ट किसी भी जोड़ी की फ़ाइलों पर जाँच 1 से 3 चला देती है (python3 srtcheck.py original.srt translated.srt)। हमारे टेस्ट के तीनों अनुवादों पर इसने ठीक वही गड़बड़ियाँ बताईं जो ऊपर बताई गई हैं।
import re, sys
def cues(path):
text = open(path, encoding="utf-8-sig").read().replace("\r", "")
return re.findall(r"^(\d+)\n(\d\d:\d\d:\d\d,\d{3}) --> (\d\d:\d\d:\d\d,\d{3})", text, re.M)
a, b = cues(sys.argv[1]), cues(sys.argv[2])
print(f"lines: {len(a)} original, {len(b)} translated")
print(f"last: {a[-1]} vs {b[-1]}")
times = {(s, e): n for n, s, e in a}
renumbered = sum(1 for n, s, e in b if (s, e) in times and times[(s, e)] != n)
changed = [n for n, s, e in b if (s, e) not in times]
broken = [n for n, s, e in b if e <= s]
missing = [n for n, s, e in a if (s, e) not in {(s2, e2) for _, s2, e2 in b}]
print(f"renumbered: {renumbered}, changed time codes: {changed[:10]}, "
f"end before start: {broken[:10]}, original lines missing: {missing[:10]}")
अगर अनुवाद चारों जाँचों में पास हो जाए, तो उसका इस्तेमाल करें। अगर किसी एक में भी फ़ेल हो, तो फ़ाइल को हाथ से ठीक करने से अक्सर ज़्यादा तेज़ यह होता है कि ऐसे टूल से दोबारा अनुवाद करा लें जो टाइमिंग को जस का तस रखता हो।
लाइन की लंबाई एक अलग जाँच है
स्पेनिश, जर्मन या फ़्रेंच में अनुवाद अक्सर अंग्रेज़ी से लंबे निकलते हैं। Netflix की English (USA) स्टाइल गाइड में हर लाइन में 42 अक्षर और हर सबटाइटल में दो लाइनों की इजाज़त है। हमारे टेस्ट में 1,200 में से जितनी अनुवादित लाइनों में 42 अक्षर से लंबी लाइन थी, उनकी संख्या मॉडल के हिसाब से 32 से 447 तक रही। हमारे अपने टूल में यह संख्या 105 रही, इसलिए आप चाहे जो भी इस्तेमाल करें, इसे जाँचना ठीक रहता है: लंबी लाइनें पढ़ने में मुश्किल होती हैं, लेकिन इनसे टाइमिंग नहीं बिगड़ती।
इस समस्या से कैसे बचें
ऊपर बताई गई गड़बड़ियाँ इसलिए होती हैं कि मॉडल से अनुवाद के साथ-साथ नंबर और टाइम भी दोबारा लिखवाए जाते हैं। इन्हें उसके हाथ में ही न दें। हमारा सबटाइटल अनुवादक आपकी .srt या .vtt फ़ाइल पढ़ता है, सिर्फ़ टेक्स्ट को 60 लाइनों तक के ब्लॉक में भेजता है, कोई लाइन वापस न आए तो उसे दोबारा माँगता है, और हर नंबर व टाइम सीधे आपके ओरिजिनल से कॉपी करता है। उसी 1,200 लाइनों वाली टेस्ट फ़ाइल पर सभी 1,200 लाइनें बिल्कुल वही नंबर और टाइम कोड लेकर लौटीं।
हर जॉब का पहला हिस्सा फ़्री है और इसके लिए अकाउंट नहीं चाहिए। पूरी फ़िल्म या पूरा सीज़न, 30 फ़ाइलों तक में 5,000 लाइनों तक, $5 में हो जाता है, सिर्फ़ एक बार पेमेंट। लोकप्रिय भाषाओं के अपने पेज हैं: SRT से स्पेनिश, अरबी और फ़ारसी।
तरीका और डेटा
स्रोत
- SubRip (SRT file format) — Wikipedia
- English (USA) Timed Text Style Guide — Netflix Partner Help Center
- Timed Text Style Guide: General Requirements — Netflix Partner Help Center