有没有一种方法可以为ffmpeg编写过滤器脚本,以便在我输入任何内容时,过滤器都会改变行为?
一个例子是在录制流时,用一个键改变对比度,或用另一个键混合两个视频。
我已经看到我可以以静态方式执行此操作,例如以新行为重新开始记录,然后再调用concat,这会由于进程终止和进程失效而导致某些帧丢失,但是我想知道是否有可能,而无需重新启动。
答案 0 :(得分:1)
我认为您正在寻找 sendcmd ,该过滤器受多个过滤器支持。请参见FFmpeg filters documentation(搜索sendcmd)。
答案 1 :(得分:1)
使用zmq and azmq过滤器。与sendcmd过滤器使用预先编写的命令不同,(a)zmq允许您任意发送过滤器命令。
要启用这些过滤器,您需要安装libzmq库和标头,并用ffmpeg
配置--enable-libzmq
。
仅支持命令的过滤器可以与此过滤器一起使用。请参考ffmpeg -filters
的输出以查看哪些过滤器支持命令的列表。此外,并非过滤器的所有选项都被视为命令。有关支持的命令列表,请参阅每个过滤器的文档。
请考虑以下由ffplay生成的过滤器图。在此示例中,最后一个覆盖过滤器具有实例名称。所有其他过滤器将具有默认实例名称。
ffplay -dumpgraph 1 -f lavfi "
color=s=100x100:c=red [l];
color=s=100x100:c=blue [r];
nullsrc=s=200x100, zmq [bg];
[bg][l] overlay [bg+l];
[bg+l][r] overlay@my=x=100 "
要更改视频左侧的颜色,可以使用以下命令:
echo Parsed_color_0 c yellow | tools/zmqsend
要更改右侧:
echo Parsed_color_1 c pink | tools/zmqsend
要更改右侧的位置,请执行以下操作:
echo overlay@my x 150 | tools/zmqsend