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?