Аффинный фильтр - отличный способ сделать это.
Вот пример:
echo "
description=Square
frame_rate_num=24
frame_rate_den=1
width=640
height=640
progressive=1
sample_aspect_num=1
sample_aspect_den=1
display_aspect_num=1
display_aspect_den=1
colorspace=708
" > square_profile.txt
melt -profile ./square_profile.txt clip.mp4 -filter affine transition.geometry="0=0,0:1138x640; 720=-498,0:1138x640"
В этом примере предполагается:
- clip.mp4 является источником 16x9 (1920х1080 будет работать)
- Клип длиной 720 кадров (например, 30 секунд при 24 fps)
Позвольте мне разобрать пример для вас.
В первой части указан пользовательский профиль размером 640x640 и имеет квадратное соотношение сторон. Вам не нужно создавать файл каждый раз. Вы можете настроить его в соответствии со своими спецификациями.
-profile ./square_profile.txt
Это говорит о расплавлении, чтобы использовать свой профиль.
transition.geometry= ...
Так вы сообщаете аффинный переход (который использует внутренний фильтр), что вы хотите. Первый номер каждой записи геометрии - это номер кадра, к которому он относится. Фильтр будет интерполировать значения между кадрами. Синтаксис для записи геометрии: «K = X, Y: WxH», где «K» - ключевой кадр, к которому относится геометрия.
0=0,0:1138x640
Первая запись геометрия говорит аффинное фильтр масштабировать изображение до 1138x640 и позиционировать изображение на 0,0.
640 - высота выходного сигнала, указывающая аффинность для масштабирования исходного изображения до высоты 640 для заполнения выходного кадра. 1138 - ширина изображения 16x9, высота которого составляет 640 пикселей. 1138 шире выходного изображения. И так как мы указали, что изображение должно быть расположено на 0,0, правая часть изображения будет обрезана аффинным фильтром.
720=-498,0:1138x640
Второй элемент геометрии говорит аффинное фильтр, чтобы сохранить тот же масштаб, но позиционировать изображение на местоположении х -498. 489 = 1138 - 640. То есть количество пикселей, которые были обрезаны от изображения в первом кадре. И негатив говорит аффинному позиционировать изображение слева от выходного кадра, так что левая часть изображения обрезается. «720 =» указывает, что это геометрия для 720-го кадра.
Позиция x для всех кадров между 0 и 720 будет автоматически интерполирована аффинным фильтром. Таким образом, вы увидите, как изображение воспроизводится слева направо.
Вы можете добавить больше ключевых фреймов в геометрию, чтобы сделать паузу в определенном положении или сделать ее взад-вперед. Аффинный переход (который использует аффинный фильтр) также имеет другие интересные операции, такие как зеркало и цикл. Вы можете увидеть полную документацию здесь: http://www.mltframework.org/bin/view/MLT/TransitionAffine#scale
Спасибо. Я прочитал «полную» документацию. Под «геометрией» можно найти только: название: Прямоугольник Тип: геометрия чтения: нет требуется: нет с объяснением, как у вас, как к тому, что делают параметры. Я заметил, что (0,0) позиционирует верхнюю левую часть масштабированного клипа в верхнем левом углу (не справа внизу). –
Хорошая точка. Я отредактировал ответ, чтобы уменьшить путаницу. – Brian
Не так много людей, желающих улучшить документацию. Поэтому иногда требуется какое-то открытие. Я обнаружил, что одним из самых простых способов понять параметры является установка видеоредактора с открытым исходным кодом, который использует MLT (то есть KDENLIVE или Shotcut или Flowblade), используйте графический интерфейс для создания эффекта, который вы ищете, а затем проверите сохраненный файл проекта , Файл проекта MLT является XML, легко читается и может помочь выяснить, как работают параметры (например, геометрия). – Brian