У меня есть просто отформатированный текстовый файл (Редактировать список решений) со строками чисел (частота кадров тайм-кода 25), за которыми следуют строки свойств (имена и т. д.).
В конечном итоге я пытаюсь:
получить строки, начинающиеся с
* FROM CLIP NAME:
, и строку/строку (тайм-код) непосредственно выше. В этой строке находятся временные коды, есть 4 группы чисел, каждая из которых выражается как 00:00:00:00 - или ЧЧ:ММ:СС:КФ или Часы, минуты, секунды, кадры. Потом отбрасываю все остальное.Используйте первые две группы чисел (это время начала и окончания), чтобы получить длительность.
Затем добавьте duration к строке названия клипа.
Сохраните файл как «SourceFileName».txt (исходный файл — .edl, чтобы он не перезаписывался).
Поскольку моя частота кадров составляет 25 кадров в секунду, я ожидал разложить каждую группу на количество кадров.
Я ожидал преобразовать таймкод в 25 кадров в секунду:
- часов к базе времени кадра (25 кадров в секунду) 1 час = 1 * 60 * (60 * 25) = 9000
- минут к базе времени кадра (25 кадров в секунду) 1 минута = 1 * (60 * 25) = 1500
- секунд к базе времени кадра (25fps) 1 секунда = 1*25f
Получится группа из 00:02:20:01 = 3501 кадр.
- 3501 целочисленное деление // 25 кадров в секунду = 140 секунд
3501 по модулю (%) 25 = 1 остаток кадра
140/60 = 2 мин.
- 140%60 = 20 сек.
Затем я вычитал первую группу из второй, чтобы найти разницу. Как только у меня есть разница, я перекомпоновываю количество кадров в тайм-код, просто обращая математику.
Я не могу понять, как указать строку имени, а затем взять предыдущую строку для арифметики, используя первые 2 из 4 групп.
Пока (недалеко) я только установил способ, с помощью которого пользователь может определить исходный файл на своем рабочем столе.
Option Explicit
Dim fso, oFile, y
Set fso = CreateObject("Scripting.FileSystemObject")
'get user to open file name
y = InputBox("name of file to save")
'next line opens a file with that name
Set oFile = fso.OpenTextfile(y & ".edl")
ОБНОВЛЕНИЕ: исправлен сценарий, но я даже не могу сгруппировать выбранные строки и их начальные/конечные значения
Option Explicit
Dim fso, oFile, y, re, prev, line, matches
Set fso = createobject("Scripting.FileSystemObject")
'get user to open file name
y = inputbox("name of file to save")
'next line opens a file with that name
Set oFile = fso.Opentextfile(y&".edl")
Do Until oFile.AtEndOfStream
line = oFile.ReadLine
'At this point the variable prev either is empty (during the first loop
'cycle) or holds the content of the previous line.
If Left(line, 21) = "* FROM CLIP NAME: " Then
'do stuff here
Set re = New RegExp
re.Pattern = "C (\d{2}:\d{2}:\d{2}:\d{2}) (\d{2}:\d{2}:\d{2}:\d{2})"
matches = re.Execute(prev)
'print each pair of prev & Pattern match
prev = (line) & (matches)
wscript.echo prev
'don't know how to use submatch values
End If
Loop
Пример файла .edl:
TITLE: test logan * COMMENT: CREATED BY GRASS VALLEY FOR EDIUS (CMX-3600) 001 0000 A C 00:00:04:23 00:00:42:04 00:00:00:00 00:00:37:06 * FROM CLIP NAME: 12 - Tech Sexy - D Cebert - FFP170 002 0000 A C 00:00:20:01 00:00:31:23 00:01:29:24 00:01:41:21 * FROM CLIP NAME: 03 - Web Of Deceit (Main) - J Woodall - SFT164 003 0000 A C 00:00:31:23 00:00:31:23 00:01:41:21 00:01:41:21 M2 0000 025.0 00:00:31:23 003 0000 A D 025 00:00:31:09 00:00:54:12 00:01:41:21 00:02:04:24 * EFFECT NAME: CROSS DISSOLVE * FROM CLIP NAME: 03 - Web Of Deceit (Main) - J Woodall - SFT164 * TO CLIP NAME: 03 - Web Of Deceit (Main) - J Woodall - SFT164 M2 0000 025.0 00:00:31:09 004 0000 A2 C 00:01:15:08 00:01:31:24 00:01:48:04 00:02:04:20 * FROM CLIP NAME: 12 - Environs A - T Juckes, S Kidd - SCDV354 005 0000 A2 C 00:00:11:12 00:00:30:05 00:02:06:24 00:02:25:17 * FROM CLIP NAME: 13 - Contagion (Main) - J Woodall - SFT164 006 0000 A2 C 00:00:06:13 00:00:56:09 00:02:27:04 00:03:17:00 * FROM CLIP NAME: 03 - Web Of Deceit (Main) - J Woodall - SFT164 007 0000 A2 C 00:00:56:09 00:00:56:09 00:03:17:00 00:03:17:00 M2 0000 025.0 00:00:56:09 007 0000 A2 D 025 00:00:55:08 00:01:54:03 00:03:17:00 00:04:15:20 * EFFECT NAME: CROSS DISSOLVE * FROM CLIP NAME: 03 - Web Of Deceit (Main) - J Woodall - SFT164 * TO CLIP NAME: 03 - Web Of Deceit (Main) - J Woodall - SFT164 M2 0000 025.0 00:00:55:08 008 0000 A2 C 00:01:15:08 00:01:37:12 00:05:04:10 00:05:26:14 * FROM CLIP NAME: 12 - Environs A - T Juckes, S Kidd - SCDV354 009 0000 A2 C 00:00:00:00 00:00:26:19 00:06:00:08 00:06:27:02 * FROM CLIP NAME: 38 - Signs Of Pollution - W Plass - SCDV354 010 0000 A2 C 00:00:25:08 00:01:13:03 00:06:39:16 00:07:27:11 * FROM CLIP NAME: 38 - Signs Of Pollution - W Plass - SCDV354 011 0000 A2 C 00:01:13:03 00:01:13:03 00:07:27:11 00:07:27:11 M2 0000 025.0 00:01:13:03 011 0000 A2 D 025 00:01:48:22 00:02:04:09 00:07:27:11 00:07:42:23 * EFFECT NAME: CROSS DISSOLVE * FROM CLIP NAME: 38 - Signs Of Pollution - W Plass - SCDV354 * TO CLIP NAME: 38 - Signs Of Pollution - W Plass - SCDV354 M2 0000 025.0 00:01:48:22
Я должен сделать это на VBScript, чтобы мы могли запускать его на рабочих столах Windows разных пользователей. Мы не можем установить другие исполняемые файлы или запустить их из командной строки. У меня нет прав для установки с правами администратора.