FFmpeg | Размещение видео бок о бок или стеной

от
FFmpeg    pad, hstack, vstack

Не менее распространённая задача — разместить два или более видео рядом. В этой статье я покажу сразу несколько способов это сделать.

Содержание:
  - Фильтр pad
  - Фильтры hstack и vstack
  - Размещение двенадцати видео стеной 4x3

Фильтр padpad расширяет область видео до указанных размеров, а также может переместить оригинальное видео в другую позицию.
pad=ширина:высота
pad=ширина:высота:pos_x:pos_y
Ширина и высота не должны быть меньше размера входного видео. Если указать значение 0, то будет использован размер входного видео.

Расширить видео до 1280x1024:
  1. ffmpeg -i input.mp4 -vf pad=1280:1024 result.mp4
Расширить видео до высоты 1000 пикселей, ширина остаётся как есть:
  1. ffmpeg -i input.mp4 -vf pad=0:1000 result.mp4

Константы, доступные для использования в фильтре:
  iw, in_w — ширина исходного видео
  ih, in_h — высота исходного видео
  ow, out_w — ширина расширенного видео
  oh, out_h — высота расширенного видео
  a — отношение ширины и высоты iw/ih
Можно также указывать цвет для фоновой области, используя параметр color.

Увеличить ширину видео в два раза:
  1. ffmpeg -i input.mp4 -vf pad=iw*2:ih result.mp4
  1. ffmpeg -i input.mp4 -vf pad=iw*2 result.mp4
Увеличить ширину видео в два раза, использовать белый фон и разместить видео в центре:
  1. ffmpeg -i input.mp4 -vf pad=iw*2:ih:ow/2-iw/2:0:color=white result.mp4
Увеличить размер видео в два раза и поместить оригинал в правую нижнюю часть:
  1. ffmpeg -i input.mp4 -vf pad=iw*2:ih*2:iw:ih result.mp4

Расширить высоту видео в 3 раза и разместить одно и то же видео в этих областях
  1. ffmpeg -i input.mp4 ^
  2.    -vf split=3[s1][s2][s3];[s1]pad=iw:ih*3[s1];[s1][s2]overlay=0:h[s12];[s12][s3]overlay=0:h*2 ^
  3.    result.mp4
1 из 5Пошаговая демонстрация
[1] (input.mp4)
  1. AAAAAA
  2. AAAAAA
  3. AAAAAA


Фильтры hstack и vstackЗадача последовательного размещения видео бок о бок настолько распространена, что в ffmpeg добавили два фильтра для этого случая:
hstack — размещает два или более видео горизонтально в ряд (высота у всех видео должна быть одинакова)
vstack — размещает два или более видео вертикально в колонку (ширина у всех видео должна быть одинакова)

Разместить два видео в ряд горизонтально:
  1. ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex hstack result.mp4
Разместить три видео в колонку вертикально:
  1. ffmpeg -i video1.mp4 -i video2.mp4  -i video3.mp4 ^
  2.        -filter_complex vstack=3 result.mp4
Разместить три видео в колонку вертикально, но video1 внизу, video3 в центре, а video2 вверху:
  1. ffmpeg -i video1.mp4 -i video2.mp4  -i video3.mp4 ^
  2.        -filter_complex [1][2][0]vstack=3 result.mp4

Изменить контрастность и расположить изменённое видео рядом с оригиналом:
  1. ffmpeg -i input.mp4 ^
  2.    -vf "split[orig][proc];[proc]eq=contrast=1.8[proc];[orig][proc]hstack" ^
  3.    -y result.mp4


Размещение двенадцати видео стеной 4x3Даны 12 видео, нужно расположить их по 4 в ряд, получив стену 4x3.
  1. ffmpeg -i in1.mp4 -i in2.mp4 -i in3.mp4 -i in4.mp4 ^
  2.        -i in5.mp4 -i in6.mp4 -i in7.mp4 -i in8.mp4 ^
  3.        -i in9.mp4 -i in10.mp4 -i in11.mp4 -i in12.mp4 ^
  4.    -filter_complex [0][1][2][3]hstack=4[row1];[4][5][6][7]hstack=4[row2];[8][9][10][11]hstack=4[row3];[row1][row2][row3]vstack=3 ^
  5.    result.mp4
Подготавливаем первый ряд:
[0][1][2][3]hstack=4[row1]
Второй ряд:
[4][5][6][7]hstack=4[row2]
Третий ряд:
[8][9][10][11]hstack=4[row3]
Затем эти три ряда объединяем вертикально:
[row1][row2][row3]vstack=3


  • +1
  • views 3282