|
ka81
 Стаж: 18 лет 8 месяцев Сообщений: 1234
|
ka81 ·
18-Авг-09 10:42
(15 лет 7 месяцев назад)
Вроде бы уже видел несколько тем по такому же вопросу, но не могу поиском найти, помогите пжлст: начало субтитров вовремя (00:01:24,256)
последний субтитр на 18 секунд раньше положенного (01:25:43,316, а надо чтобы было 01:26:01,500) естественно торможение началось постепенно, а не просто последняя фраза субтитров. Знаю что Subtitle Workshop решает подобную проблемку, віставляя начальную точку и конечную по первой и конечной фразе...
Но как именно - забіл. напомните пжлст....
|
|
k0stix
  Стаж: 18 лет Сообщений: 6437
|
k0stix ·
18-Авг-09 11:16
(спустя 34 мин.)
Насчет воркшопа не подскажу, но в Subtitle Processor это делается лехко и элегантно во вкладке Resynchronization. Если на 18 секунда разница, то лучше варавнивать по 5-10-минутным отрезкам, ибо не факт, что рассинхрон постоянно регрессирует, потому что 18 сек - нетипичная величина для такой продолжительности
|
|
8non8
 Стаж: 16 лет 8 месяцев Сообщений: 180
|
8non8 ·
18-Авг-09 12:00
(спустя 43 мин., ред. 22-Мар-15 08:30)
|
|
_Woland_
 Стаж: 16 лет 3 месяца Сообщений: 1067
|
_Woland_ ·
18-Авг-09 12:40
(спустя 40 мин.)
В dsrt тоже есть функция сжатия/растяжения.
|
|
ka81
 Стаж: 18 лет 8 месяцев Сообщений: 1234
|
ka81 ·
18-Авг-09 12:42
(спустя 1 мин.)
в Воркшопе ставлю правильніе начальную цифру первой реплики и последнюю, віравниваю, резльат слегка не тот 
по секунде примерно непарвильность отображения..
|
|
Furyx
 Стаж: 16 лет 10 месяцев Сообщений: 1333
|
Furyx ·
18-Авг-09 22:27
(спустя 9 часов)
давеча решал такую задачку...
resample.cmd
@for %%x in (*.srt) do type "%%x" | lua resample.lua > "./fixed/%%x"
resample.lua
local HOURPERDAY = 24 local MINPERHOUR = 60 local MINPERDAY = 1440 -- 24*60 local SECPERMIN = 60 local SECPERHOUR = 3600 -- 60*60 local SECPERDAY = 86400 -- 24*60*60 local TICKSPERSEC = 1000 local TICKSPERDAY = 86400000 local TICKSPERHOUR = 3600000 local TICKSPERMIN = 60000 local function to_ts(hh, mm, ss, ms) return tonumber(hh) * TICKSPERHOUR + tonumber(mm) * TICKSPERMIN + tonumber(ss) * TICKSPERSEC + math.floor(tonumber(ms) / (10 ^ #ms) * TICKSPERSEC) end local function from_ts(t) return math.mod(math.floor(t/TICKSPERHOUR),HOURPERDAY), math.mod(math.floor(t/TICKSPERMIN ),MINPERHOUR), math.mod(math.floor(t/TICKSPERSEC ),SECPERMIN), math.mod(math.floor(t),TICKSPERSEC) end local function str_to_ts(s) return to_ts(string.match(tostring(s),"(%d+):(%d+):(%d+).(%d+)")) end local function ts_to_str(t) local hh, mm, ss, ms = from_ts(t) return tostring(hh)..":"..tostring(mm)..":"..tostring(ss)..","..tostring(ms) end local RESAMPLE = 25025 / (24000/1001*1000) local text = io.stdin:read("*a") for n1, t1, t2, text in string.gmatch(text, "(%d+)\n([:,.%d]+)[^:,.%d]*([:,.%d]+)\n(.-)\n\n") do print(tostring(n1)) print(ts_to_str(str_to_ts(t1) * RESAMPLE).." --> "..ts_to_str(str_to_ts(t2) * RESAMPLE)) -- fixes phase local s = tostring(text) s = string.gsub(s, "<<", string.char(0xab)) s = string.gsub(s, ">>", string.char(0xbb)) print(s) print("") end
|
|
ka81
 Стаж: 18 лет 8 месяцев Сообщений: 1234
|
ka81 ·
19-Авг-09 12:12
(спустя 13 часов)
Furyx писал(а):
давеча решал такую задачку...
resample.cmd
@for %%x in (*.srt) do type "%%x" | lua resample.lua > "./fixed/%%x"
resample.lua
local HOURPERDAY = 24 local MINPERHOUR = 60 local MINPERDAY = 1440 -- 24*60 local SECPERMIN = 60 local SECPERHOUR = 3600 -- 60*60 local SECPERDAY = 86400 -- 24*60*60 local TICKSPERSEC = 1000 local TICKSPERDAY = 86400000 local TICKSPERHOUR = 3600000 local TICKSPERMIN = 60000 local function to_ts(hh, mm, ss, ms) return tonumber(hh) * TICKSPERHOUR + tonumber(mm) * TICKSPERMIN + tonumber(ss) * TICKSPERSEC + math.floor(tonumber(ms) / (10 ^ #ms) * TICKSPERSEC) end local function from_ts(t) return math.mod(math.floor(t/TICKSPERHOUR),HOURPERDAY), math.mod(math.floor(t/TICKSPERMIN ),MINPERHOUR), math.mod(math.floor(t/TICKSPERSEC ),SECPERMIN), math.mod(math.floor(t),TICKSPERSEC) end local function str_to_ts(s) return to_ts(string.match(tostring(s),"(%d+):(%d+):(%d+).(%d+)")) end local function ts_to_str(t) local hh, mm, ss, ms = from_ts(t) return tostring(hh)..":"..tostring(mm)..":"..tostring(ss)..","..tostring(ms) end local RESAMPLE = 25025 / (24000/1001*1000) local text = io.stdin:read("*a") for n1, t1, t2, text in string.gmatch(text, "(%d+)\n([:,.%d]+)[^:,.%d]*([:,.%d]+)\n(.-)\n\n") do print(tostring(n1)) print(ts_to_str(str_to_ts(t1) * RESAMPLE).." --> "..ts_to_str(str_to_ts(t2) * RESAMPLE)) -- fixes phase local s = tostring(text) s = string.gsub(s, "<<", string.char(0xab)) s = string.gsub(s, ">>", string.char(0xbb)) print(s) print("") end
я к сож. с филтрами еще не очень дружу, ті не мог бі на примере Воркшопа подсказать - менюшніми средставми?..
|
|
Furyx
 Стаж: 16 лет 10 месяцев Сообщений: 1333
|
Furyx ·
19-Авг-09 12:53
(спустя 40 мин.)
ka81
к сожалению (или к моему счастью) я не дружу с GUI. мне просто лениво ставить десятки программ, замусоривая систему, и искать, какая же из них решает ту или иную задачу. для меня куда проще один раз набросать скриптик. all
забыл уточнить, ресампл указывать тут:
Код:
local RESAMPLE = 25025 / (24000/1001*1000)
|
|
|