Отметки участка стали видимыми уголками на линейке — жёлтые треугольники по краям, за них можно тянуть. Клавишами это выходило долго: поставил, посмотрел, промахнулся, ставь заново. Край прилипает к границам клипов, как и курсор, и края не пропускаются друг за друга. Клавиша \ и кнопка с целью переключают, держать ли курсор посередине монтажа при воспроизведении. Раньше монтаж ехал под курсором всегда, а это мешает, когда разглядываешь конкретное место. В окне сборки вместо надписи про участок появилась галка «только отмеченный участок». Надпись легко проглядеть, а вопрос из тех, где ошибка стоит часа работы: соберёшь кусок вместо ролика или наоборот. Снятая галка собирает весь монтаж, отметки при этом остаются. Журнал сборки пишется рядом с готовым файлом и под тем же именем. Общий журнал программы перезаписывается следующим запуском, а разбираться, почему в ролике не то, приходится потом. В журнале: время, проект, участок, кадр и битрейт, что с текстом, и полный список кусков — с пометками, где слои, где текст и что пересобирается. Строка пишется сразу, чтобы после падения осталась последняя.
213 lines
4.7 KiB
Text
213 lines
4.7 KiB
Text
object MainForm: TMainForm
|
||
Left = 160
|
||
Height = 900
|
||
Top = 80
|
||
Width = 1600
|
||
Caption = 'nlve'
|
||
ClientHeight = 900
|
||
ClientWidth = 1600
|
||
KeyPreview = True
|
||
OnCloseQuery = FormCloseQuery
|
||
OnCreate = FormCreate
|
||
OnDestroy = FormDestroy
|
||
OnKeyDown = FormKeyDown
|
||
OnShow = FormShow
|
||
LCLVersion = '4.6'
|
||
object memoLog: TLogView
|
||
Left = 0
|
||
Height = 130
|
||
Top = 730
|
||
Width = 1600
|
||
Align = alBottom
|
||
Font.Height = -11
|
||
Font.Name = 'Monospace'
|
||
ParentFont = False
|
||
TabOrder = 0
|
||
end
|
||
object pnlBottom: TPanel
|
||
Left = 0
|
||
Height = 40
|
||
Top = 860
|
||
Width = 1600
|
||
Align = alBottom
|
||
BevelOuter = bvNone
|
||
ClientHeight = 40
|
||
ClientWidth = 1600
|
||
TabOrder = 1
|
||
object lblTime: TLabel
|
||
Left = 12
|
||
Height = 20
|
||
Top = 10
|
||
Width = 260
|
||
Caption = '00:00:00.000 / 00:00:00.000'
|
||
Font.Height = -14
|
||
Font.Name = 'Monospace'
|
||
ParentColor = False
|
||
ParentFont = False
|
||
end
|
||
object btnSnap: TThemedButton
|
||
Left = 290
|
||
Height = 28
|
||
Top = 6
|
||
Width = 28
|
||
Down = True
|
||
Icon = tiSnap
|
||
OnClick = btnSnapClick
|
||
ShowHint = True
|
||
TabStop = False
|
||
end
|
||
object btnGlue: TThemedButton
|
||
Left = 320
|
||
Height = 28
|
||
Top = 6
|
||
Width = 28
|
||
Down = True
|
||
Icon = tiGlue
|
||
OnClick = btnGlueClick
|
||
ShowHint = True
|
||
TabStop = False
|
||
end
|
||
object btnCenter: TThemedButton
|
||
Left = 350
|
||
Height = 28
|
||
Top = 6
|
||
Width = 28
|
||
Down = True
|
||
Icon = tiTarget
|
||
OnClick = btnCenterClick
|
||
ShowHint = True
|
||
TabStop = False
|
||
end
|
||
object btnRipple: TThemedButton
|
||
Left = 386
|
||
Height = 28
|
||
Top = 6
|
||
Width = 28
|
||
Icon = tiRipple
|
||
OnClick = btnRippleClick
|
||
ShowHint = True
|
||
TabStop = False
|
||
end
|
||
object btnRippleMenu: TThemedButton
|
||
Left = 416
|
||
Height = 28
|
||
Top = 6
|
||
Width = 22
|
||
Arrow = True
|
||
OnClick = btnRippleMenuClick
|
||
TabStop = False
|
||
end
|
||
object lblStatus: TLabel
|
||
Left = 488
|
||
Height = 20
|
||
Top = 10
|
||
Width = 780
|
||
Anchors = [akTop, akLeft, akRight]
|
||
AutoSize = False
|
||
Caption = 'Готов.'
|
||
ParentColor = False
|
||
end
|
||
end
|
||
object pnlLeft: TPanel
|
||
Left = 0
|
||
Height = 730
|
||
Top = 0
|
||
Width = 420
|
||
Align = alLeft
|
||
BevelOuter = bvNone
|
||
ClientHeight = 730
|
||
ClientWidth = 420
|
||
TabOrder = 2
|
||
object lstPool: TListBox
|
||
Left = 0
|
||
Height = 710
|
||
Top = 0
|
||
Width = 420
|
||
Align = alClient
|
||
ItemHeight = 100
|
||
OnClick = lstPoolClick
|
||
OnMouseDown = lstPoolMouseDown
|
||
OnDrawItem = lstPoolDrawItem
|
||
Style = lbOwnerDrawFixed
|
||
TabOrder = 0
|
||
end
|
||
object lblPoolInfo: TLabel
|
||
Left = 0
|
||
Height = 20
|
||
Top = 710
|
||
Width = 420
|
||
Align = alBottom
|
||
Caption = 'Файлов в проекте: 0'
|
||
ParentColor = False
|
||
end
|
||
end
|
||
object pnlMain: TPanel
|
||
Left = 420
|
||
Height = 730
|
||
Top = 0
|
||
Width = 1180
|
||
Align = alClient
|
||
BevelOuter = bvNone
|
||
ClientHeight = 730
|
||
ClientWidth = 1180
|
||
TabOrder = 3
|
||
object pnlVideo: TPanel
|
||
Left = 0
|
||
Height = 400
|
||
Top = 0
|
||
Width = 1180
|
||
Align = alTop
|
||
BevelOuter = bvNone
|
||
Caption = ''
|
||
Color = clBlack
|
||
ParentColor = False
|
||
TabOrder = 0
|
||
end
|
||
object splitVideo: TSplitter
|
||
Cursor = crVSplit
|
||
Left = 0
|
||
Height = 6
|
||
Top = 400
|
||
Width = 1180
|
||
Align = alTop
|
||
ResizeAnchor = akTop
|
||
end
|
||
object pnlTimelineHost: TPanel
|
||
Left = 0
|
||
Height = 324
|
||
Top = 406
|
||
Width = 1180
|
||
Align = alClient
|
||
BevelOuter = bvNone
|
||
Caption = ''
|
||
TabOrder = 1
|
||
end
|
||
end
|
||
object OpenMediaDialog: TOpenDialog
|
||
Filter = 'Видео и картинки|*.mp4;*.MP4;*.mkv;*.MKV;*.mov;*.MOV;*.avi;*.AVI;*.png;*.PNG;*.jpg;*.JPG;*.jpeg;*.JPEG|Все файлы|*'
|
||
Options = [ofAllowMultiSelect, ofFileMustExist, ofEnableSizing, ofViewDetail]
|
||
Left = 1500
|
||
Top = 16
|
||
end
|
||
object OpenProjectDialog: TOpenDialog
|
||
DefaultExt = '.nlve'
|
||
Filter = 'Проект nlve|*.nlve|Все файлы|*'
|
||
Options = [ofFileMustExist, ofEnableSizing, ofViewDetail]
|
||
Left = 1500
|
||
Top = 64
|
||
end
|
||
object SaveProjectDialog: TSaveDialog
|
||
DefaultExt = '.nlve'
|
||
Filter = 'Проект nlve|*.nlve|Все файлы|*'
|
||
Options = [ofOverwritePrompt, ofPathMustExist, ofEnableSizing, ofViewDetail]
|
||
Left = 1500
|
||
Top = 112
|
||
end
|
||
object SaveExportDialog: TSaveDialog
|
||
DefaultExt = '.mkv'
|
||
Filter = 'Matroska|*.mkv|MP4|*.mp4|Все файлы|*'
|
||
Options = [ofOverwritePrompt, ofPathMustExist, ofEnableSizing, ofViewDetail]
|
||
Left = 1500
|
||
Top = 160
|
||
end
|
||
end
|