3 lavfi 具有不同时间和文本复杂过滤器

3 lavfi 具有不同时间和文本复杂过滤器

大家好,我想要 3 个 lavfi: 1 在开始处,颜色为黑色,持续时间为 1 秒 1 在中间,持续时间为 4 秒 1 在结束处,颜色为黑色,持续时间为 1 秒

问题是这 3 个 lavfi 相互重叠了 5 秒,我看不到中间的白色 lavfi,我试图将它们连接起来,但没有用。我遗漏了什么吗?

ffmpeg -y -f lavfi -i color=c=0x000000:s=640x480 -ss 0 -t 1 -f lavfi -i color=c=0xFFFFFF:d=4.23:s=640x480 -ss 1 -t 4.23 -f lavfi -i color=c=0x000000:s=640x480 -ss 4.23 -t 5.23 -preset ultrafast -crf 18 -filter_complex " [0:v:0][1:v:0][2:v:0]concat=n=3:v=1[v] " -format hls -sn -hls_time 2 -hls_list_size 0 -hls_flags split_by_time -hls_playlist_type event -g 4 -r 25 -map "[v]" output/index.m3u8

另外,如何在输入之间添加复杂的过滤器转换?


@Gyan 谢谢,它在d过滤器内部工作;连接这 3 个可以工作[0:v:0][1:v:0][2:v:0]concat=n=3:v=1[v]。但是我如何定位每个输入并向其中添加绘制文本?

[0:v]fade=t=in:st=0:d=2[0:v];\n' +
      '          [1:v]drawtext=fontfile=../../preview/fonts/tangerine-regular.ttf\n' +
      "            :text='In Loving Memory'\n" +
      '            :fontcolor=0x000000\n' +
      '            :fontsize=42\n' +
      '            :x=(w-text_w)/2\n' +
      '            :y=(h-text_h)/2 - text_h/2[1:v];\n' +
      '          [2:v]fade=t=in:st=0:d=2[2:v]; [0:v:0][1:v:0][2:v:0]concat=n=3:v=1[v]

我尝试了这个但我得到了这个:

'[Parsed_fade_0 @ 0x7fd4a500f300] [IMGUTILS @ 0x7ffee89c61d8] Picture size 0x0 is invalid\n' +
      'Error reinitializing filters!\n' +
      'Failed to inject frame into filter network: Invalid argument\n' +
      'Error while processing the decoded data for stream #2:0\n'`` +

答案1

输入的搜索和持续时间在该输入之前进行。

-f lavfi -i color=c=0x000000:s=640x480 -ss 0 -t 1 -f lavfi -i color=c=0xFFFFFF:d=4.23:s=640x480 -ss 1 -t 4.23 -f lavfi -i color=c=0x000000:s=640x480 -ss 4.23 -t 5.23

==>

-f lavfi -ss 0 -t 1 -i color=c=0x000000:s=640x480 -f lavfi -ss 1 -t 4.23 -i color=c=0xFFFFFF:d=4.23:s=640x480 -f lavfi -ss 4.23 -t 5.23 -i color=c=0x000000:s=640x480

语法基本整理好了。然而,语义却不合理。

对于颜色滤镜,搜索没有任何意义,因为它是纯色的静态流。但即使搜索有意义,结果也会出乎意料。

在 中-ss 1 -t 4.23 -i color=c=0xFFFFFF:d=4.23:s=640x480,滤镜本身指定的总持续时间为 4.23 秒。因此,如果从 1 秒开始,滤镜将仅发送 3.23 秒的帧。对于颜色滤镜,最好只在d滤镜内部使用,并避免ss/t

相关内容