大家好,我想要 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
。