nlve/nlve.lpr

30 lines
911 B
ObjectPascal
Raw Permalink Normal View History

Нелинейный видеоредактор без перекодирования Куски видео вырезаются и склеиваются копированием потока: сборка ролика занимает время копирования файла, а не время рендера. Композитинга нет принципиально — при перекрытии побеждает клип с верхней дорожки целиком, и картинкой, и звуком. Именно это ограничение и делает сборку копированием возможной. Что внутри: - монтажный стол со своей отрисовкой: дорожки, масштаб, прилипание, схлопывание, громкость на клипе; - предпросмотр прямо с монтажа через libmpv и виртуальный список кусков, без промежуточных файлов; - сборка через ffmpeg с точными резами: перекодируется только огрызок от реза до ближайшего опорного кадра, остальное копируется; - разбор заголовка MP4 для поиска опорных кадров — в 500 раз быстрее опроса ffprobe; - перепаковка контейнеров, кадрирование и поворот, сведения о проекте; - свои цвета всего окна: системные элементы под Windows цвет не берут, поэтому кнопки, полоса меню, журнал и полосы прокрутки нарисованы сами; - окно зависимостей: недостающие ffmpeg, ffprobe и libmpv скачиваются с официальных источников; - кросс-сборка под Windows и работа под Wine. Первый коммит: до этого история не велась.
2026-08-19 18:36:16 +03:00
program nlve;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
Interfaces,
Forms,
uTheme,
uMainForm;
{$R *.res}
begin
RequireDerivedFormResource := True;
Application.Title := 'nlve';
Application.Scaled := True;
Application.Initialize;
Полоса меню снова настоящая, цвет задаётся по-своему на каждой системе Самодельная полоса из кнопок стоила поведения: наведение на соседнее название не перекидывало туда раскрытый список, не работал переход по меню с Alt и стрелками. Подражать настоящему меню своими руками пришлось бы до бесконечности, а причина отказа была одна — цвет. Цвет решается иначе. Под gtk2 своими руками меню не рисуется, и это записано в самом LCL: OwnerDraw, OnDrawItem и OnMeasureItem там помечены как неподдерживаемые (interfaces/gtk2/issues.xml), вызывает DoDrawItem только win32. Зато gtk принимает описание стиля текстом — gtk_rc_parse_string, разбирается один раз до создания окон. Под win32 наоборот: строк стиля нет, зато отрисовка пунктов работает, в том числе для названий в самой полосе. Проверено отдельным пробником (probe/menu): настоящее TMainMenu под gtk2 берёт наши цвета и в полосе, и в раскрытом списке, включая цвет выделенного пункта. Отрисовка пунктов теперь отличает полосу от раскрытого списка: в полосе не нужно место под галочку и сочетание клавиш, иначе название разошлось бы с шириной, которую мы же и посчитали. Остаток полосы правее последнего названия под Windows по-прежнему рисует система — это уступка, а не решение.
2026-08-21 10:44:31 +03:00
{ Цвета меню задаются до создания окон: под gtk2 это строка стиля, а её
разбирают один раз — уже созданные виджеты о ней не узнают. }
ApplyMenuStyle;
Нелинейный видеоредактор без перекодирования Куски видео вырезаются и склеиваются копированием потока: сборка ролика занимает время копирования файла, а не время рендера. Композитинга нет принципиально — при перекрытии побеждает клип с верхней дорожки целиком, и картинкой, и звуком. Именно это ограничение и делает сборку копированием возможной. Что внутри: - монтажный стол со своей отрисовкой: дорожки, масштаб, прилипание, схлопывание, громкость на клипе; - предпросмотр прямо с монтажа через libmpv и виртуальный список кусков, без промежуточных файлов; - сборка через ffmpeg с точными резами: перекодируется только огрызок от реза до ближайшего опорного кадра, остальное копируется; - разбор заголовка MP4 для поиска опорных кадров — в 500 раз быстрее опроса ffprobe; - перепаковка контейнеров, кадрирование и поворот, сведения о проекте; - свои цвета всего окна: системные элементы под Windows цвет не берут, поэтому кнопки, полоса меню, журнал и полосы прокрутки нарисованы сами; - окно зависимостей: недостающие ffmpeg, ffprobe и libmpv скачиваются с официальных источников; - кросс-сборка под Windows и работа под Wine. Первый коммит: до этого история не велась.
2026-08-19 18:36:16 +03:00
{ Подписка на появление окон: своим окнам цвета задаются в их же
обработчике создания, а это подстраховка на случай окна, созданного
самой библиотекой. }
HookNewForms;
Application.CreateForm(TMainForm, MainFormInstance);
Application.Run;
end.