我目前正在使用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'
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
file 'file:c:/audiofiles/file1.wav'
file 'file:c:/audiofiles/file2.wav'
file 'file:c:/audiofiles/file3.wav'
我相信这对于寻找ffmpeg错误的人会很有帮助 :-)