Python ile altyazı işlemleri 2
Daha önceden Python’da regex kullanarak altyazılar üzerinde bazı değişiklikler yapmıştım(ilk yazı burda). Bu seferki kod altyazılar srt formatlı altyazılar için birkaç fonksiyon içeriyor.
"""
subtools.py
Some subtitle tools for .srt formatted subtitles.
"""
import re
def convert(a):
parts = a.split(":")
hour, minute, sec = int(parts[0]), int(parts[1]), parts[2]
minute += hour*60
sec = sec.split(",")
sec = int(sec[0])*1000 + int(sec[1])
sec += minute*60000
return sec
def revert(a):
a = int(a)
sec, remainder = a/1000, a % 1000
minute = sec/60
sec = sec%60
hour = minute/60
minute = minute%60
# kod tekrarini nasil engelleyebilirim?
if len(str(hour)) == 1:
hour = "0%s" % hour
if len(str(minute)) == 1:
minute = "0%s" % minute
if len(str(sec)) == 1:
sec = "0%s" % sec
if len(str(remainder)) == 1:
remainder = "00%s" % remainder
elif len(str(remainder)) == 2:
remainder = "0%s" % remainder
return "{0}:{1}:{2},{3}".format(hour, minute, sec, remainder)
def adder(a, b):
return revert(convert(a) + convert(b))
def subtracter(a, b):
return revert(convert(a) - convert(b)))
def submod(sub, time):
"Advance subtitles"
Sub = open(sub, "r").readlines()
format = re.compile(r"(\d{1,2}:\d{1,2}:\d{1,2},\d{1,3}) --> (\d{1,2}:\d{1,2}:\d{1,2},\d{1,3})")
for line in Sub:
if format.findall(line):
parts = format.findall(line)
parts = parts[0]
P1, P2 = adder(parts[0], time), \
adder(parts[1], time)
Sub[Sub.index(line)] = "%s --> %s" % (P1, P2)
new = open("new_%s" % sub.split("/")[-1], "w")
new.writelines(Sub)
new.close()
def setsub(sub, first, last):
submod(sub, subtracter(first, last))
Linux ortamında VLC ile birşeyler izlerken en çok sıkıntı çektiğim konu GOM Player’daki altyazının istenilen kısmının filmdeki istenilen zamana denk getirilme özelliğinin olmaması, bu fonksiyonlar kullanılarak kolayca yapılabilir aslında..

