2016-02-16 10 views
0

Я хочу сделать видео, например, с соотношением сторон 16: 9, и сгенерировать еще одно соотношение сторон 1: 1 путем обрезки, так что область посева изменяется во времени. Например, предположим, что источник 1920x1080:MLT, изменяющаяся во времени культура

  • кадра 0 х культур от 0 до 1080
  • кадра 200 х культур от 240 до 1080 + 240
  • рамы 350-380 плавно скользить

в конечном итоге создавая видео с соотношением сторон 1: 1 при заданном разрешении (скажем, 640x640).

ffmpeg может сделать это статически (т. Е. Vf crop = x: y: w: h, scale = 640x640), но я получаю средства для этого, так что раздел обрезанных изменяется. По сути, я хочу адаптировать широкоэкранное видео для просмотра на Google картоне (и тому подобное).

Это простое с mlt? До сих пор я пробовал прикреплять аффинный фильтр, устанавливая переход.geometry, но я смущен относительно того, с какими координатами я работаю (я хотел бы указать вещи, с точки зрения которых координаты источника отображаются в крайнем левом/правом).

ответ

1

Аффинный фильтр - отличный способ сделать это.

Вот пример:

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,0) позиционирует верхнюю левую часть масштабированного клипа в верхнем левом углу (не справа внизу). –

+0

Хорошая точка. Я отредактировал ответ, чтобы уменьшить путаницу. – Brian

+0

Не так много людей, желающих улучшить документацию. Поэтому иногда требуется какое-то открытие. Я обнаружил, что одним из самых простых способов понять параметры является установка видеоредактора с открытым исходным кодом, который использует MLT (то есть KDENLIVE или Shotcut или Flowblade), используйте графический интерфейс для создания эффекта, который вы ищете, а затем проверите сохраненный файл проекта , Файл проекта MLT является XML, легко читается и может помочь выяснить, как работают параметры (например, геометрия). – Brian