调整电影字幕


我用R来修复与我的电影不同步的字幕。对于下面的例子,subs显示得太早了——所以我在srt文件的每个序列中添加了一些时间。为了简单起见,我在下面的例子中只用了1秒钟。

您将看到我使用了我写的函数dl_from_dropbox()a post之前,获取示例文件!

setwd(tempdir())
options(digits = 12)
options(digits.secs = 3)
 
### get subtitle example file:
dl_from_dropbox <- function(x, key) {
                        require(RCurl)
                        bin <- getBinaryURL(paste0("https://dl.dropboxusercontent.com/s/", key, "/", x),
                                            ssl.verifypeer = FALSE)
                        con <- file(x, open = "wb")
                        writeBin(bin, con)
                        close(con)
                        message(noquote(paste(x, "read into", getwd())))                       
                        }
 
dl_from_dropbox("Game_of_Thrones_S3_E1_engl.srt", "wojo9k8v8cezs9g")
shell.exec("Game_of_Thrones_S3_E1_engl.srt") #I use the MS text-editor to view srt files
 
# https://www.dropbox.com/s/wojo9k8v8cezs9g/Game_of_Thrones_S3_E1_engl.srt
###
 
### tweak the file by changing the time - i.e., I add 1 sec to all sequences here:
t <- readLines("Game_of_Thrones_S3_E1_engl.srt")
tt <- unlist(strsplit(t, " --> ")) #split time start/end
 
x <- grep("\\d{2}:\\d{2}:\\d{2},\\d{3}", t) #ids of time data in t
y <- sort(c(x, x+1)) #ids of time data in tt
 
ttt <- gsub(",",".", tt[y]) #replace decimal comma
 
(a <- strptime(ttt, format="%H:%M:%OS", tz="GMT")) #convert to date/time
(b <- as.numeric(a)) #convert to number
 
c <- 1 #add 1 sec
 
(d <- as.POSIXct(as.numeric(b+c+1e-6), origin="1970-01-01", tz="GMT")) #convert back
(e <- format(d, "%H:%M:%OS")) #re-format
(f <- gsub("\\.", ",", e)) #replace decimal point
 
id_t1 <- seq(1, length(y), 2)
id_t2 <- seq(0, length(y), 2)
 
(g <- paste0(f[id_t1], " --> ", f[id_t2])) #bring into original form
 
t_new <- t 
t_new[x] <- g #insert new sequences into original data
print(t_new)
 
### save to new file:
write(t_new, "Game_of_Thrones_S3_E1_engl_new.srt")
shell.exec("Game_of_Thrones_S3_E1_engl_new.srt") #I use the MS text-editor to view srt files