2

我目前正在使用 ffmpeg-fluent 来合并视频文件。( https://github.com/fluent-ffmpeg/node-fluent-ffmpeg )

不幸的是,我将文件合并的循环在第千个文件处失败,但有以下异常:

/nodes_modules/fluent-ffmpeg 中的错误 ENAMETOOLONG。

我的问题是:

如何绕过此错误以编写具有无限字符数的命令?

4

1 回答 1

0

这是一个老问题,不幸的是没有代码可以确定问题。但是在 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 错误的人会有所帮助:-)

于 2020-06-30T16:59:25.177 回答