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

含{}的文件名触发FFmpeg退出码4294967294问题求助

解决FFmpeg处理含{}字符文件名时的“文件不存在”错误

问题根源

FFmpeg命令行解析逻辑中,{}属于滤镜语法的特殊占位符,直接通过系统shell执行命令时,即使给路径加引号,不同操作系统的shell(Windows cmd/PowerShell、Linux bash等)对特殊字符的解析规则差异,会导致路径被错误解析,最终触发“文件不存在”的错误。此外,手动过度转义操作反而可能破坏原始路径的合法性。

解决方案

1. 用child_process.spawn替代exec

Node.js的exec方法会通过系统shell解析整个命令字符串,极易引发特殊字符解析问题;而spawn方法直接传递参数数组,每个参数独立解析,能彻底避免shell转义带来的干扰。

示例代码:

const { spawn } = require('child_process');
const fs = require('fs');

const inputPath = 'Test Video 3 {Test Cut} [2020].mp4';
const outputPath = 'Test Video 3 {Test Cut} [2020]_output.mp4';

// 先验证文件实际存在
if (!fs.existsSync(inputPath)) {
  console.error(`错误:文件 ${inputPath} 不存在`);
  process.exit(1);
}

// 以参数数组形式调用FFmpeg
const ffmpegProcess = spawn('ffmpeg', [
  '-i', inputPath,
  '-metadata', 'title=Test Video 3',
  '-metadata', 'subtitle=Test Cut',
  '-metadata', 'year=2020',
  '-c', 'copy',
  outputPath
]);

// 捕获日志用于排查问题
ffmpegProcess.stdout.on('data', (data) => {
  console.log(`FFmpeg标准输出: ${data}`);
});

ffmpegProcess.stderr.on('data', (data) => {
  console.error(`FFmpeg错误输出: ${data}`);
});

ffmpegProcess.on('close', (code) => {
  console.log(`FFmpeg退出码: ${code}`);
});

2. 移除多余的路径转义操作

你的sanitizeFilePath函数中对{}或非字母数字字符的转义操作完全没必要,spawn会自动处理参数中的特殊字符,直接使用原始文件名作为参数即可。

3. 排查基础环境问题

如果上述方法仍无效,确认:

  • FFmpeg已正确安装并加入系统PATH,或在代码中指定FFmpeg的完整路径(如C:/ffmpeg/bin/ffmpeg.exe或/usr/bin/ffmpeg)
  • 当前Node.js进程拥有读取输入文件、写入输出文件的权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:08:17