У меня есть много видео, и мне нужно поместить изображение перед ними примерно на 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
Вы можете сделать простое наложение изображения, используя следующий синтаксис:
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:a]
означает, что нам нужна первая импортированная звуковая дорожка. Который также будет исходить из input.mp4, но будет указывать на звуковую дорожку, а не на видеодорожку в файле mp4.
Если вам нужно определенное качество/настройки изображения, а не настройки, которые выбирает ffmpeg, добавьте параметры кодирования изображения и/или звука, которые вы хотите использовать. Кодировщик видео по умолчанию будет x264. Возможные настройки см. в руководстве по кодированию H.264 .
/ который у вас есть в вашей команде fe -acodec copy
, -c:a copy
просто повторно использует звук из исходного файла. Хотя вы, конечно, не можете сделать это с видео (в данном случае), его необходимо перекодировать, потому что мы создаем новый источник видео.
Если вы хотите перекодировать аудио, удалите -c:a copy
часть. Возможно, вам придется явно указать кодировщик, например -c:a aac -strict experimental
. Дополнительные сведения см. в руководстве по кодированию AAC .
pix_fmt
спор? Я вижу это в большинстве команд ffmpeg, но независимо от того, включаю я его или удаляю, результат тот же. Действительно ли полезно помещать его в команду?Это дополнение к отличному ответу PTS и ответ для chovy. Если вы хотите разместить оверлей в правом нижнем углу, FFMPEG может очень легко вычислить это для вас.
Используйте модифицированную команду:
ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=W-w:H-h:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4
Ww означает ширину основного видео минус ширину наложения, и то же самое для Hh.
W
— это ffmpeg
псевдоним ширины видео, на которое вы накладываете, и w
псевдоним ширины накладываемого изображения. То же самое с H
и h
. Они также могут называться main_w
(или _h
) и overlay_w
(или _h
)filter_complex
всегда ли выходное видео имеет тот же размер, что и входное видео? Или это делает его того же размера, что и больший размер входного видео и наложения png?
тимонску
Азти