FFmpeg通过ZMQ控制drawbox参数返回38 Function not implemented错误如何解决
错误原因
- 你当前使用的
drawbox滤镜没有启用动态参数支持:默认状态下drawbox的参数是固定常量,滤镜不会实现动态修改的回调接口,所有传入的控制命令都会返回Function not implemented错误。 - 你使用的
reinit命令并非通用滤镜命令:reinit仅对少数明确实现了该接口的滤镜有效,drawbox本身没有设计reinit相关的处理逻辑,调用自然会报错。 - 部分旧版本FFmpeg的
drawbox滤镜原生不支持动态参数修改:如果你编译的FFmpeg版本低于4.4,drawbox还未接入动态参数控制的相关逻辑,无论怎么传命令都会触发38错误。
调试与解决步骤
- 首先修改FFmpeg启动命令,给
drawbox加上eval=frame参数,启用每帧动态求值能力,修改后的滤镜链部分如下:
zmq,drawbox=x=10:y=10:w=50:h=50:c=red:eval=frame
- 改用正确的控制命令格式,不要使用
reinit,直接按照<滤镜实例名> <参数名> <参数值>的格式发送命令,比如修改x坐标为40直接发:
Parsed_drawbox_1 x 40
- 如果修改后仍报错,升级FFmpeg到4.4及以上版本,重新编译带ZMQ支持的二进制包即可。
- 调试时可以给FFmpeg启动命令加上
-v debug参数,输出更详细的命令处理日志,可快速定位是命令格式错误还是滤镜版本不兼容问题。
内容的提问来源于stack exchange,提问作者przemoch
相关产品推荐
相关产品推荐

