FFMpeg: добавление фонового изображения в процессе создания видео

В отношении моего предыдущего вопроса FFMpeg: объединить изображения со звуком для определенной продолжительности Я успешно объединил несколько изображений со звуком определенной продолжительности с помощью следующей команды.

ffmpeg \
-y \
-f concat \
-safe 0 \
-r 1/5 \
-i concat.txt \
-i audio.ogg \
-c:v libx264 \
-profile:v high \
-crf 17 \
-preset ultrafast \
-strict experimental \
-t 15 \
output.mp4

Чтобы добавить фоновое изображение, я попытался использовать https://superuser.com/a/876275/299733 и другие решения, которые существуют в Интернете. Но данное решение не накладывает мои изображения должным образом, и я получал черное видео на протяжении всего времени. Поэтому я еще раз кодирую результирующее видео из предыдущей команды с помощью:

ffmpeg \
-y \
-loop 1 \
-i bg.jpg \
-i output.mp4 \
-filter_complex "overlay=(W-w)/2:(H-h)/2:shortest=1,format=yuv420p" \
-c:v libx264 \
-profile:v high \
-crf 17 \
-preset ultrafast \
-strict experimental \
-t 15 \
output2.mp4

Теперь я могу добиться желаемого результата. Есть ли способ объединить оба запроса в один проход? Или лучше без потери производительности?

Дополнительная информация:

concat.txt

file '/home/shubham/Desktop/FFMpeg/image_1.jpg'
file '/home/shubham/Desktop/FFMpeg/image_2.jpg'
file '/home/shubham/Desktop/FFMpeg/image_3.jpg'

На основе ответа @gyan

Обновленный файл concat.xml:

file '/home/shubham/Desktop/FFMpeg/image_4.jpg'
duration 5
file '/home/shubham/Desktop/FFMpeg/image_5.jpg'
duration 5
file '/home/shubham/Desktop/FFMpeg/image_6.jpg'
duration 5
file '/home/shubham/Desktop/FFMpeg/image_6.jpg'

Обновленная команда:

ffmpeg \
-y \
-loop 1 \
-i bg.jpg \
-f concat \
-safe 0 \
-i concat.txt \
-i audio.ogg \
-filter_complex "[1]fps=25[v];[0][v]overlay=(W-w)/2:(H-h)/2:shortest=1,format=yuv420p" \
-c:v libx264 \
-profile:v high \
-crf 17 \
-preset ultrafast \
-strict experimental \
-t 15 \
output.mp4

Проблема в том, что когда изображения имеют разное разрешение или даже одинаковое разрешение, изображения пропускаются. И в большинстве случаев отображается последнее изображение. Однако нет никаких критериев того, какое изображение выбрано, а какое пропущено. ПРИМЕР: https://drive.google.com/file/d/1JxCsV2eudKzdgWWuefXqdaWPaBf9Dzzd/view?usp=sharing

Однако, если я неоднократно использовал одно и то же изображение или копировал изображение и переименовывал его. В обоих случаях я получаю правильные изображения на фоне без каких-либо пропусков.

ИЗМЕНЕНИЕ: 9 ИЮЛЯ 2018 Г.

Как сказал @gyan в комментариях: Преобразуйте каждое изображение в одинаковое разрешение и тип. Я проверяю информацию об изображениях. с помощью

 ffmpeg -i image_X.jpg

И обнаружил, что два изображения имеют разную кодировку:

Изображение 1: Поток #0:0: Видео: mjpeg, yuvj420p(pc, bt470bg/неизвестно/неизвестно), 640 x 480 [SAR 72:72 DAR 4:3], 25 tbr, 25 tbn, 25 tbc

Изображение 2: Поток #0:0: Видео: mjpeg, yuvj444p(pc, bt470bg/неизвестно/неизвестно), 640x480 [SAR 72:72 DAR 4:3], 25 tbr, 25 tbn, 25 tbc

Что является возможной причиной сбоя при слиянии.


person Killer    schedule 05.07.2018    source источник


Ответы (1)


Использовать

ffmpeg \
-y \
-loop 1 \
-i bg.jpg \
-f concat \
-safe 0 \
-r 1/5 \
-i concat.txt \
-i audio.ogg \
-filter_complex "[1]fps=25[v];[0][v]overlay=(W-w)/2:(H-h)/2:shortest=1,format=yuv420p" \
-c:v libx264 \
-profile:v high \
-crf 17 \
-preset ultrafast \
-strict experimental \
-t 15 \
output.mp4

Демультиплексор concat регистрирует свойства своего первого входа, такие как кодек, разрешение, временная база и т. д., как свойство демультиплексированного потока. Таким образом, для получения надежных результатов все входные данные должны иметь одинаковые свойства.

person Gyan    schedule 05.07.2018
comment
Спасибо за ваш ответ. Однако во всем приложении я получаю тот же черный видеокадр, о котором я упоминал в вопросе. - person Killer; 05.07.2018
comment
Удалите -r 1/5 и в текстовом файле после каждой записи файла добавьте в следующей строке duration 5. Также продублируйте последнюю запись файла и добавьте ее в качестве последней строки. - person Gyan; 05.07.2018
comment
Спасибо еще раз. Поскольку ffmpeg не является обычным программированием, мне потребуется немного времени, чтобы точно понять, работает ли команда, особенно filter_complex. Не могли бы вы взглянуть на редактирование. Неуверенно пропущено несколько изображений. - person Killer; 06.07.2018
comment
Все входные данные для демультиплексора concat должны иметь одинаковые свойства: кодек, разрешение и т. д. - person Gyan; 06.07.2018
comment
Не могли бы вы порекомендовать мне решение для этой ситуации? - person Killer; 06.07.2018
comment
Преобразуйте каждое изображение в одинаковое разрешение и тип. - person Gyan; 06.07.2018
comment
Можете ли вы порекомендовать мне ссылку на какое-либо решение для объединения изображений разных форматов или перекодирования изображения или обновить ответ. заранее спасибо - person Killer; 10.07.2018
comment
Пакет/скрипт для преобразования каждого изображения в один и тот же тип. - person Gyan; 10.07.2018