【发布时间】:2017-06-20 02:55:52
【问题描述】:
我正在尝试从节点运行 ffmpeg,但出现错误。这是代码
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);
});
当我运行这个节点脚本时,我得到以下错误:
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
直接在终端中,它完美无缺。我认为这与节点如何运行命令有关,但我所有的谷歌搜索都返回了零有用的结果。任何帮助是极大的赞赏。
【问题讨论】:
-
尝试使用
spawn而不是exec,因为exec的输出缓冲区有限。或者运行ffmpeg -loglevel error -i ...来隐藏信息消息。 -
我添加了
-loglevel error,它仍然给出同样的错误 -
但是每次运行它时都没有看到所有这些信息,这很好。
-
下一步尝试: 1. 确保节点应用程序有读写文件的权限,例如您可以将其放入 100% 受保护的文件夹并比较结果; 2.尝试将
{cwd: __dirname}作为第二个参数传递给exec; 3.尝试spawn得到相同的结果或发现问题的地方。 -
我认为这与节点的异步性质有关,节点不等待 ffmpeg 做它的事情。所以我要试试
child_process.execSync