我目前正在使用 ffmpeg-fluent 来合并视频文件。( https://github.com/fluent-ffmpeg/node-fluent-ffmpeg )
不幸的是,我将文件合并的循环在第千个文件处失败,但有以下异常:
/nodes_modules/fluent-ffmpeg 中的错误 ENAMETOOLONG。
我的问题是:
如何绕过此错误以编写具有无限字符数的命令?
我目前正在使用 ffmpeg-fluent 来合并视频文件。( https://github.com/fluent-ffmpeg/node-fluent-ffmpeg )
不幸的是,我将文件合并的循环在第千个文件处失败,但有以下异常:
/nodes_modules/fluent-ffmpeg 中的错误 ENAMETOOLONG。
我的问题是:
如何绕过此错误以编写具有无限字符数的命令?
这是一个老问题,不幸的是没有代码可以确定问题。但是在 Windows 上从ffmpeg获取ENAMETOOLONG通常意味着命令真的太长了。合并数千个文件使这看起来很自然。
它现在仍然在 2020 年发生。但是可以解决这个问题。我们需要将源文件名(用于合并)放入一个文本文件中,并将该文本文件作为 ffmpeg 的输入提供。
原始 ffmpeg 调用如下所示:
ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.wav
mylist.txt就像:
file '/path/to/file1.wav'
file '/path/to/file2.wav'
file '/path/to/file3.wav'
使用fluent-ffmpeg并不直观,但仍然可行:
const cmd = ffmpeg();
cmd.input('mylist.txt')
.inputOption(['-f concat', '-safe 0'])
.output('out.wav')
.run();
注意:注意 Windows 上列表文件和源文件的绝对路径。大多数 ffmpeg 版本会将列表的目录添加到源文件中,从而导致类似的损坏路径:
c:/ffmpeg/lists/c:/audiofiles/file1.wav
但是如果你使用 url 格式的源文件,你仍然可以解决这个问题:
file 'file:c:/audiofiles/file1.wav'
file 'file:c:/audiofiles/file2.wav'
file 'file:c:/audiofiles/file3.wav'
我相信这对搜索此 ffmpeg 错误的人会有所帮助:-)