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

Node脚本使用fluent-ffmpeg处理含空格MP4元数据失败问题

解决fluent-ffmpeg处理带空格元数据的问题

我之前也踩过完全一样的坑!问题核心在于你对fluent-ffmpeg参数传递逻辑的误解——它和直接在命令行敲ffmpeg命令的规则不一样,手动加引号、转义空格反而会打乱参数解析逻辑,导致报错。

错误原因

当你把'-metadata album="Some title"'或者手动转义的字符串放进outputOptions数组时,fluent-ffmpeg会把整个字符串当作一个独立的命令行参数传给ffmpeg。这时候ffmpeg会把引号当成元数据值的一部分,或者错误拆分参数,自然触发解析错误。

正确的两种写法

方法1:用fluent-ffmpeg内置的metadata()方法(推荐)

这个方法专门用来设置元数据,完全不用处理空格、引号的问题,直接传键值对即可:

const ffmpeg = require('fluent-ffmpeg');

ffmpeg('input.mp4')
  .output('output.mp4')
  // 单个元数据设置
  .metadata('title', 'Some title with spaces')
  .metadata('album', 'My Favorite Album')
  // 或者批量设置多个元数据
  .metadata({
    artist: 'Jane Smith',
    year: '2024'
  })
  .outputOptions('-c copy') // 复制流,避免重新编码
  .on('end', () => console.log('文件处理完成!'))
  .on('error', (err) => console.error('出错了:', err))
  .run();

方法2:正确使用outputOptions数组

如果一定要用outputOptions,记得每个-metadata选项单独作为数组元素,值里的空格直接保留,不需要加任何引号或转义:

ffmpeg('input.mp4')
  .output('output.mp4')
  .outputOptions([
    '-metadata title=Some title with spaces',
    '-metadata album=My Favorite Album',
    '-c copy'
  ])
  .on('end', () => console.log('文件处理完成!'))
  .on('error', (err) => console.error('出错了:', err))
  .run();

额外提醒

确保你的fluent-ffmpeg是最新版本,旧版本可能存在参数传递的兼容性问题,可以用npm update fluent-ffmpeg更新后再试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:50:34