FFMpeg: добавить фоновое изображение в процессе создания видео - PullRequest
0 голосов
/ 05 июля 2018

Что касается моего предыдущего вопроса 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

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

РЕДАКТИРОВАНИЕ: 09 ИЮЛЯ 2018

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

 ffmpeg -i image_X.jpg

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

Изображение 1: Поток № 0: 0: видео: mjpeg, yuvj420p (ПК, bt470bg / неизвестно / неизвестно), 640x480 [SAR 72:72 DAR 4: 3], 25 тбн, 25 тбн, 25 тбк

Изображение 2: Поток № 0: 0: видео: mjpeg, yuvj444p (шт., Bt470bg / неизвестно / неизвестно), 640x480 [SAR 72:72 DAR 4: 3], 25 тбн, 25 тбн, 25 тбк

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

1 Ответ

0 голосов
/ 05 июля 2018

Используйте

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 регистрирует свойства своего первого ввода, такие как кодек, разрешение, timebase..etc, в качестве свойства демультиплексированного потока. Таким образом, для получения достоверных результатов все входные данные должны иметь одинаковые свойства.

...