有没有办法为 ffmpeg 编写过滤器脚本,这样当我输入时,过滤器会改变行为?
一个例子是用一个键改变对比度,或者在录制流时将两个视频与另一个键混合。
我已经看到我可以以静态方式执行此操作,例如使用新行为重新开始录制,然后调用 concat,由于进程终止和进程提升,这会导致一些帧丢失,但我想知道如果这是可能的,无需重新启动。
最佳答案
使用 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
关于需要用户输入的 ffmpeg cli 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54962494/