iT邦幫忙

1

如何在nodejs使用spawn 加上ffmpeg?

const spawn = require('child_process').spawn;
const ffmpeg = spawn('ffmpeg',
		['-i', 'upload_audio/'+ senderID +'.aac', '-ar', '16000', 'upload_audio/'+ senderID +'.wav', '-y']);

正在拿別人公開的程式碼練習,但是發現一直卡在這個地方,每當運行時都會出現:

Error: spawn ffmpeg ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19)
at onErrorNT (internal/child_process.js:415:16)
at process._tickCallback (internal/process/next_tick.js:63:19)

已經npm install ffmpeg,也一樣。
但是使用wget就沒問題…

const wget = spawn('wget',
		['-O', 'upload_audio/'+ senderID +'.aac', audioUrl]);

然後這支程式是在heroku伺服器上運行的,是因為這樣所以抓不到ffmpeg的指令嗎?
還請知道的大大幫忙提點,感謝><

fillano iT邦超人 1 級 ‧ 2019-07-17 17:24:47 檢舉
你在command line確認一下:
1. ffmpeg可以跑
2. 他的絕對路徑

然後spawn的時候使用絕對路徑。你用`npm -i ffmpeg`安裝的不是ffmpeg,而是支援的library,讓你可以從node比較簡單地使用ffmpeg。他需要先安裝ffmpeg才會動,然後使用方式也不是這樣。用法可以上npmjs或他的github查一下。
Huiicat iT邦新手 5 級 ‧ 2019-07-17 20:08:07 檢舉
你好!感謝你的回覆。
我的疑惑是,若我在程式碼上改成絕對路徑,上傳到heroku上的時候應該就感應不到了(?)
因此我有試過將資料夾當作目錄,把ffmpeg的資料夾放到目錄並呼叫他,好像也呼叫不到。
我會再研究看看,謝謝!

1 個回答

1
dragonH
iT邦大師 1 級 ‧ 2019-07-17 17:18:04
最佳解答

你用 npm 裝 ffmpeg module

可是卻用 spawn 去調用 ffmpeg

我很好奇這樣可以嗎? /images/emoticon/emoticon70.gif

這樣的操作我覺得就連在 windows 也會出現一樣的錯誤

用 npm 裝 ffmpeg module 的話

建議跟著他們的操作說明做

node-ffmpeg


我發現我講的好像有點不夠清楚/images/emoticon/emoticon06.gif

補充一下

應該是說你用 spawn 去調用 ffmpeg

那裝那個 node-ffmpeg 就沒意義啦

當然

前提是你有裝 ffmpeg 的情況下

看更多先前的回應...收起先前的回應...
Huiicat iT邦新手 5 級 ‧ 2019-07-17 17:22:08 檢舉

我也不確定…
寫技術文章的人似乎是在linux上使用apt-get安裝
wget下載音檔後用ffmpeg轉檔
但我是在windows並且還上傳到heroku上
也許我該捨棄上面的寫法直接用ffmpeg?

謝謝!我會試著用用看!

dragonH iT邦大師 1 級 ‧ 2019-07-17 17:28:31 檢舉

一定會需要用 apt-get

node-ffmpeg 最上面有說

To use this library requires that ffmpeg is already installed
fillano iT邦超人 1 級 ‧ 2019-07-17 17:29:15 檢舉

ffmpeg是ffmpeg,node-ffmpeg是node-ffmpeg,這兩個不一樣。你用npm i ffmpeg裝的是node-ffmpeg,並不是ffmpeg。

ENOENT是找不到檔案,應該是很好的提示了。

Huiicat iT邦新手 5 級 ‧ 2019-07-17 20:18:37 檢舉

那麼假設要安裝ffmpeg本體,並在heroku中使用,直接把ffmpeg的資料夾放到目錄就可以了嗎?
https://ithelp.ithome.com.tw/upload/images/20190717/20110934ZPVbreHLes.jpg

dragonH iT邦大師 1 級 ‧ 2019-07-17 20:54:36 檢舉

反正基本上你要用 spawn 去調用 ffmpeg

就必須確保 ffmpeg 能在 cli 中使用

至於用路徑 或者 設環境 就看你了

Huiicat iT邦新手 5 級 ‧ 2019-07-17 22:04:12 檢舉

感謝各位大大,最後我爬到heroku有提供這項服務,同時運行ffmpeg和主程式,就可以使用ffmpeg了!
https://ithelp.ithome.com.tw/upload/images/20190717/20110934iKzQmnPHMY.jpg
將這個檔案新建在目錄底下,並且執行heroku run "ffmpeg"沒問題就可以了。
其他細節:https://github.com/jayzes/heroku-buildpack-ffmpeg

我要發表回答

立即登入回答