You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ffmpeg geq滤镜无法识别位运算符,如何实现像素低6位掩码操作

报错根因

你遇到的报错是两个原因共同导致的:

  • FFmpeg的表达式语法不支持直接使用&作为按位与运算符,需要调用内置的and()函数完成位与操作
  • 即使语法支持直接写&,shell环境下未转义的&会被识别为后台执行标记,导致命令参数被截断,无法被FFmpeg正确识别

解决方法(两种可选)

方法1:使用移位运算实现(更简洁,无符号冲突)

P010格式低6位置0的操作等价于将像素值先右移6位丢弃低6位,再左移6位补0,运算结果和&0xffc0完全一致,FFmpeg表达式原生支持>>和<<移位运算符,不会出现符号冲突。
完整命令示例:

ffmpeg -i 输入文件 -pix_fmt p010le \
-vf "geq=lum_expr='lum(X,Y)>>6<<6':cb_expr='cb(X,Y)>>6<<6':cr_expr='cr(X,Y)>>6<<6'" \
输出文件

注意输出指定-pix_fmt p010le避免FFmpeg自动转成8位格式丢失精度。

方法2:使用内置and()函数实现位与操作

如果需要明确使用位与逻辑,可以调用FFmpeg表达式内置的and(数值1, 数值2)函数完成按位与运算:
完整命令示例:

ffmpeg -i 输入文件 -pix_fmt p010le \
-vf "geq=lum_expr='and(lum(X,Y), 0xffc0)':cb_expr='and(cb(X,Y), 0xffc0)':cr_expr='and(cr(X,Y), 0xffc0)'" \
输出文件

内容的提问来源于stack exchange,提问作者tedx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:45:03