Предпросмотр показывает кадрирование клипа
Клип со своим кадрированием играл в окне во весь кадр: цепочка фильтров у mpv одна на весь список кусков, а включить её на одном куске и выключить на следующем нечем — из фильтров ffmpeg по времени переключается только наложение. Обошлось без цепочки вовсе. У вывода mpv своя обрезка, и делает её видеокарта: курсор зашёл в клип с кадрированием — выставили, вышел — сняли. Ни перестройки цепочки, ни копирования кадров из памяти видеокарты в обычную. Рамку источника считает теперь один код на две стороны: по ней окно «Кадрирование и поворот» рисует рамку, и её же плеер отдаёт как обрезку. Проверка в tests/lfmcheck сверяет рамку с фильтром сборки: увеличение 2.77 даёт 970x546 посередине, и это ровно то, что вырезает crop=2688:1512:2379:1338 после scale=7446:4188. Проверено глазами на невидимом экране, на настоящем материале с дрона: картинка в окне совпала с готовым роликом, на границе с обычным клипом обрезка снимается и возвращается. Сверено со сборкой из прошлого коммита — там на том же месте кадр без кадрирования. Не покрыто и записано в BACKLOG: отражение (свойства для него нет), растяжение и участки с наложением — там кадр уже сведён цепочкой.
This commit is contained in:
parent
2160c33790
commit
235cd00e9a
8 changed files with 329 additions and 70 deletions
49
BACKLOG.md
49
BACKLOG.md
|
|
@ -76,46 +76,35 @@ ffmpeg проблемой не является: он запускается о
|
|||
MP4/H.264 нельзя — контейнер и кодек альфу не хранят. Для этого нужен
|
||||
отдельный вывод в VP9 или ProRes 4444.
|
||||
|
||||
## Предпросмотр не показывает кадрирование обычного клипа
|
||||
## Предпросмотр: чего он про кадрирование всё ещё не показывает
|
||||
|
||||
Кадрирование и поворот видны в окне только у клипов с ключом или
|
||||
прозрачностью: их плеер кладёт поверх основы сам и применяет к ним
|
||||
цепочку фильтров. Обычный клип идёт списком кусков, а список фильтровать
|
||||
нечем — он играется как есть, во весь кадр. В готовом ролике при этом всё
|
||||
верно: такой кусок помечен на пересборку и обкладывается полями.
|
||||
Кадрирование обычного клипа окно теперь показывает — обрезкой на выводе
|
||||
плеера, её делает видеокарта даром. Остались три случая, где оно
|
||||
по-прежнему играется как есть, и для них точную картинку даёт окно
|
||||
«Кадрирование и поворот»:
|
||||
|
||||
Проверено опытом: у клипа выключен только ключ, кадрирование оставлено —
|
||||
окно показывает его во весь кадр.
|
||||
**Отражение.** У вывода mpv нет свойства для отражения, только для
|
||||
поворота. Понадобится — придётся вести такой клип через цепочку.
|
||||
|
||||
Почему нельзя просто добавить фильтр. Цепочка у mpv одна на весь список
|
||||
кусков, а кадрирование задаётся каждому клипу своё. Включить фильтр на
|
||||
одном куске и выключить на следующем нечем: из фильтров ffmpeg по времени
|
||||
переключаются только те, у кого есть поддержка временной шкалы, а у
|
||||
`crop` и `scale` её нет — есть только у `overlay`. Значит время включения
|
||||
выражается единственным способом: раздвоить поток, одну ветку обрезать и
|
||||
растянуть, и наложить её на другую с `enable='between(t,...)'`. Ветка при
|
||||
этом работает на каждом кадре фильма, а не только там, где клип виден.
|
||||
**Растяжение.** Кадр жмётся неравномерно, рамкой это не описать.
|
||||
|
||||
Замер (DJI 2688x1512, HEVC 55 Мбит/с, 600 кадров, `--vo=null`):
|
||||
**Участок с наложением.** Там кадр уже сведён цепочкой, и обрезка на
|
||||
выводе резала бы сведённое целиком, вместе с нижним слоем. Такой клип
|
||||
нужно вести через ту же цепочку, что и само наложение.
|
||||
|
||||
Цена пути через цепочку известна, мерили (DJI 2688x1512, HEVC
|
||||
55 Мбит/с, 600 кадров, `--vo=null`):
|
||||
|
||||
| | время | кадров в секунду |
|
||||
|---|---|---|
|
||||
| без фильтра | 1.82 с | 330 |
|
||||
| ветка «обрезать и растянуть» с `enable` | 2.81 с | 214 |
|
||||
|
||||
Нужно 60, то есть запас трёхкратный: путь через цепочку по деньгам
|
||||
проходит. Раньше здесь было написано, что для 2688x1512 это уже не
|
||||
пустяк, — написано по памяти о замере вписывания, а не об этом случае.
|
||||
|
||||
Но есть путь дешевле. mpv умеет обрезать и увеличивать на выводе, силами
|
||||
видеокарты: свойства `video-crop`, `video-zoom`, `video-pan-x/y`,
|
||||
`video-rotate` есть в нашей версии 0.37. Они действуют на всё окно сразу,
|
||||
но плеером управляем мы и знаем, где курсор: зашли в клип с кадрированием
|
||||
— выставили, вышли — сняли. Ни цепочки, ни копирования кадров из памяти
|
||||
видеокарты в обычную. Ограничения: одно преобразование на всё окно, так
|
||||
что при одновременном наложении всё равно нужна цепочка; отражения таким
|
||||
свойством не задать; переключение на границе клипа придёт с запозданием в
|
||||
кадр-другой.
|
||||
Нужно 60, то есть запас трёхкратный: по деньгам проходит. Устроена она
|
||||
так: раздвоить поток, одну ветку обрезать и растянуть, и наложить её на
|
||||
другую с `enable='between(t,...)'`. Иначе никак — из фильтров ffmpeg по
|
||||
времени переключается только `overlay`, у `crop` и `scale` поддержки
|
||||
временной шкалы нет.
|
||||
|
||||
## Два видео рядом в одном кадре
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue