Что я хочу сделать:

У меня есть x количество изображений png/jpg, и я хочу показать их разное количество времени, несколько дольше и немного меньше.

  • a1.jpg 1-е фото остается в течение 3 секунд
  • a2.png остается в течение 10 секунд
  • a3.jpg остается до конца аудио

Видео должно быть столько же, сколько audio.mp3

это мой код до сих пор после прочтения документации, не знаю, что случилось, я получаю испорченное видео без звука и показывает только последнее изображение.

Также хотел бы центрировать изображения, если это возможно.

ffmpeg -y \
  -loop 1 -t 1 -i a1.jpg \
  -loop 1 -t 1 -i a2.jpg \
  -loop 1 -t 4 -i a3.jpg \
  -loop 1 -t 1 -i a4.png \
  -loop 1 -t 1 -i a5.png \
  -i audio.mp3 \
  -c:v libx264 -pix_fmt yuv420p -c:a copy video.mp4

пытаться

ffmpeg -y -framerate 15 \
  -loop 1 -t 1 -i a1.jpg \
  -loop 1 -t 1 -i a2.jpg \
  -loop 1 -t 4 -i a3.jpg \
  -loop 1 -t 1 -i a4.png \
  -loop 1 -t 1 -i a5.png \
  -i audio.mp3 \
  -c:v libx264 -pix_fmt yuv420p -c:a copy \
  -filter_complex " \
  [0]setdar=16/9[a1],[a1]scale=720x406[a];[1]setdar=16/9[b1],[b1]scale=720x406[b];[2]setdar=16/9[c1],[c1]scale=720x406[c];[3]setdar=16/9[d1],[d1]scale=720x406[d];[4]setdar=16/9[e1],[e1]scale=720x406[e]; 
  [a][b][c][d][e]concat=n=5,format=yuv420p[v],[v]scale=720x406[v1],[v1]setdar=16/9[v2]" \
  -map "[v2]" -c:a copy out.mp4

1 ответ1

2

Основной шаблон

ffmpeg -y \
  -loop 1 -t 1 -i a1.jpg \
  -loop 1 -t 1 -i a2.jpg \
  -loop 1 -t 4 -i a3.jpg \
  -loop 1 -t 1 -i a4.png \
  -loop 1 -i a5.png \
  -i audio.mp3 \
  -filter_complex "concat=n=5" -shortest \
  -c:v libx264 -pix_fmt yuv420p -c:a aac video.mp4

Спецификация t для каждого изображения устанавливает его продолжительность. Символ t для последнего изображения должен быть опущен, если вы хотите, чтобы видео длилось до конца звука.

Я использую фильтр concat для объединения всех видеовходов. Хорошей практикой является маркировка входов, к которым будет присоединен фильтр concat, но если он не указан, фильтр будет захватывать первые N -i входов, где N - значение, установленное в фильтре concat. Все изображения должны иметь одинаковое разрешение и соотношение сторон.

Ваша команда копирует аудио, но MP3, хотя и разрешен, не является стандартным в MP4, и некоторые плееры, такие как Quicktime, не будут воспроизводить файл, поэтому я изменил его на AAC.


Для изображений неравного размера измените filter_complex на

"[0]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i0];
 [1]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i1];
 [2]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i2];
 [3]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i3];
 [4]scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2,setsar=1[i4];
 [i0][i1][i2][i3][i4]concat=n=5"

W и H следует заменить числовыми значениями ширины и высоты целевого видео.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .