В отношении моего предыдущего вопроса 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
Что является возможной причиной сбоя при слиянии.