FFmpeg | Размещение видео бок о бок или стеной
от aNNiMON
Не менее распространённая задача — разместить два или более видео рядом. В этой статье я покажу сразу несколько способов это сделать.
Содержание:
- Фильтр pad
- Фильтры hstack и vstack
- Размещение двенадцати видео стеной 4x3
Фильтр padpad расширяет область видео до указанных размеров, а также может переместить оригинальное видео в другую позицию.
pad=ширина:высота
pad=ширина:высота:pos_x:pos_y
Ширина и высота не должны быть меньше размера входного видео. Если указать значение 0, то будет использован размер входного видео.
Расширить видео до 1280x1024:
Расширить видео до высоты 1000 пикселей, ширина остаётся как есть:
Константы, доступные для использования в фильтре:
iw, in_w — ширина исходного видео
ih, in_h — высота исходного видео
ow, out_w — ширина расширенного видео
oh, out_h — высота расширенного видео
a — отношение ширины и высоты iw/ih
Можно также указывать цвет для фоновой области, используя параметр color.
Увеличить ширину видео в два раза:
Увеличить ширину видео в два раза, использовать белый фон и разместить видео в центре:
Увеличить размер видео в два раза и поместить оригинал в правую нижнюю часть:
Расширить высоту видео в 3 раза и разместить одно и то же видео в этих областях
Фильтры hstack и vstackЗадача последовательного размещения видео бок о бок настолько распространена, что в ffmpeg добавили два фильтра для этого случая:
hstack — размещает два или более видео горизонтально в ряд (высота у всех видео должна быть одинакова)
vstack — размещает два или более видео вертикально в колонку (ширина у всех видео должна быть одинакова)
Разместить два видео в ряд горизонтально:
Разместить три видео в колонку вертикально:
Разместить три видео в колонку вертикально, но video1 внизу, video3 в центре, а video2 вверху:
Изменить контрастность и расположить изменённое видео рядом с оригиналом:
Размещение двенадцати видео стеной 4x3Даны 12 видео, нужно расположить их по 4 в ряд, получив стену 4x3.
Подготавливаем первый ряд:
[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
Следующая статья →Содержание:
- Фильтр pad
- Фильтры hstack и vstack
- Размещение двенадцати видео стеной 4x3
Фильтр padpad расширяет область видео до указанных размеров, а также может переместить оригинальное видео в другую позицию.
pad=ширина:высота
pad=ширина:высота:pos_x:pos_y
Ширина и высота не должны быть меньше размера входного видео. Если указать значение 0, то будет использован размер входного видео.
Расширить видео до 1280x1024:
- ffmpeg -i input.mp4 -vf pad=1280:1024 result.mp4
- 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.
Увеличить ширину видео в два раза:
- ffmpeg -i input.mp4 -vf pad=iw*2:ih result.mp4
- ffmpeg -i input.mp4 -vf pad=iw*2 result.mp4
- ffmpeg -i input.mp4 -vf pad=iw*2:ih:ow/2-iw/2:0:color=white result.mp4
- ffmpeg -i input.mp4 -vf pad=iw*2:ih*2:iw:ih result.mp4
Расширить высоту видео в 3 раза и разместить одно и то же видео в этих областях
- ffmpeg -i input.mp4 ^
- -vf split=3[s1][s2][s3];[s1]pad=iw:ih*3[s1];[s1][s2]overlay=0:h[s12];[s12][s3]overlay=0:h*2 ^
- result.mp4
Фильтры hstack и vstackЗадача последовательного размещения видео бок о бок настолько распространена, что в ffmpeg добавили два фильтра для этого случая:
hstack — размещает два или более видео горизонтально в ряд (высота у всех видео должна быть одинакова)
vstack — размещает два или более видео вертикально в колонку (ширина у всех видео должна быть одинакова)
Разместить два видео в ряд горизонтально:
- ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex hstack result.mp4
- ffmpeg -i video1.mp4 -i video2.mp4 -i video3.mp4 ^
- -filter_complex vstack=3 result.mp4
- ffmpeg -i video1.mp4 -i video2.mp4 -i video3.mp4 ^
- -filter_complex [1][2][0]vstack=3 result.mp4
Изменить контрастность и расположить изменённое видео рядом с оригиналом:
- ffmpeg -i input.mp4 ^
- -vf "split[orig][proc];[proc]eq=contrast=1.8[proc];[orig][proc]hstack" ^
- -y result.mp4
Размещение двенадцати видео стеной 4x3Даны 12 видео, нужно расположить их по 4 в ряд, получив стену 4x3.
- ffmpeg -i in1.mp4 -i in2.mp4 -i in3.mp4 -i in4.mp4 ^
- -i in5.mp4 -i in6.mp4 -i in7.mp4 -i in8.mp4 ^
- -i in9.mp4 -i in10.mp4 -i in11.mp4 -i in12.mp4 ^
- -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 ^
- 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
Выбор потоков (map)