const ffmpeg = require('fluent-ffmpeg');
// 输入视频文件路径
const inputVideoPath = './small.mp4';
// 水印图片文件路径
const watermarkImagePath = './small.png';
// 输出视频文件路径
const outputVideoPath = './small_img_watermark.mp4';
// 配置水印位置,假设我们想要将水印放在视频的右下角,各边距离10像素
// W和H代表视频宽度和高度,w和h代表水印宽度和高度
const watermarkPosition = 'W-w-10:H-h-10';
// 使用fluent-ffmpeg构建命令
ffmpeg()
.addInput(inputVideoPath) // 添加输入视频
.input(watermarkImagePath) // 添加水印图片作为输入(注意:不是addInput,因为这里是滤镜叠加的输入)
.complexFilter([
// 使用overlay滤镜叠加水印
// 'overlay=x:y' 中的x和y是水印的位置坐标
// 这里使用表达式来动态计算位置,确保水印在右下角
`overlay=${watermarkPosition}`
])
.outputOptions('-c:v', 'libx264') // 设置输出视频编码器,这里使用H.264
.output(outputVideoPath) // 设置输出文件路径
.on('end', () => {
console.log('视频水印添加完成');
})
.on('error', (err) => {
console.error('添加水印时出错:', err);
})
.run(); // 执行命令
const watermarkPosition = 'W-w-10:H-h-10'; W 代表视频宽度 w代表水印宽度 W-w-10 代表视频宽度减水印宽度减10 所以就是在右边间距10.