【问题标题】:Any way to complex use of sendcmd?有什么方法可以复杂使用sendcmd?
【发布时间】:2019-01-31 23:12:47
【问题描述】:

根据此链接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 的记录很差((

【问题讨论】:

    标签: ffmpeg


    【解决方案1】:

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

    使用图像输入,而不是 sendcmd。 -i mask1.png只生成一帧图像,所以2.25s时间没有帧。在前面加上-loop 1,生成视频流。

    旋转的c参数放在哪里?

    在旋转滤镜里面,所以[1:v]rotate@1=c=black@0[rotate1]

    由于图像现在循环播放,您应该将shortest=1 添加到叠加过滤器中。

    【讨论】:

    • -i mask1.png 只生成一帧图像,所以在 2.25s 时没有帧 但是覆盖过滤器工作并且图像的位置正在成功更改。
    • 叠加层将视频文件作为其基本输入,当辅助输入完成时,叠加层过滤器会重复最后一帧。
    • 只是尝试一下,它就像一个魅力。谢谢!!!还有一个问题。我可以在 .cmd 文件中使用帧号而不是持续时间吗?
    • 没有。解析器只需要时间戳。
    • 了解,好的。顺便说一句,有没有办法为每个添加的叠加层使用一个 cmd 文件?如果我需要添加多于 2 个具有大量移动和旋转的图像,在这种情况下只有一个 cmd 文件是不方便的。
    猜你喜欢
    • 2015-08-22
    • 2022-06-11
    • 1970-01-01
    • 2015-11-03
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多