如何用FFmpeg在水印区域像素的R、G、B通道各减25?
用FFmpeg给视频水印区域像素RGB通道各减25的实现方法
核心思路
通过FFmpeg的regionfilter滤镜精准定位水印区域,再搭配lutrgb滤镜对区域内像素的R、G、B通道分别减去25,不影响视频其他区域的画面。
命令示例
ffmpeg -i input.mp4 -filter_complex "[0:v]regionfilter=x=100:y=200:w=300:h=50:filter='lutrgb=r=r-25:g=g-25:b=b-25'[outv]" -map "[outv]" -map 0:a -c:a copy output.mp4
参数说明
x=100:y=200:w=300:h=50:替换为你的水印区域实际坐标与尺寸:x:水印区域左上角的X轴像素坐标y:水印区域左上角的Y轴像素坐标w:水印区域的宽度(像素)h:水印区域的高度(像素)
lutrgb=r=r-25:g=g-25:b=b-25:对指定区域内的每个像素,R、G、B通道值各减去25,FFmpeg会自动将负数结果限制为0,避免像素值溢出异常。-c:a copy:直接复制原视频的音频流,无需重新编码,大幅节省处理时间。
如何确定水印区域坐标与尺寸
- 用FFmpeg查看像素坐标:
执行以下命令,播放视频时移动鼠标到水印区域,终端会输出当前鼠标位置的像素坐标:ffmpeg -i input.mp4 -vf showinfo -f null - - 计算区域尺寸:获取水印区域左上角和右下角的坐标后,宽度=右下角X值-左上角X值,高度=右下角Y值-左上角Y值。
额外提示
- 若水印是非规则形状,需先制作水印蒙版,再通过
maskedmerge等滤镜结合lutrgb处理,但固定矩形水印用上述方法即可满足需求。 - 测试时可添加
-t 10参数只处理前10秒视频,确认效果后再处理完整文件:ffmpeg -i input.mp4 -t 10 -filter_complex "[0:v]regionfilter=x=100:y=200:w=300:h=50:filter='lutrgb=r=r-25:g=g-25:b=b-25'[outv]" -map "[outv]" -map 0:a -c:a copy test_output.mp4
内容的提问来源于stack exchange,提问作者PirateApp
相关产品推荐
相关产品推荐

