Ошибка Fluent-FFmpeg: ffprobe завершился с кодом 1

Я использую лямбда-функцию для разделения заданного файла на части и часто получаю сообщение об ошибке во время обработки файла:

{
    "errorType": "Error",
    "errorMessage": "ffprobe exited with code 1\nffprobe version 4.2.2-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2007-2019 the FFmpeg developers\n  built with gcc 8 (Debian 8.3.0-6)\n  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg\n  libavutil      56. 31.100 / 56. 31.100\n  libavcodec     58. 54.100 / 58. 54.100\n  libavformat    58. 29.100 / 58. 29.100\n  libavdevice    58.  8.100 / 58.  8.100\n  libavfilter     7. 57.100 /  7. 57.100\n  libswscale      5.  5.100 /  5.  5.100\n  libswresample   3.  5.100 /  3.  5.100\n  libpostproc    55.  5.100 / 55.  5.100\n[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6f35c40] Format mov,mp4,m4a,3gp,3g2,mj2 detected only with low score of 1, misdetection possible!\n[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6f35c40] moov atom not found\n/tmp/file.mp4: Invalid data found when processing input\n",
    "stack": [
        "Error: ffprobe exited with code 1",
        "ffprobe version 4.2.2-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2007-2019 the FFmpeg developers",
        "  built with gcc 8 (Debian 8.3.0-6)",
        "  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-libgme --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg",
        "  libavutil      56. 31.100 / 56. 31.100",
        "  libavcodec     58. 54.100 / 58. 54.100",
        "  libavformat    58. 29.100 / 58. 29.100",
        "  libavdevice    58.  8.100 / 58.  8.100",
        "  libavfilter     7. 57.100 /  7. 57.100",
        "  libswscale      5.  5.100 /  5.  5.100",
        "  libswresample   3.  5.100 /  3.  5.100",
        "  libpostproc    55.  5.100 / 55.  5.100",
        "[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6f35c40] Format mov,mp4,m4a,3gp,3g2,mj2 detected only with low score of 1, misdetection possible!",
        "[mov,mp4,m4a,3gp,3g2,mj2 @ 0x6f35c40] moov atom not found",
        "/tmp/file.mp4: Invalid data found when processing input",
        "",
        "    at ChildProcess.<anonymous> (/var/task/node_modules/fluent-ffmpeg/lib/ffprobe.js:233:22)",
        "    at ChildProcess.emit (events.js:198:13)",
        "    at ChildProcess.EventEmitter.emit (domain.js:448:20)",
        "    at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)"
    ]
}

Я вижу сообщение об ошибке и то, что оно мне говорит, но я не могу понять, что этот самый файл иногда работает. Перед началом процесса я загружаю файл из S3 в свой контейнер Lambda, возможно, это моя проблема, но все же иногда это срабатывает.


person Thiago Cardoso    schedule 17.06.2020    source источник


Ответы (1)


После долгого расследования выяснилось, что моя проблема действительно заключалась в том, как мои исходные файлы загружались с S3, поэтому после исправления ошибок больше не возникало!

Для дальнейшего использования, вот что изменилось в моем процессе, надеюсь, это поможет кому-то в будущем.

Вот как он скачивал файл:

    return new Promise((resolve: Function, reject: Function): void => {
      const s3Stream: stream.Readable = this.client.getObject(params).createReadStream()
      const fileStream: stream.Writable = fs.createWriteStream(filePath)
      s3Stream.on('error', () => {
        fileStream.destroy()
        reject()
      })
      fileStream.on('error', () => {
        s3Stream.destroy()
        reject()
      })
      s3Stream.pipe(fileStream)
        .on('close', resolve())
      })
    }

А теперь после изменений:

    return new Promise((resolve: Function, reject: Function): void => {
      const fileStream: stream.Writable = fs.createWriteStream(filePath)
      this.client.getObject(params)
        .on('error', (err: NodeJS.ErrnoException) => {
          fileStream.destroy()
          reject(err)
        })
        .on('httpData', (chunk: unknown) => {
          fileStream.write(chunk);
        })
        .on('httpDone', () => {
          fileStream.end();
          resolve()
        })
        .send();
      })
    }
person Thiago Cardoso    schedule 24.06.2020