node.jsffmpegfluent-ffmpeg

ffmpeg fails to convert several ts files into one mp3


I'm joining several .ts files into one .mp3 file like this:

import ffmpeg from 'fluent-ffmpeg'

const tsDest = 'dir/file.ts'
const mp3Dest = 'dir/file.mp3'

const ff = ffmpeg(urls[0])
urls.slice(1).map(url => ff.input(url))

ff.on('error', function (err) {
  logger.error('An error occurred: ' + err.message)
  reject(err)
})
.on('end', function () {
  return ffmpeg(tsDest)
    .videoCodec('libx264')
    .audioCodec('libmp3lame')
    .on('error', function (err) {
      logger.error('An error occurred: ', err)
      reject(err)
    })
    .on('end', function () {
      resolve(mp3Dest)
    })
    .save(mp3Dest)
}).mergeToFile(tsDest, dir)

In the first part I receive this error:

An error occurred: ffmpeg exited with code 228: size=     259KiB time=00:00:04.95 bitrate= 428.6kbits/s speed=58.1x    
Conversion failed!

I have no clue why this happens and how to fix it. I can't find a pattern that I can follow to know why this happens and how, it just happens sometimes and some other times it doesn't. I've tried to find a solution but I couldn't find anything or any bug similar to mine.

I've put this question in the library (https://github.com/damianociarla/node-ffmpeg/issues/101) too let's see if I can get some useful info from somewhere.

Thanks in advance!


Solution

  • I added more logs to see what's going on:

    ff.on('error', function (err) {
      logger.error('An error occurred: ' + err.message)
      logger.error('stdout: ', stdout)
      logger.error('stderr: ', stderr)
      reject(err)
    })
    

    And got more details on the error:

    stderr:  'ffmpeg version N-71064-gd5e603ddc0-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2024 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      59. 27.100 / 59. 27.100\n' +
      '  libavcodec     61.  9.100 / 61.  9.100\n' +
      '  libavformat    61.  4.100 / 61.  4.100\n' +
      '  libavdevice    61.  2.100 / 61.  2.100\n' +
      '  libavfilter    10.  2.102 / 10.  2.102\n' +
      '  libswscale      8.  2.100 /  8.  2.100\n' +
      '  libswresample   5.  2.100 /  5.  2.100\n' +
      '  libpostproc    58.  2.100 / 58.  2.100\n' +
      "Input #0, mpegts, from '/tmp/90337846ced53a148c0392a4ca6fa1d8.ts':\n" +
      '  Duration: 00:01:55.18, start: 1.400000, bitrate: 431 kb/s\n' +
      '  Program 1 \n' +
      '    Metadata:\n' +
      '      service_name    : Service01\n' +
      '      service_provider: FFmpeg\n' +
      '  Stream #0:0[0x100]: Audio: mp2 (mp3float) ([3][0][0][0] / 0x0003), 48000 Hz, stereo, fltp, 384 kb/s\n' +
      'Stream mapping:\n' +
      '  Stream #0:0 -> #0:0 (mp2 (native) -> mp3 (libmp3lame))\n' +
      'Press [q] to stop, [?] for help\n' +
      "Output #0, mp3, to '/tmp/90337846ced53a148c0392a4ca6fa1d8.mp3':\n" +
      '  Metadata:\n' +
      '    TSSE            : Lavf61.4.100\n' +
      '  Stream #0:0: Audio: mp3, 48000 Hz, stereo, s16p\n' +
      '      Metadata:\n' +
      '        encoder         : Lavc61.9.100 libmp3lame\n' +
      'size=     256KiB time=00:00:32.20 bitrate=  65.1kbits/s speed=64.4x    \n' +
      '[aost#0:0/libmp3lame @ 0x34009800] Error submitting a packet to the muxer: No space left on device\n' +
      '    Last message repeated 1 times\n' +
      '[out#0/mp3 @ 0x340115c0] Error muxing a packet\n' +
      '[out#0/mp3 @ 0x340115c0] Task finished with error code: -28 (No space left on device)\n' +
      '[out#0/mp3 @ 0x340115c0] Terminating thread with return code -28 (No space left on device)\n' +
      '[out#0/mp3 @ 0x340115c0] Error writing trailer: No space left on device\n' +
      '[out#0/mp3 @ 0x340115c0] Error closing file: No space left on device\n' +
      '[out#0/mp3 @ 0x340115c0] video:0KiB audio:512KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown\n' +
      'size=     256KiB time=00:00:32.76 bitrate=  64.0kbits/s speed=  63x    \n' +
      'Conversion failed!\n'
    
    

    For what I could understand it was complaining because the file was too big and there was no space on the device. I just reduce the amount of files being combined from 20 to 15 and the error disappeared