在ffmpeg中以特定间隔添加滤色器

时间:2012-02-24 10:30:22

标签: ffmpeg

我希望在特定的时间间隔将ffmpeg中的滤镜添加到rtmp流中,比如每10秒钟10秒。我尝试了两种方法。第一个:

-vf "color=#8EABB8@0.9:480x208,select='gte(t,10)*lte(t,20)' [color];[in][color] overlay [out]"

这只会流式选择指示的10秒,并应用滤镜而不是播放整个流,并将滤镜应用到这20秒。

然后我学会了split和fifo并尝试了这种方法:

-vf "[in] split [no-color], fifo, [with-color] overlay [out]; [no-color] fifo, select='gte(t,10)*lte(t,20)' [with-color]"

我希望这可以播放整个流,然后选择指定的10秒以便我可以应用过滤器,但它与第一​​种方法相同,只播放选定的10秒而不是整个流。

提前致谢。

3 个答案:

答案 0 :(得分:3)

正如this question所述,似乎没有办法将视频过滤器应用于视频流的特定时间段,而不是将其拆分为片段,应用过滤器和重新组合。如果您找到更好的方法,请分享。

答案 1 :(得分:2)

您更改了进入叠加层的流的顺序。

似乎如果“select”ed流作为overlay过滤器的第一个输入,则叠加层也会在非选定时间内清空其输出。

但是如果你首先向overlay提供一个稳定的流然后选择它,它将在整个时间内输出一个流。

我尝试了以下一组过滤器:

-vf "[in]split[B1][B2];[B1]fifo,drawbox=-1:-1:5000:5000:invert:2000,vflip,hflip[B1E];[B2]fifo,select='gte(t,5)'[B2E];[B1E][B2E]overlay[out]"

我的版本为图表:

                _,--[B1]--fifo--drawbox--flip--[B1E]--._
[in]---split--X                                          X--overlay--[out]
                ‾'--[B2]--fifo--select---------[B2E]--'‾

您的版本是(选择过滤器是第一个overlay输入!!):

                _,--fifo--select---[with-color]--._
[in]---split--X                                     X--overlay--[out]
                ‾'--[no-color]--fifo-------------'‾

原因是

...[B2E];[B1E][B2E]overlay...

...,[B1E]overlay...

是等价的。

但是仍然存在一些问题:你需要一次还是每10秒,e。克。?

答案 2 :(得分:1)

我正在处理类似的问题,我使用过滤器slpit,overlay和concat的组合,它可以工作,你可以试试。

-filter_complex "[0:v]split[v1][v2];[v1]select='lt(t,5)',setpts=PTS-STARTPTS[iv1];[v2]select='gte(t,5)'[over];[over][1:v] overlay=W-w:H-h:shortest=1,setpts=PTS-STARTPTS[iv2];[iv1][iv2]concat=n=2:v=1:a=0"

但我的问题是,我使用gif作为第二个输入,因为它包含透明的颜色信息,但gif文件不包含音频。如何用透明(或alpha)和音频制作电影?