pushrbx icon

AegiSub script: Duplicate lines by frame

pushrbx | PRO | 03/06/14 11:02:32 PM UTC | 0 ⭐ | 801 👁️ | Never ⏰ | []
Lua |

2.4 KB

|

None

|

0 👍

/

0 👎

script_name = "Sor duplikálás képkockánként"
script_description = "Képkockánként duplikál egy sort és az előző sor hosszával lépteti előre."
script_author = "Hughes - isshotosho.info"
 
function table.shallow_copy(t)
    local t2 = {}
    for k,v in pairs(t) do
        t2[k] = v
    end
    return t2
end
 
 
function dup(subtitles, selected_lines, active_line)
    local result, line, duration = nil
    -- lemasoljuk a kivalasztottak tablajat
    -- mert minden table ertek adas referencia alapu
    result = table.shallow_copy(selected_lines)
    
    -- i -> kivalasztott sor index
    -- v -> kivalasztott sor szama
    for i,v in pairs(selected_lines) do 
        local tempStart, tempEnd = 0
        line = subtitles[v] -- line -> table object
        
        tempStart = aegisub.frame_from_ms(line.start_time)
        tempEnd = aegisub.frame_from_ms(line.end_time)
        
        line.start_time = aegisub.ms_from_frame(tempStart + 1)
        line.tempEnd = aegisub.ms_from_frame(tempEnd + 1)
        
--      duration = line.end_time - line.start_time
--      line.start_time = duration + line.start_time
--      line.end_time = duration + line.end_time
        result[i] = line
    end
    
    return result
end
 
function duplicate_macro(subs, selected_lines, active_line)
    -- i -> kivalasztott sor index
    -- line -> table object
    aegisub.set_undo_point("duplicateAndShift")
    aegisub.progress.task('Sorok duplikálása...')
 
    for i,line in pairs(dup(subs, selected_lines, active_line)) do
        subs.insert(selected_lines[i] + i, line)
    end
    
    -- allitsuk be a kivalasztott sorokat
    local result = {}
    for k,v in pairs(selected_lines) do
        result[#result+1] = k+v
    end
    aegisub.progress.task('kész...')
    aegisub.progress.set(100)
    return result
end
 
function duplicate_group_macro(subs, selected_lines, active_line)
    aegisub.set_undo_point("duplicateAndShift")
    
    -- duplikáljuk
    subs.insert(selected_lines[#selected_lines] + 1, unpack(dup(subs, selected_lines, active_line)))
    local result = {}
    
    -- csoportosítsunk
    for i = 1, #selected_lines do
        result[#result + 1] = selected_lines[#selected_lines] + i
    end
    
    return result
end
 
function validate(subtitles, selected_lines)
    if #selected_lines > 0 and aegisub.video_size() then
        return true
    end
    
    return false
end
 
aegisub.register_macro(script_name, script_description, duplicate_macro, validate)
aegisub.register_macro(script_name .. " és csoportosítás", script_description, duplicate_group_macro, validate)

Comments