Как объединить два изображения в одно с помощью FFmpeg?

Есть два изображения: a.jpg и b.jpg.

Я просто хочу знать, как объединить их в одно изображение, используя ffmpeg.

Как мне завершить команду ffmpeg -i a.jpg -i b.jpg, чтобы получить выходное изображение c.jpg?

Это пример того, чего я пытаюсь достичь:

  1. а.jpg

    a.jpg

  2. b.jpg

    b.jpg

  3. c.jpg

    a.jpg и b.jpg рядом на одном изображении


person n2v2rda2    schedule 07.07.2014    source источник
comment
Вы можете рассмотреть возможность изменения принятого ответа, поскольку текущий недействителен.   -  person Mateusz Piotrowski    schedule 19.08.2016


Ответы (3)


Я думаю, что плитка — это ваша ffmpeg команда.

Дополнительную информацию можно найти на Superuser.

Пытаться:

ffmpeg -i a.jpg -i b.jpg -filter_complex scale=120:-1,tile=2x1 output.jpg
person Álvaro    schedule 09.07.2014
comment
Я получаю черный ящик вместо b.jpg в output.jpg, когда использую вашу команду. - person Mateusz Piotrowski; 18.06.2016
comment
Этот метод не подходит для соединения изображений. Вот почему: superuser.com/a/1091070/442991 - person Mateusz Piotrowski; 19.06.2016

Используйте фильтр hstack.

2 изображения:

ffmpeg -i a.jpg -i b.jpg -filter_complex hstack output.jpg

3 изображения:

ffmpeg -i a.jpg -i b.jpg -i c.jpg -filter_complex "[0][1][2]hstack=inputs=3" output.jpg
person llogan    schedule 19.06.2016
comment
Это работает, если у нас есть два файла с одинаковой ширинойXвысота, но что, если у нас есть два изображения с разной ширинойXвысота, как нам их масштабировать и соединить их?? - person Jitendar M; 04.06.2018
comment
@JitendarM См. Пример масштабирования в разделе Вертикальное или горизонтальное размещение нескольких видео с использованием ffmpeg? - person llogan; 04.06.2018
comment
спасибо, будем разбираться. - person Jitendar M; 05.06.2018
comment
Я пытался использовать этот метод для объединения трех изображений, но, видимо, нам нужно сделать это группами по два. Мне этого было достаточно, но знаете ли вы, есть ли способ объединить более двух изображений одновременно? РЕДАКТИРОВАТЬ: только что нашел ответ на этот вопрос в теме, упомянутой в начале этого поста using-ffmpeg" title="вертикально или горизонтально складывать несколько видео с помощью ffmpeg"> stackoverflow.com/questions/11552565/ - person João Quintas; 11.06.2018

Осторожно! Грязные хаки впереди!

Обратите внимание на ответ LordNeckbeard, так как он намного лучше моих хаков.


ответ Альваро мне не помог, поэтому я провел дополнительные исследования, чтобы решить эту проблему. Вот что я узнал:

Я собираюсь использовать следующие переменные.

A_HEIGHT=458
A_WIDTH=370
B_HEIGHT=600
B_WIDTH=750
B_CROP_X=112
B_CROP_Y=0
A_IMAGE=a.jpg
B_IMAGE=b.jpg
B_IMAGE_SCALED=b-scaled.png
B_IMAGE_CROPPED=b-cropped.png
C_IMAGE_WITHOUT_A=c-without-a.png
C_IMAGE=c.png

Масштаб и обрезка

В случае, если ваши изображения не имеют одинаковой ширины и высоты.

Этот сценарий масштабирует B до размера A.

# Scale.
ffmpeg -y -i ${B_IMAGE} -vf \
  scale=${A_HEIGHT}*${B_WIDTH}/${B_HEIGHT}:${A_HEIGHT} ${B_IMAGE_SCALED}

# Crop.
ffmpeg -y -i ${B_IMAGE_SCALED} -vf \
  "crop=${A_WIDTH}:${A_HEIGHT}:${B_CROP_X}:${B_CROP_Y}" ${B_IMAGE_CROPPED}

Объединить/объединить два изображения

ffmpeg -y -i ${B_IMAGE_CROPPED} -filter_complex tile=2x1 ${C_IMAGE_WITHOUT_A}

Теперь C_IMAGE_WITHOUT_A не хватает A; вместо него черный фон. (Вы должны получить что-то похожее на картинку ниже.)

Пример

Тем не менее я нашел способ объединить эти два изображения:

ffmpeg -y -i ${C_IMAGE_WITHOUT_A} -i ${A_IMAGE} \
  -filter_complex overlay=${A_WIDTH}:0 ${C_IMAGE}
person Mateusz Piotrowski    schedule 18.06.2016