Как превратить файл SRT в набор данных?
Можно ли повернуть SRT
файл, который используется для субтитров в видео в наборе данных?
При импорте в Excel SRT
Формат файла выглядит так:
1
00:00:03,000 --> 00:00:04,000
OVERLAPS PURE COINCIDENCE THAT
...
Этот паттерн продолжается как время в "видео" / расшифровке стенограммы. Я хотел бы отформатировать SRT
подать файл таким образом:
number ; start ; end ; text
1 ; 00:00:03,000 ; 00:00:04,000 ; OVERLAPS PURE COINCIDENCE THAT
3 ответа
Процедура VBA ниже загружает стандарт .srt
(SubRip Movie Subtitle File) из локального файла и разбивает его на строки / столбцы активной рабочей таблицы Excel.
Импорт субтитров SRT из локального файла:
Sub importSRTfromFile(fName As String)
'Loads SRT from local file and converts to columns in Active Worksheet
Dim sIn As String, sOut As String, sArr() As String, x As Long
'load file
Open fName For Input As #1
While Not EOF(1)
Line Input #1, sIn
sOut = sOut & sIn & vbLf
Wend
Close #1
'convert LFs to delimiters & split into array
sOut = Replace(sOut, vbLf & vbLf, vbCr)
sOut = Replace(Replace(sOut, vbLf, "|"), " --> ", "|")
sArr = Split(sOut, vbCr)
'check if activesheet is blank
If ActiveSheet.UsedRange.Cells.Count > 1 Then
If MsgBox(UBound(sArr) & " rows found." & vbLf & vbLf & _
"Okay to clear worksheet '" & ActiveSheet.Name & "'?", _
vbOKCancel, "Delete Existing Data?") <> vbOK Then Exit Sub
ActiveSheet.Cells.ClearContents
End If
'breakout into rows
For x = 1 To UBound(sArr)
Range("A" & x) = sArr(x)
Next x
'split into columns
Columns("A:A").TextToColumns Destination:=Range("A1"), _
DataType:=xlDelimited, Other:=True, OtherChar:="|"
MsgBox "Imported " & UBound(sArr) & " rows from:" & vbLf & fName
End Sub
Пример использования:
Sub test_FileImport()
importSRTfromFile "c:\yourPath\yourFilename.srt"
End Sub
Импортируйте SRT-субтитры из URL сайта:
Кроме того, вы можете импортировать .srt
(или другие подобные текстовые файлы) с URL-адреса веб- сайта, такого как http://subtitle-index.org/ с этим:
Sub importSRTfromWeb(url As String)
'Loads SRT from URL and converts to columns in Active Worksheet
Dim sIn As String, sOut As String, sArr() As String, rw As Long
Dim httpData() As Byte, XMLHTTP As Object
'load file from URL
Set XMLHTTP = CreateObject("MSXML2.XMLHTTP")
XMLHTTP.Open "GET", url, False
XMLHTTP.send
httpData = XMLHTTP.responseBody
Set XMLHTTP = Nothing
sOut = StrConv(httpData, vbUnicode)
'convert LFs to delimiters & split into array
sOut = Replace(sOut, vbLf & vbLf, vbCr)
sOut = Replace(Replace(sOut, vbLf, "|"), " --> ", "|")
sArr = Split(sOut, vbCr)
'check if activesheet is blank
If ActiveSheet.UsedRange.Cells.Count > 1 Then
If MsgBox(UBound(sArr) & " rows found." & vbLf & vbLf & _
"Okay to clear worksheet '" & ActiveSheet.Name & "'?", _
vbOKCancel, "Delete Existing Data?") <> vbOK Then Exit Sub
ActiveSheet.Cells.ClearContents
End If
'breakout into rows
For rw = 1 To UBound(sArr)
Range("A" & rw) = sArr(rw)
Next rw
'split into columns
Columns("A:A").TextToColumns Destination:=Range("A1"), _
DataType:=xlDelimited, Other:=True, OtherChar:="|"
MsgBox "Imported " & UBound(sArr) & " rows from:" & vbLf & url
End Sub
Пример использования:
Sub testImport()
importSRTfromWeb _
"https://subtitle-index.org/download/4670541854528212663953859964/SRT/Pulp+Fiction"
End Sub
Многие сайты размещаются бесплатно .srt
"S; вам, возможно, придется щелкнуть правой кнопкой мыши кнопку загрузки, чтобы скопировать ссылку (которая может иметь .srt
расширение или может быть указателем, как в примере выше). Процедура не будет работать на .zip
Файлы
Дополнительная информация:
Википедия: SubRip & SRT
MSDN: функция разделения (VBA)
Википедия: символы новой строки
MSDN: UBound Функция
В приведенном выше коде:
'breakout into rows
For rw = 1 To UBound(sArr)
Range("A" & rw) = sArr(rw)
Next rw
следует заменить на:
'breakout into rows
For rw = 0 To UBound(sArr)
Range("A" & rw+1) = sArr(rw)
Next rw
иначе вывод начнется со строки 2
Я использовал Vim и написал быстрое регулярное выражение для преобразования файла .srt в файл .csv для друга-переводчика, которому нужно было подобное преобразование. Затем файл csv можно открыть в Excel/LibreOffice и сохранить как .xls, .ods или что-то еще. Моему другу не нужно было, чтобы номера субтитров отображались в первом столбце, поэтому код регулярного выражения выглядит так:
set fileencoding=utf-8
%s/"/""/g
g/^\d\+$/d
%s@^\(.*\) --> \(.*\)\n@"\1","\2","@g
%s/\n^$/"/g
Вариант сохранения поднумерации:
set fileencoding=utf-8
%s/"/""/g
%s@\(^\d\+\)$\n^\(.*\) --> \(.*\)\n@"\1","\2","\3","@g
%s/\n^$/"/g
Сохраните этот код в текстовый файл с
.vim
расширение, затем используйте этот файл при редактировании вашего .srt в Vim / Gvim. Сохраните результат в формате .csv. Наслаждайтесь магией регулярных выражений!
NB: мой код использует запятые в качестве разделителей полей. Измените запятые на точки с запятой в приведенном выше коде, чтобы использовать точки с запятой. Я также добавил двойные кавычки в качестве разделителей строк на случай, если в тексте субтитров встречаются двойные кавычки и запятые. Гораздо больше доказательств ошибок!