Добавьте наложение изображения перед видео с помощью ffmpeg

31

У меня много видео, и мне нужно поместить изображение перед ними примерно на 5 секунд, но добавление его вручную и рендеринг каждый раз будет очень долгим, поэтому я спрашиваю, возможно ли это сделать через ffmpeg, и если вы Пожалуйста, помогите мне с этим, так как у меня нет опыта работы с ffmpeg. Я уже нашел несколько команд, но ни одна из них не сработала. Это например.

ffmpeg -itsoffset 5 -i in.mp4 -r 25 -loop 1 -i intro.png -filter_complex "[1:v] fade=out:125:25:alpha=1 [intro]; [0:v][intro] overlay [v]" -map "[v]" -map 0:a -acodec copy out.mp4
Azthy
источник
1
Вы только что скопировали эту команду или написали ее в соответствии с вашими потребностями? Я спрашиваю, потому что эта команда включает в себя такие вещи, как исчезновение и все другие вещи, не охваченные вашим вопросом. Вам просто нужно наложить изображение или вам нужно больше, чем это?
PTS
Я скопировал его откуда-то, все, что мне нужно, это просто поместить изображение перед видео.
Азти

Ответы:

44

Вы можете сделать простое наложение изображения, используя следующий синтаксис:

ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4

overlay=25:25 означает, что мы хотим расположить изображение на 25 пикселей вправо и на 25 пикселей вниз, начиная с верхнего левого угла (0: 0).

enable='between(t,0,20)' означает, что мы хотим, чтобы изображение показывалось между секундами 0 и 20.

[0:v][1:v]означает, что мы хотим, чтобы первый видеофайл, который мы импортируем -i, в нашем случае input.mp4 или то, как ffmpeg видит его как входной видеофайл с номером 0, находится под входным видеофайлом 1, в нашем случае image.png. :vпросто означает, что мы хотим видео 0 и видео 1. [0:a]означало бы, что мы хотим первую импортированную звуковую дорожку. Который также будет взят из input.mp4, но будет указывать на аудиодорожку вместо видеодорожки в файле mp4.

Если вы хотите получить определенное качество / настройки изображения, а не настройки, которые выбирает ffmpeg, добавьте опции кодирования изображения и / или аудио, которые вы хотите использовать. Кодером видео по умолчанию будет x264. Проверьте руководство по кодированию H.264 для возможных настроек.

-acodec copy/ -c:a copyЧто у вас есть в вашей команде Fe будет просто повторно использовать звук из исходного файла. Хотя вы, конечно, не можете сделать это с видео (в данном случае), его необходимо перекодировать, потому что мы создаем новый источник видео.

Если вы хотите перекодировать аудио, удалите -c:a copyчасть. Возможно, вам придется явно указать кодировщик, например -c:a aac -strict experimental. См. Руководство по кодированию AAC для получения дополнительной информации.

ПТС
источник
Следующая итерация вышеупомянутой команды работала для меня на Android, так как оригинальная команда выдаёт ошибку, как aac, и является экспериментальной функцией: ffmpeg -i input.mp4 строго -2 -i image.png -filter_complex [0: v] [1: v] overlay = 25: 25: enable ='ween (t, 0,20) 'output.mp4
muneikh
есть ли вообще положение внизу, не зная высоты? или далеко не зная ширину?
Чови
конечно, просто проанализируйте видео с помощью ffprobe и извлеките размеры видео из вывода. Может быть, есть также опция, встроенная в ffmpeg, но я не знаю об этом.
PTS
3
Ваша команда заменяет фрагмент исходного видеофайла, но пользователь может захотеть добавить (увеличивая таким образом длину видео) изображение до и / или после видео. Пожалуйста, помогите с этим
Porton
1
@laurent, который зависит от вашего исходного файла и / или вывода. pix_fmt обозначает формат пикселя. Существует множество различных форматов пикселей, доступных для разных кодеков, и один из них гарантирует, что вы не получите то, что вам не подходит. yuv420p является наиболее поддерживаемым форматом пикселей, когда речь идет о h264, но есть также, например, yuv422p и yuv444p.
PTS