FFmpeg 缩放+旋转+裁剪动画

FFmpeg 缩放+旋转+裁剪动画

我有一段代码可以随着时间推移缩放和旋转视频输入:

ffmpeg -f lavfi -i testsrc=duration=10:size=720x1280:rate=30 \
[0]setpts=PTS-STARTPTS,split=3[split1][split2][split3];\
[split1]trim=start=0:end=1[seg1];\
[split2]trim=start=1:end=1.01,loop=15:1:1,setpts=N/FRAME_RATE/TB,scale='iw+n*80':-1:eval=frame,rotate=0.1*PI*t:720:1280,crop=720:1280,[seg2];[seg2]split=2[seg2-1][seg2-2];\
[seg2-1]reverse,fifo,loop=25:1:1,setpts=N/FRAME_RATE/TB[seg3];\
[split3]setpts=PTS-1/TB,trim=start=0:end=2[seg4];\
[seg1][seg2-2][seg3][seg4]concat=n=4[comp] -map "[comp]" output.mp4

它看起来像这样:
在此处输入图片描述
我的挑战是:

  • 我想不是使用reverse实际值才能完全控制反向旋转/缩放的持续时间和时间。
    基本上,旋转和缩放过滤器可以按帧打印它们的值吗?

Zoompan 的答案是有效的。但请解释如何控制不同的值。

答案1

我会把它放在这里以免忘记:

#!/bin/bash
WID=1280
HEI=720
FPS=24000/1001

ffmpeg \
-ss 0.00 -to 1.00 -i input.mp4 \
-ss 1.00 -to 1.04 -i input.mp4 \
-ss 1.00 -to 2.80 -i input.mp4 \
-filter_complex "
[1:v]loop=12:1:0,
scale='iw+n*80':-1:eval=frame,
rotate=0.1*PI*t:${WID}:${HEI},
crop=${WID}:${HEI}[a];
anullsrc=cl='5.1(side)':r=48000:d=0.5[b];
[1:v]loop=12:1:0,
scale='iw+12*80-n*80':-1:eval=frame,
rotate=0.1*PI*(0.5-t):${WID}:${HEI},
crop=${WID}:${HEI},
setsar=1[c];
anullsrc=cl='5.1(side)':r=48000:d=0.5[d];
[0:v][0:a][a][b][c][d][2:v][2:a]concat=n=4:v=1:a=1
" -c:v h264_nvenc -cq 18 -c:a aac -q:a 5 -y /tmp/output.mp4 -hide_banner

ffplay -loop 0 /tmp/output.mp4 -hide_banner

相关内容