Куски видео вырезаются и склеиваются копированием потока: сборка ролика занимает время копирования файла, а не время рендера. Композитинга нет принципиально — при перекрытии побеждает клип с верхней дорожки целиком, и картинкой, и звуком. Именно это ограничение и делает сборку копированием возможной. Что внутри: - монтажный стол со своей отрисовкой: дорожки, масштаб, прилипание, схлопывание, громкость на клипе; - предпросмотр прямо с монтажа через libmpv и виртуальный список кусков, без промежуточных файлов; - сборка через ffmpeg с точными резами: перекодируется только огрызок от реза до ближайшего опорного кадра, остальное копируется; - разбор заголовка MP4 для поиска опорных кадров — в 500 раз быстрее опроса ffprobe; - перепаковка контейнеров, кадрирование и поворот, сведения о проекте; - свои цвета всего окна: системные элементы под Windows цвет не берут, поэтому кнопки, полоса меню, журнал и полосы прокрутки нарисованы сами; - окно зависимостей: недостающие ffmpeg, ffprobe и libmpv скачиваются с официальных источников; - кросс-сборка под Windows и работа под Wine. Первый коммит: до этого история не велась.
246 lines
7.2 KiB
XML
246 lines
7.2 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<CONFIG>
|
|
<ProjectOptions>
|
|
<Version Value="12"/>
|
|
<General>
|
|
<Flags>
|
|
<CompatibilityMode Value="True"/>
|
|
</Flags>
|
|
<SessionStorage Value="InProjectDir"/>
|
|
<Title Value="nlve"/>
|
|
<Scaled Value="True"/>
|
|
<ResourceType Value="res"/>
|
|
<UseXPManifest Value="True"/>
|
|
<XPManifest>
|
|
<DpiAware Value="True"/>
|
|
</XPManifest>
|
|
</General>
|
|
<BuildModes Count="1">
|
|
<Item1 Name="Default" Default="True"/>
|
|
</BuildModes>
|
|
<PublishOptions>
|
|
<Version Value="2"/>
|
|
<UseFileFilters Value="True"/>
|
|
</PublishOptions>
|
|
<RunParams>
|
|
<FormatVersion Value="2"/>
|
|
</RunParams>
|
|
<RequiredPackages Count="1">
|
|
<Item1>
|
|
<PackageName Value="LCL"/>
|
|
</Item1>
|
|
</RequiredPackages>
|
|
<Units Count="31">
|
|
<Unit0>
|
|
<Filename Value="nlve.lpr"/>
|
|
<IsPartOfProject Value="True"/>
|
|
</Unit0>
|
|
<Unit1>
|
|
<Filename Value="src/uAppTypes.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uAppTypes"/>
|
|
</Unit1>
|
|
<Unit2>
|
|
<Filename Value="src/uDeps.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uDeps"/>
|
|
</Unit2>
|
|
<Unit3>
|
|
<Filename Value="src/uDepsForm.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<ComponentName Value="DepsForm"/>
|
|
<HasResources Value="True"/>
|
|
<ResourceBaseClass Value="Form"/>
|
|
<UnitName Value="uDepsForm"/>
|
|
</Unit3>
|
|
<Unit4>
|
|
<Filename Value="src/uDownload.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uDownload"/>
|
|
</Unit4>
|
|
<Unit5>
|
|
<Filename Value="src/uEdl.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uEdl"/>
|
|
</Unit5>
|
|
<Unit6>
|
|
<Filename Value="src/uExport.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uExport"/>
|
|
</Unit6>
|
|
<Unit7>
|
|
<Filename Value="src/uFfmpegCmd.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uFfmpegCmd"/>
|
|
</Unit7>
|
|
<Unit8>
|
|
<Filename Value="src/uFfmpegJob.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uFfmpegJob"/>
|
|
</Unit8>
|
|
<Unit9>
|
|
<Filename Value="src/uFlatten.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uFlatten"/>
|
|
</Unit9>
|
|
<Unit10>
|
|
<Filename Value="src/uGenerate.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uGenerate"/>
|
|
</Unit10>
|
|
<Unit11>
|
|
<Filename Value="src/uKeyframeIndex.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uKeyframeIndex"/>
|
|
</Unit11>
|
|
<Unit12>
|
|
<Filename Value="src/uLogView.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uLogView"/>
|
|
</Unit12>
|
|
<Unit13>
|
|
<Filename Value="src/uMainForm.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<ComponentName Value="MainForm"/>
|
|
<HasResources Value="True"/>
|
|
<ResourceBaseClass Value="Form"/>
|
|
<UnitName Value="uMainForm"/>
|
|
</Unit13>
|
|
<Unit14>
|
|
<Filename Value="src/uMediaProbe.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uMediaProbe"/>
|
|
</Unit14>
|
|
<Unit15>
|
|
<Filename Value="src/uMismatchForm.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<ComponentName Value="MismatchForm"/>
|
|
<HasResources Value="True"/>
|
|
<ResourceBaseClass Value="Form"/>
|
|
<UnitName Value="uMismatchForm"/>
|
|
</Unit15>
|
|
<Unit16>
|
|
<Filename Value="src/uMpvLib.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uMpvLib"/>
|
|
</Unit16>
|
|
<Unit17>
|
|
<Filename Value="src/uMpvPlayer.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uMpvPlayer"/>
|
|
</Unit17>
|
|
<Unit18>
|
|
<Filename Value="src/uPanCropForm.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<ComponentName Value="PanCropForm"/>
|
|
<HasResources Value="True"/>
|
|
<ResourceBaseClass Value="Form"/>
|
|
<UnitName Value="uPanCropForm"/>
|
|
</Unit18>
|
|
<Unit19>
|
|
<Filename Value="src/uProcRunner.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uProcRunner"/>
|
|
</Unit19>
|
|
<Unit20>
|
|
<Filename Value="src/uProgressForm.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<ComponentName Value="ProgressForm"/>
|
|
<HasResources Value="True"/>
|
|
<ResourceBaseClass Value="Form"/>
|
|
<UnitName Value="uProgressForm"/>
|
|
</Unit20>
|
|
<Unit21>
|
|
<Filename Value="src/uProject.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uProject"/>
|
|
</Unit21>
|
|
<Unit22>
|
|
<Filename Value="src/uProjectInfoForm.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<ComponentName Value="ProjectInfoForm"/>
|
|
<HasResources Value="True"/>
|
|
<ResourceBaseClass Value="Form"/>
|
|
<UnitName Value="uProjectInfoForm"/>
|
|
</Unit22>
|
|
<Unit23>
|
|
<Filename Value="src/uRemuxForm.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<ComponentName Value="RemuxForm"/>
|
|
<HasResources Value="True"/>
|
|
<ResourceBaseClass Value="Form"/>
|
|
<UnitName Value="uRemuxForm"/>
|
|
</Unit23>
|
|
<Unit24>
|
|
<Filename Value="src/uRemuxQueue.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uRemuxQueue"/>
|
|
</Unit24>
|
|
<Unit25>
|
|
<Filename Value="src/uSettings.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uSettings"/>
|
|
</Unit25>
|
|
<Unit26>
|
|
<Filename Value="src/uTheme.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uTheme"/>
|
|
</Unit26>
|
|
<Unit27>
|
|
<Filename Value="src/uThemedScroll.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uThemedScroll"/>
|
|
</Unit27>
|
|
<Unit28>
|
|
<Filename Value="src/uThumbs.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uThumbs"/>
|
|
</Unit28>
|
|
<Unit29>
|
|
<Filename Value="src/uTimelineCtrl.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uTimelineCtrl"/>
|
|
</Unit29>
|
|
<Unit30>
|
|
<Filename Value="src/uTransform.pas"/>
|
|
<IsPartOfProject Value="True"/>
|
|
<UnitName Value="uTransform"/>
|
|
</Unit30>
|
|
</Units>
|
|
</ProjectOptions>
|
|
<CompilerOptions>
|
|
<Version Value="11"/>
|
|
<Target>
|
|
<Filename Value="nlve"/>
|
|
</Target>
|
|
<SearchPaths>
|
|
<IncludeFiles Value="$(ProjOutDir)"/>
|
|
<OtherUnitFiles Value="src"/>
|
|
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
|
|
</SearchPaths>
|
|
<Linking>
|
|
<Debugging>
|
|
<DebugInfoType Value="dsDwarf3"/>
|
|
<UseExternalDbgSyms Value="True"/>
|
|
</Debugging>
|
|
<Options>
|
|
<Win32>
|
|
<GraphicApplication Value="True"/>
|
|
</Win32>
|
|
</Options>
|
|
</Linking>
|
|
</CompilerOptions>
|
|
<Debugging>
|
|
<Exceptions Count="3">
|
|
<Item1>
|
|
<Name Value="EAbort"/>
|
|
</Item1>
|
|
<Item2>
|
|
<Name Value="ECodetoolError"/>
|
|
</Item2>
|
|
<Item3>
|
|
<Name Value="EFOpenError"/>
|
|
</Item3>
|
|
</Exceptions>
|
|
</Debugging>
|
|
</CONFIG>
|