0

我正在尝试在 firebase 函数中使用 fluent-ffmpeg 来截取上传的视频,但不断收到此错误:

错误:

Error: ffprobe exited with code 1
ffprobe version N-83692-gb8a7dcbde2-static http://johnvansickle.com/ffmpeg/  Copyright (c) 2007-2017 the FFmpeg developers
  built with gcc 5.4.1 (Debian 5.4.1-5) 20170205
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-5 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg
  libavutil      55. 47.100 / 55. 47.100
  libavcodec     57. 81.100 / 57. 81.100
  libavformat    57. 66.102 / 57. 66.102
  libavdevice    57.  3.100 / 57.  3.100
  libavfilter     6. 74.100 /  6. 74.100
  libswscale      4.  3.101 /  4.  3.101
  libswresample   2.  4.100 /  2.  4.100
  libpostproc    54.  2.100 / 54.  2.100
test/testvideo.mp4: No such file or directory

    at ChildProcess.<anonymous> (/user_code/node_modules/fluent-ffmpeg/lib/ffprobe.js:233:22)
    at emitTwo (events.js:106:13)
    at ChildProcess.emit (events.js:191:7)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)

这是我的代码

exports.blurOffensiveImages = functions.storage.object().onChange(event => {
  const object = event.data;
  const file = gcs.bucket(object.bucket).file(object.name);

  // Exit if this is a move or deletion event.
  if (object.resourceState === 'not_exists') {
    return console.log('This is a deletion event.');
  }

  var proc = new ffmpeg({ source:  object.name })
  .withSize('150x100')
  .takeScreenshots({
      count: 2,
      timemarks: [ '50%', '75%' ],
      filename: '%b_screenshot_%w_%i'
    }, 'test_screenshot/', function(err, filenames) {
      console.log(filenames);
      console.log('screenshots were saved');
  });

});

谁能帮助我做错了什么?

4

2 回答 2

1

在堆栈跟踪中特别提到了问题

test/testvideo.mp4: 没有这样的文件或目录

您要做的是将文件的firebase存储路径直接传递给ffmpeg,而ffmpeg在firebase系统上运行。

因此,为了将有效路径传递给 ffmpeg,您首先需要从 firebase 存储下载文件并将其存储在 firbase 的临时目录中(因为 firebase 仅支持 tmp 目录),然后传递文件的路径,您已从存储下载到 tmp 文件夹(本地路径),到 ffmpeg。

由于现在我们已经将文件的本地路径传递给 ffmpeg,它现在可以在本地使用,它将能够找到目录并为您完成所有工作。

您还可以查看此链接以获取参考 - https://github.com/firebase/functions-samples/blob/master/generate-thumbnail/functions/index.js

谢谢

于 2017-08-23T07:56:39.893 回答
0

ffmpeg无法访问特定文件夹时会发生这种情况。

当我克隆 github repo 时,我发生了这个权限错误。在linux服务器上。

一段时间后,我删除了该存储库并使用 FileZilla 连接到实例并传输了所有文件和文件夹。

它对我有用。

于 2021-01-30T16:57:56.143 回答