Как создать эффект увеличения с помощью ffmpeg
Я пытаюсь создать эффект масштабирования, используя ffmpeg для видео файла.
Вот код, который я использую:
ffmpeg -i out.mp4 -filter_complex "crop=(640-t):(480-t)" output.mp4
Но это дает мне неопределенную постоянную ошибку.
Я знаю, что урожай принимает iw и ih как константы, но есть ли постоянная времени или какой-либо другой способ достичь того, что я пытаюсь сделать?
2 ответа
Решение
Я использовал n
константа вместо Это сработало:
ffmpeg -i out.mp4 -filter_complex "crop=(640-(n*10)):(480-(n*10))" output.mp4
Вы можете масштабировать с помощью .
Например, это увеличивает видео на 10% во время воспроизведения.
Это должна быть полная команда
ffmpeg -i in.mp4 -t 10 \
-vf "zoompan=fps=60:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)':s=hd1080:z='if(lte(it,2),it/2*0.2+1,1.2)':d=1,scale=iw:ih" out.mp4
Позвольте мне разбить его (см. такжеzoompan
документы )
-
zoompan=
используемый фильтр
Ниже приведены параметры масштабирования, разделенные двоеточием.:
-
fps=60
частота кадров, используемая для расчета каждого кадра. Убедитесь, что это то же самое, что и ввод (вы можете проверить это с помощьюffprobe in.mp4
-
z=
параметры масштабирования. Это выражение, вычисляемое для каждого кадра.-
'if(lte(it,2),it/2*0.1+1,1.1)'
это выражение, используемое для расчета масштабирования в этом кадре. Если время ввода меньше 2 секунд,z
должна быть частью масштабирования, которое вы хотите в этом кадре (it/2
), умноженное на желаемое общее увеличение (0.1
), плюс 1, потому что его нужно увеличить. Если более 2 секунд, используйте конечное состояние масштабирования, в этом случае1.1
.
-
-
x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
x и y позиции, где масштабировать. Здесь мы используем центральное положение для масштабирования. -
d=1
продолжительность этого кадра в количестве кадров. Мы хотим, чтобы каждый кадр длился 1 кадр. -
s=hd1080
выходной размер. По умолчаниюhd720
. Сделайте это таким же, как ваш ввод. -
scale=iw:ih
масштаб видео. Такой же какinput-width
кinput-height