有什么办法可以复杂地使用sendcmd?

时间:2019-01-31 13:58:02

标签: ffmpeg

根据此链接Sendcmd in ffmpeg,我正在尝试设置一些旋转和缩放覆盖层

我需要在视频上添加一些图像,并在所需的帧或持续时间上对它们进行旋转旋转缩放。

我的test.cmd是

0
overlay@1 x 10,
overlay@1 y 10,
overlay@2 x 20,
overlay@2 y 20,
overlay@3 x 30,
overlay@3 y 30,
rotate@1 angle '45*PI/180';


2.25
overlay@1 x 20,
overlay@1 y 20,
overlay@2 x 30,
overlay@2 y 30,
overlay@3 x 40,
overlay@3 y 40,
rotate@1 angle '90*PI/180';

我的命令是

ffmpeg -i video.mp4 -i mask1.png -i mask2.png -i mask3.png -filter_complex "[0:v]sendcmd=f=test.cmd,nullsink;[1:v]rotate@1[rotate1];[2:v]rotate@2[rotate2];[3:v]rotate@3[rotate3];[0:v][rotate1]overlay@1[bg1];[bg1][rotate2]overlay@2[bg2];[bg2][rotate3]overlay@3[v]" -map "[v]" -map 0:a? -c:a copy OUT.mp4

第一个图片在0持续时间内仅旋转一次((

1)我的代码有什么问题?

2)在这种情况下如何进行透明轮换?在哪里放置c参数进行旋转?

我认为ffmpeg文档中记录的sendcmd很糟糕((

1 个答案:

答案 0 :(得分:1)

1)我的代码出了什么问题?

使用图像输入,而不是sendcmd。 -i mask1.png仅生成一帧图像,因此在2.25s的时间没有帧。之前添加-loop 1,以生成视频流。

在哪里放置用于旋转的c参数?

在旋转滤镜内部,因此[1:v]rotate@1=c=black@0[rotate1]

由于图像现在已循环播放,因此您应将shortest=1添加到叠加层滤镜。