文件名过长:nodeJs ffmpeg-fluent

3

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

不幸的是,我的循环在将要合并的文件中失败了,错误信息如下:

/nodes_modules/fluent-ffmpeg中出现ENAMETOOLONG错误。

我的问题是:

我该如何绕过这个错误以便写入具有无限字符数的命令?


这个错误来自于你的操作系统,而不是node的任何地方。你对此无能为力 - 文件名比你的操作系统或文件系统能够处理的长度还要长。 - Matt Rollins
好的,所以...这个错误发生在Windows上。哪个操作系统处理它? - Boris S.
1个回答

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接