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

Laravel中使用pbmedia/laravel-ffmpeg添加文字水印失败排查

问题描述

使用pbmedia/laravel-ffmpeg给视频添加文字水印时触发错误,核心报错信息:

[AVFilterGraph @ 0000020e99b5f0c0] No option name near '/Freelancer/version58trials/version58trials/public/webfonts/arial.TTF:text=Stack Overflow:fontcolor=white:fontsize=24'

相关代码如下:

$format = new X264();
$format->setAudioCodec('aac');
$format->setVideoCodec('libx264');
$format->setKiloBitrate(0);

$localPath = '/' . $this->video->id . '.mp4';

$ffmpeg = FFMpeg::fromDisk("public")
          ->open($localPath)
          ->addFilter(function ($filters) {
            $filters->custom("drawtext=fontfile=S:/Freelancer/version58trials/version58trials/public/webfonts/arial.TTF:text='Stack Overflow':fontcolor=white:fontsize=24");
          })
          ->export()
          ->toDisk('public')
          ->inFormat($format)
          ->save("watermark_video_added.mp4");

已确认视频路径和字体路径均正确,问题出在FFmpeg添加水印的逻辑上。

问题原因

FFmpeg的drawtext滤镜使用冒号:作为参数分隔符,你使用的Windows字体路径里包含盘符后的冒号S:,FFmpeg会误把S:后面的内容当成新的参数键名,导致解析失败。

解决方法

将fontfile的路径用单引号或双引号包裹,让FFmpeg把整个路径识别为一个完整的参数值:

修正后的代码

$format = new X264();
$format->setAudioCodec('aac');
$format->setVideoCodec('libx264');
$format->setKiloBitrate(0);

$localPath = '/' . $this->video->id . '.mp4';

$ffmpeg = FFMpeg::fromDisk("public")
          ->open($localPath)
          ->addFilter(function ($filters) {
            // 用单引号包裹字体路径,避免FFmpeg误解析冒号
            $filters->custom("drawtext=fontfile='S:/Freelancer/version58trials/version58trials/public/webfonts/arial.TTF':text='Stack Overflow':fontcolor=white:fontsize=24");
          })
          ->export()
          ->toDisk('public')
          ->inFormat($format)
          ->save("watermark_video_added.mp4");

额外注意事项

  • 如果路径中包含空格,同样需要用引号包裹,防止FFmpeg拆分参数
  • 也可以尝试使用相对路径(相对于项目根目录),比如public/webfonts/arial.TTF,减少特殊字符带来的解析问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 01:40:03