2017-02-02 9 views
0

ノードからffmpegを実行しようとしていますが、エラーが発生しています。nodejsエラーでffmpegを実行中

err: 
Error: Command failed: /home/ubuntu/bin/ffmpeg -i /home/ubuntu/input.flv -s 640x480 -y -codec:a aac -b:a 44.1k -r 15 -b:v 1000k -codec:v h264 -f mp4 /home/ubuntu/output.mp4 
ffmpeg version N-83323-g126e965 Copyright (c) 2000-2017 the FFmpeg developers 
    built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3) 
    configuration: --prefix=/home/ubuntu/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/ubuntu/ffmpeg_build/include --extra-ldflags=-L/home/ubuntu/ffmpeg_build/lib --bindir=/home/ubuntu/bin --enable-gpl --enable-libopus --enable-libvpx --enable-libvorbis --enable-libmp3lame --enable-libfdk-aac --enable-libx264 --enable-nonfree 
    libavutil  55. 45.100/55. 45.100 
    libavcodec  57. 75.100/57. 75.100 
    libavformat 57. 66.101/57. 66.101 
    libavdevice 57. 2.100/57. 2.100 
    libavfilter  6. 72.100/6. 72.100 
    libswscale  4. 3.101/4. 3.101 
    libswresample 2. 4.100/2. 4.100 
    libpostproc 54. 2.100/54. 2.100 
/home/ubuntu/input.flv: Invalid data found when processing input 

stderr: 
ffmpeg version N-83323-g126e965 Copyright (c) 2000-2017 the FFmpeg developers 
    built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3) 
    configuration: --prefix=/home/ubuntu/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/home/ubuntu/ffmpeg_build/include --extra-ldflags=-L/home/ubuntu/ffmpeg_build/lib --bindir=/home/ubuntu/bin --enable-gpl --enable-libopus --enable-libvpx --enable-libvorbis --enable-libmp3lame --enable-libfdk-aac --enable-libx264 --enable-nonfree 
    libavutil  55. 45.100/55. 45.100 
    libavcodec  57. 75.100/57. 75.100 
    libavformat 57. 66.101/57. 66.101 
    libavdevice 57. 2.100/57. 2.100 
    libavfilter  6. 72.100/6. 72.100 
    libswscale  4. 3.101/4. 3.101 
    libswresample 2. 4.100/2. 4.100 
    libpostproc 54. 2.100/54. 2.100 
/home/ubuntu/input.flv: Invalid data found when processing input 

stdout: 

しかし、私はストレートの端末に

/home/ubuntu/bin/ffmpeg -i /home/ubuntu/input.flv -s 640x480 -y -codec:a aac -b:a 44.1k -r 15 -b:v 1000k -codec:v h264 -f mp4 /home/ubuntu/output.mp4 

を実行すると、それは完璧に動作します。ここでは、コード

var exec = require('child_process').exec; 

var cmd = '/home/ubuntu/bin/ffmpeg -i /home/ubuntu/input.flv -s 640x480 -y -codec:a aac -b:a 44.1k -r 15 -b:v 1000k -codec:v h264 -f mp4 /home/ubuntu/output.mp4'; 

exec(cmd, function(err, stdout, stderr) { 
    if (err) console.log('err:\n' + err); 
    if (stderr) console.log('stderr:\n' + stderr); 
    console.log('stdout:\n' + stdout); 
}); 

私は、このノードのスクリプトを実行すると、私は次のエラーを取得するには、あります。私はそれがノードがコマンドを実行する方法と関係があると思うが、私のすべてのGoogle検索はゼロ有用な結果を返している。どんな助けでも大歓迎です。

+0

てみ使用が' '代わりにexec'をspawn'。あるいは 'ffmpeg -loglevel error -i ...'を実行して情報メッセージを抑制します。 –

+0

'-loglevel error'を追加しましたが、それでも同じエラーが発生します – Greyhammer

+0

しかし、実行するたびにすべての情報が表示されないのはうれしいです。 – Greyhammer

答えて

1

これは、ノードの非同期性とは関係ありません。ノードプロセスは常に、生成された子プロセス(spawnとexecの両方で作成される)を待ちます。

私はあなたが原因多くの理由にffmpegのとspawnを使用することをお勧め:

  • spawnは、execが行う方法とは異なる方法で引数を処理します。プロセス自体を開始し、引数配列をプロセスに渡します。しかし、execはコマンド全体を文字列として受け取り、それをシェルプロセスに渡します。これにより、いくつかのエスケープエラーが発生する可能性があります。

  • ffmpegは、ほとんどの場合、「長期実行」プロセスです。それがまだ実行されている間、その出力を解析する方が良いです。プロセスが終了するまで、execは出力を出しません。

  • ffmpegは大量の出力データを生成する可能性があります。これは、制限されたバッファでプロセスを開始するときにexecで問題を引き起こす可能性があります。 (Aikonが上述したように)。 spawnはストリームを使用してリアルタイムでチャンクとしてデータを渡します。

あなたのCMD /引数を持つ例:exec`は、出力にバッファが限られているので、 `

var spawn = require('child_process').spawn; 

var cmd = '/home/ubuntu/bin/ffmpeg'; 

var args = [ 
    '-y', 
    '-i', '/home/ubuntu/input.flv', 
    '-s', '640x480', 
    '-codec:a', 'aac', 
    '-b:a', '44.1k', 
    '-r', '15', 
    '-b:v', '1000k', 
    '-c:v','h264', 
    '-f', 'mp4', '/home/ubuntu/output.mp4' 
]; 

var proc = spawn(cmd, args); 

proc.stdout.on('data', function(data) { 
    console.log(data); 
}); 

proc.stderr.on('data', function(data) { 
    console.log(data); 
}); 

proc.on('close', function() { 
    console.log('finished'); 
}); 
+0

あなたの' var cmd = '"/ home/ubuntu/bin/ffmpeg"'; 'の二重引用符はエラーを引き起こしました。私はそれらを削除し、それは素晴らしい仕事をした。ありがとう – Greyhammer

関連する問題