我正在尝试使用node的fluent-ffmpeg模块将mp4视频转换为mp3。这是我的代码:
ffmpeg = require 'fluent-ffmpeg'
mp4 = '/Users/jashua/Desktop/video.mp4'
mp3 = '/Users/jashua/Desktop/audio.mp3'
proc = new ffmpeg({source:mp4})
.toFormat('mp3')
.setFfMpegPath('/Applications/ffmpeg')
.saveToFile(mp3, (stdout, stderr)->
return console.log stderr if err?
return console.log 'done'
)
运行它时,我收到以下错误:
TypeError: Cannot call method 'saveToFile' of undefined
at Object.<anonymous> (/Users/jashua/Desktop/ytdl.coffee:10:12, <js>:18:60)
at Object.<anonymous> (/Users/jashua/Desktop/ytdl.coffee:1:1, <js>:25:4)
at Module._compile (module.js:456:26)
有什么想法吗?
解决方案:
proc = new ffmpeg({source:mp4})
proc.setFfMpegPath('/Applications/ffmpeg')
proc.saveToFile(mp3, (stdout, stderr)->
return console.log stderr if err?
return console.log 'done'
)
enter code here
答案 0 :(得分:3)
对于遇到此问题且遇到同样问题的其他人,我.setFfmpegPath()
需要包含二进制文件的完整路径,而不仅仅是二进制文件所在的目录。
答案 1 :(得分:2)
如果找不到程序,则spawn系统调用以错误ENOENT结束。在这种情况下,找不到ffmpeg
,因此您必须告诉它它在哪里:
proc = new ffmpeg({source:mp4})
.setFfmpegPath("wherever ffmpeg is installed ") <-- this is the new line
.toFormat('mp3')
.saveToFile(mp3, (stdout, stderr)->
return console.log stderr if err?
return console.log 'done'
)
有更多信息in a related issue