Клип, не заполняющий кадр, ложится поверх нижнего, а не закрывает его

Уменьшенная и сдвинутая картинка выходила в ролик с чёрными полями, и
нижнюю дорожку закрывал не сам клип, а эти поля. Так же вело себя и
уменьшенное видео. Между тем уменьшают клип ровно затем, чтобы под ним
было видно другое.

Теперь «не заполняет кадр» означает то же, что «не сплошной»: наравне с
выбитым цветом и прозрачностью. Такой клип уходит в накладываемые —
предпросмотр рисует его поверх нижнего силами плеера, сборка собирает
участок слоями, где у верхнего слоя цепочка без полей и место, куда он
встаёт. Класть не на что — поля остаются полями, как и были.

Решение одно на оба пути: IsOverlayClip, и в нём TransformFillsFrame
считает по тем же числам, что уходят в фильтр.

Заодно две вещи, всплывшие по дороге:

— у картинки своя ветка уплощения, и слои там не строились вовсе: клип с
  прозрачностью в окне накладывался, а в ролике нет. Теперь строятся.
— в сборке ветка «готовая вставка» стояла раньше ветки слоёв, и кусок со
  слоями уходил в неё за несуществующей заготовкой. Заготовка для такого
  куска больше и не заказывается: это были бы минуты впустую.

Проверка tests/imagecrop.sh получила второй случай: под картинкой видео,
вокруг неё обязано быть видно его. На прежней сборке там чёрное.
This commit is contained in:
4aiman 2026-10-16 16:17:30 +03:00
commit 3d3d02368c
6 changed files with 193 additions and 17 deletions

View file

@ -527,7 +527,19 @@ Linux потом искала по нему `.dll`.
Два клипа **на одной дорожке**, наползшие друг на друга, дают переход:
один плавно перетекает в другой. На разных дорожках перекрытие означает
не переход, а наложение — там по-прежнему побеждает верхний, если он
непрозрачен.
сплошной.
Сплошным клип перестаёт быть по трём причинам: выбит цвет, задана
прозрачность или **он не заполняет кадр**. Последнее — то же самое,
сказанное иначе: уменьшенный или сдвинутый клип занимает часть кадра, а
вокруг остаётся пустое место, которое сборка обкладывает чёрными полями.
Поле непрозрачно, и нижнюю дорожку закрывает не сам клип, а его поля —
поэтому такой клип кладётся поверх нижнего, а не вместо него. Уменьшают
клип ровно затем, чтобы увидеть под ним другое. Класть не на что —
остаются поля.
Отсюда же берётся картинка в углу кадра и два видео рядом: достаточно
уменьшить и сдвинуть клипы на разных дорожках.
В месте наезда под указателем два клипа. Первый щелчок берёт верхний,
повторный по тому же месту переводит выделение на следующий, после
@ -713,6 +725,11 @@ Linux потом искала по нему `.dll`.
«Кадрирование и поворот». Поэтому в кэше лежит столько заготовок,
сколько разных кадрирований у этой картинки, и предпросмотр с роликом
показывают одно и то же.
Заготовка нужна не всегда: если картинка не заполняет кадр, а под ней
что-то лежит, участок собирается наложением, и чёрным полям взяться
неоткуда. Заготовка с полями остаётся для случая, когда класть не на
что.
3. Границы кусков кладутся на кадровую сетку проекта: между кадрами
времени нет, а звук набирается с точностью до отсчёта, и доли кадра
разводят их в стороны.
@ -1050,8 +1067,10 @@ Wine с новой библиотекой не грузилось ничего.
Отдельно от них `tests/imagecrop.sh` — сквозная, без окна: делает
картинку, кладёт её клипом с уменьшением и смещением, собирает секунду
ролика и смотрит на точки готового кадра. Ей нужны `tests/nlvetool`
(`./build.sh test`), ffmpeg и python с PIL.
ролика и смотрит на точки готового кадра. Случая два: класть не на что —
вокруг картинки чёрные поля; под картинкой видео — вокруг неё видно его,
а не поля. Ей нужны `tests/nlvetool` (`./build.sh test`), ffmpeg и python
с PIL.
Последним восьми нужен монтаж в `test/поток/`: `длинный-фейд.nlve` — один
клип с затуханием секунд на семьдесят (такой кусок сводится около