0

UPDATE 1 the problem resides in the input read-stream. (check below)

I am using fluent-ffmpeg (version: 2.1.2) to get a .mp3 file out of a video file that I input as a stream .createReadStream(). I output the file as a .pipe to a remoteWriteStream.

ffmpeg -i pipe:0 -vn -f mp3 -acodec mp3 -movflags frag_keyframe+empty_moov pipe:1

This works fine with .mp4, .webm and .mov (codec: prores) files.

But it somehow does not want to work with a .mov out of an iPhone 11. FFmpeg is not giving me any error when running above code. It creates the .mp3 file but the size is just 152 B and it is not playable.

I ffprobed the iPhone .mov files it returns this:

"{ streams: 
   [ { index: 0,
       codec_name: 'hevc',
       codec_long_name: 'H.265 / HEVC (High Efficiency Video Coding)',
       profile: 'Main',
       codec_type: 'video',
       codec_time_base: '1111/33300',
       codec_tag_string: 'hvc1',
       codec_tag: '0x31637668',
       width: 1920,
       height: 1080,
       coded_width: 1920,
       coded_height: 1088,
       has_b_frames: 2,
       sample_aspect_ratio: '0:1',
       display_aspect_ratio: '0:1',
       pix_fmt: 'yuv420p',
       level: 120,
       color_range: 'tv',
       color_space: 'bt709',
       color_transfer: 'bt709',
       color_primaries: 'bt709',
       chroma_location: 'unspecified',
       field_order: 'unknown',
       timecode: 'N/A',
       refs: 1,
       id: 'N/A',
       r_frame_rate: '30000/1001',
       avg_frame_rate: '33300/1111',
       time_base: '1/600',
       start_pts: 'N/A',
       start_time: 'N/A',
       duration_ts: 6666,
       duration: 11.11,
       bit_rate: 7611708,
       max_bit_rate: 'N/A',
       bits_per_raw_sample: 'N/A',
       nb_frames: 333,
       nb_read_frames: 'N/A',
       nb_read_packets: 'N/A',
       tags: [Object],
       disposition: [Object] },
     { index: 1,
       codec_name: 'aac',
       codec_long_name: 'AAC (Advanced Audio Coding)',
       profile: 'unknown',
       codec_type: 'audio',
       codec_time_base: '1/44100',
       codec_tag_string: 'mp4a',
       codec_tag: '0x6134706d',
       sample_fmt: 'fltp',
       sample_rate: 44100,
       channels: 2,
       channel_layout: 'stereo',
       bits_per_sample: 0,
       id: 'N/A',
       r_frame_rate: '0/0',
       avg_frame_rate: '0/0',
       time_base: '1/44100',
       start_pts: 'N/A',
       start_time: 'N/A',
       duration_ts: 489951,
       duration: 11.11,
       bit_rate: 135091,
       max_bit_rate: 192000,
       bits_per_raw_sample: 'N/A',
       nb_frames: 481,
       nb_read_frames: 'N/A',
       nb_read_packets: 'N/A',
       tags: [Object],
       disposition: [Object] },
     { index: 2,
       codec_name: 'unknown',
       codec_long_name: 'unknown',
       profile: 'unknown',
       codec_type: 'data',
       codec_tag_string: 'mebx',
       codec_tag: '0x7862656d',
       id: 'N/A',
       r_frame_rate: '0/0',
       avg_frame_rate: '0/0',
       time_base: '1/600',
       start_pts: 'N/A',
       start_time: 'N/A',
       duration_ts: 6666,
       duration: 11.11,
       bit_rate: 2670,
       max_bit_rate: 'N/A',
       bits_per_raw_sample: 'N/A',
       nb_frames: 38,
       nb_read_frames: 'N/A',
       nb_read_packets: 'N/A',
       tags: [Object],
       disposition: [Object] },
     { index: 3,
       codec_name: 'unknown',
       codec_long_name: 'unknown',
       profile: 'unknown',
       codec_type: 'data',
       codec_tag_string: 'mebx',
       codec_tag: '0x7862656d',
       id: 'N/A',
       r_frame_rate: '0/0',
       avg_frame_rate: '0/0',
       time_base: '1/600',
       start_pts: 'N/A',
       start_time: 'N/A',
       duration_ts: 6666,
       duration: 11.11,
       bit_rate: 7,
       max_bit_rate: 'N/A',
       bits_per_raw_sample: 'N/A',
       nb_frames: 1,
       nb_read_frames: 'N/A',
       nb_read_packets: 'N/A',
       tags: [Object],
       disposition: [Object] },
     { index: 4,
       codec_name: 'unknown',
       codec_long_name: 'unknown',
       profile: 'unknown',
       codec_type: 'data',
       codec_tag_string: 'mebx',
       codec_tag: '0x7862656d',
       id: 'N/A',
       r_frame_rate: '0/0',
       avg_frame_rate: '0/0',
       time_base: '1/600',
       start_pts: 'N/A',
       start_time: 'N/A',
       duration_ts: 6666,
       duration: 11.11,
       bit_rate: 18117,
       max_bit_rate: 'N/A',
       bits_per_raw_sample: 'N/A',
       nb_frames: 333,
       nb_read_frames: 'N/A',
       nb_read_packets: 'N/A',
       tags: [Object],
       disposition: [Object] } ],
  format: 
   { filename: 'pipe:0',
     nb_streams: 5,
     nb_programs: 0,
     format_name: 'mov,mp4,m4a,3gp,3g2,mj2',
     format_long_name: 'QuickTime / MOV',
     start_time: 'N/A',
     duration: 11.11,
     size: 'N/A',
     bit_rate: 'N/A',
     probe_score: 100,
     tags: 
      { major_brand: 'qt  ',
        minor_version: '0',
        compatible_brands: 'qt  ',
        creation_time: '2020-01-11T12:33:36.000000Z',
        'com.apple.quicktime.make': 'Apple',
        'com.apple.quicktime.model': 'iPhone 11',
        'com.apple.quicktime.software': '13.3',
        'com.apple.quicktime.creationdate': '2020-01-11T13:33:36+0100' } },
  chapters: [] }" 

The created .mp3 file results in a undefined.

I already tried to take the .mov re-encode it to an .mp4 via ffmpeg and then try the above code to get the .mp3 - still does not work.

Any advice how I can make this work?

thanks!


UPDATE 1 The problem resides in the input stream! When I download the file to the local machine and input it as as a local file, not as a read stream, it works perfectly.

I am creating the stream from a google cloud bucket like this:

const myBucket = storage.bucket('myBucket');
const remoteReadStream = myBucket.file(file).createReadStream();

Since this code is perfectly working with all other codecs, what maybe the issue while creating the read stream from the google cloud from a h265 file?

0 Answers0