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

FFmpeg添加两行水印仅第一行可见问题求助

解决FFmpeg添加两行水印仅第一行可见的问题

在Node.js中使用FFmpeg为视频添加两行水印时,仅第一行水印可见,第二行无法正常显示。问题出在complexFilter的滤镜链路配置上:

原代码中两个drawtext滤镜均直接基于原始视频流[0:v]操作,但未正确串联处理流程,FFmpeg无法将两行水印叠加输出,导致仅第一行生效。

修复后的代码

ffmpeg()
  .input(tempLocalPath)
  .complexFilter([
    // 第一行水印,输出到临时流[v1]
    `[0:v]drawtext=text='${watermarkTextLine1}':x=(w-tw)/2:y=(h-460):fontsize=24:fontcolor=white@0.5:fontfile=/Windows/Fonts/arial.ttf[v1]`,
    // 基于[v1]添加第二行水印,最终输出该流
    `[v1]drawtext=text='${watermarkTextLine2}':x=(w-tw)/2:y=(h-200):fontsize=32:fontcolor=red:fontfile=/Windows/Fonts/arial.ttf`
  ])
  .output(
    path.join(tempLocalDir, video_cid.replace(".mp4", "-") + "watermarked.mp4"),
  )
  .on("end", function () {
    // Send the watermarked video as a response
    res.download(
      path.join(
        tempLocalDir,
        video_cid.replace(".mp4", "-") + "watermarked.mp4",
      ),
      "video.mp4",
      function (downloadError) {
        if (downloadError) {
          console.error("Error during download:", downloadError);
        }

        // Clean up: Delete the temporary local file
        fs.unlink(tempLocalPath, (unlinkError) => {
          if (unlinkError) {
            console.error(
              "Error deleting the temporary video file:",
              unlinkError,
            );
          }
        });
      },
    );
  })
  .inputFormat("mp4")
  .run();

关键说明

  • 第一个drawtext滤镜处理完原始视频流后,通过[v1]命名输出临时流;
  • 第二个drawtext滤镜基于[v1](已添加第一行水印的视频流)进行处理,实现两行水印的叠加;
  • 若第二行水印仍不显示,可检查y=(h-200)的坐标是否超出视频范围(比如视频高度小于200时,y值为负,水印会被移出可视区域),可调整为固定值或相对比例(如y=h*0.8)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:25:01