1

I am using following command to create a hls aac audio file for web streaming

ffmpeg -y -i song.mp3 -c:a aac -b:a 128k -f hls -hls_time 7 -hls_list_size 0 -hls_segment_filename file%d.m4a playlist.m3u8

This command works only with some audio files. With many mp3 files I receive following output:

C:\ffmpeg>ffmpeg -y -i song.mp3 -c:a aac -b:a 128k -f hls -hls_time 7 -hls_list_size 0 -hls_segment_filename file%d.m4a playlist.m3u8
ffmpeg version git-2020-01-31-62d92a8 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20200122
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 38.100 / 56. 38.100
  libavcodec     58. 67.100 / 58. 67.100
  libavformat    58. 37.100 / 58. 37.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 72.100 /  7. 72.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
[mp3 @ 0000027d800babc0] Estimating duration from bitrate, this may be inaccurate
Input #0, mp3, from 'song.mp3':
  Metadata:
    TSS             : Logic Pro 8.0.2
    iTunNORM        :  000000EE 000000ED 00000C34 00001135 000088F0 0000B505 000080FA 00007577 00009B82 00018F49
    iTunSMPB        :  00000000 00000210 00000A07 00000000008783E9 00000000 007AD4E6 00000000 00000000 00000000 00000000 00000000 00000000
    genre           : Rock
    TCM             : Kevin MacLeod
    album           : Funk and Blues
    TKE             : C
    TBP             : 101
    title           : Funkorama
    artist          : Kevin MacLeod
    date            : 2008-06-16 18:35
  Duration: 00:03:21.46, start: 0.000000, bitrate: 325 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, fltp, 320 kb/s
    Stream #0:1: Video: mjpeg (Baseline), yuvj444p(pc, bt470bg/unknown/unknown), 400x400 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn, 90k tbc (attached pic)
    Metadata:
      comment         : Other
Stream mapping:
  Stream #0:1 -> #0:0 (mjpeg (native) -> h264 (libx264))
  Stream #0:0 -> #0:1 (mp3 (mp3float) -> aac (native))
Press [q] to stop, [?] for help
[hls @ 0000027d80100c40] Frame rate very high for a muxer not efficiently supporting it.
Please consider specifying a lower framerate, a different muxer or -vsync 2
[libx264 @ 0000027d800c1280] using SAR=1/1
[libx264 @ 0000027d800c1280] MB rate (56250000) > level limit (16711680)
[libx264 @ 0000027d800c1280] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0000027d800c1280] profile High 4:4:4 Predictive, level 6.2, 4:4:4, 8-bit
[libx264 @ 0000027d800c1280] 264 - core 159 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, hls, to 'playlist.m3u8':
  Metadata:
    TSS             : Logic Pro 8.0.2
    iTunNORM        :  000000EE 000000ED 00000C34 00001135 000088F0 0000B505 000080FA 00007577 00009B82 00018F49
    iTunSMPB        :  00000000 00000210 00000A07 00000000008783E9 00000000 007AD4E6 00000000 00000000 00000000 00000000 00000000 00000000
    genre           : Rock
    TCM             : Kevin MacLeod
    album           : Funk and Blues
    TKE             : C
    TBP             : 101
    title           : Funkorama
    artist          : Kevin MacLeod
    date            : 2008-06-16 18:35
    encoder         : Lavf58.37.100
    Stream #0:0: Video: h264 (libx264), yuvj444p(pc, progressive), 400x400 [SAR 72:72 DAR 1:1], q=-1--1, 90k fps, 90k tbn, 90k tbc (attached pic)
    Metadata:
      comment         : Other
      encoder         : Lavc58.67.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
    Stream #0:1: Audio: aac (LC), 44100 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc58.67.100 aac
[mp3float @ 0000027d80146580] overread, skip -7 enddists: -6 -6 speed=68.6x
[mp3float @ 0000027d80146580] overread, skip -6 enddists: -5 -5
[mp3float @ 0000027d80146580] overread, skip -6 enddists: -4 -4
    Last message repeated 2 times
[mp3float @ 0000027d80146580] overread, skip -7 enddists: -6 -6
    Last message repeated 2 times
[mp3float @ 0000027d80146580] overread, skip -5 enddists: -2 -2
[mp3float @ 0000027d80146580] overread, skip -7 enddists: -6 -6
[mp3float @ 0000027d80146580] overread, skip -6 enddists: -4 -4
    Last message repeated 1 times
[mp3float @ 0000027d80146580] overread, skip -7 enddists: -6 -6
    Last message repeated 1 times
[mp3float @ 0000027d80146580] overread, skip -6 enddists: -4 -4
[mp3float @ 0000027d80146580] overread, skip -5 enddists: -3 -3
[mp3float @ 0000027d80146580] overread, skip -6 enddists: -4 -4
[mp3float @ 0000027d80146580] overread, skip -7 enddists: -6 -6
    Last message repeated 2 times
[mp3float @ 0000027d80146580] overread, skip -5 enddists: -4 -4
[hls @ 0000027d80100c40] Opening 'file0.m4a' for writingate=N/A speed=64.1x
[hls @ 0000027d80100c40] Opening 'playlist.m3u8.tmp' for writing
frame=    1 fps=0.3 q=33.0 Lsize=N/A time=00:03:21.45 bitrate=N/A speed=63.7x
video:7kB audio:3209kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[libx264 @ 0000027d800c1280] frame I:1     Avg QP:34.64  size:  6567
[libx264 @ 0000027d800c1280] mb I  I16..4: 19.5% 53.0% 27.5%
[libx264 @ 0000027d800c1280] 8x8 transform intra:53.0%
[libx264 @ 0000027d800c1280] coded y,u,v intra: 46.8% 26.1% 15.3%
[libx264 @ 0000027d800c1280] i16 v,h,dc,p: 38% 39%  9% 14%
[libx264 @ 0000027d800c1280] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 21% 14% 26%  8%  5%  6%  5%  7%  7%
[libx264 @ 0000027d800c1280] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 42% 16% 14%  7%  4%  5%  3%  4%  4%
[libx264 @ 0000027d800c1280] kb/s:4728240.00
[aac @ 0000027d800bcc40] Qavg: 2138.508

Notice the "mp3float overread" message.

It results in a single file0.m4a file without splitting it up after every 7 seconds as specified. This is an example audio file I am trying to convert to a aac hls stream that results the mentioned problem: https://incompetech.com/music/royalty-free/index.html?isrc=USUAN1100474

How can I convert an audio file to a web friendly hls stream with ffmpeg?

isADon
  • 3,433
  • 11
  • 35
  • 49
  • Why would you want to? You can stream your MP3 directly... it's "web friendly" and streamable. No need for HLS here at all. – Brad Feb 01 '20 at 21:25
  • If you want to give your users a smooth listening experience you re-encode the audio files and deliver it in chunks. That is pretty much what every audio streaming website is doing. – isADon Feb 02 '20 at 07:59
  • I assure you it isn't necessary. The only times you need HLS are if you're streaming multiple bitrates or if you want to stream live without a specialized server. The browser is perfectly capable of requesting what it needs, when it needs it, from a static audio or video file. Furthermore, you're losing another generation of quality because you're re-encoding from a lossy source to begin with. You'd be better off serving up that MP3 directly, and then you skip the overhead and compatibility issues of HLS altogether. – Brad Feb 02 '20 at 16:45
  • That's interesting. I am actually considering skipping the HLS bit. However, I would probably still want to re encode the audio files to lower bitrate aac in order to minimize the file size. The service lets one upload any type of audio file (lossy / lossless) and make it available for streaming on desktop or mobile. – isADon Feb 02 '20 at 21:07

2 Answers2

3

You are using the option -hls_list_size 0 which makes 1 container file.

I use -muxdelay 0 -f segment -sc_threshold 0 -segment_time 15 -segment_list "playlist.m3u8" -segment_format mpegts "file%d.ts" in all my HLS video encode commands.

To put this in a working command for you that would be:

ffmpeg -y -i "song.mp3" -c:a aac -b:a 128k -muxdelay 0 -f segment -sc_threshold 0 -segment_time 7 -segment_list "playlist.m3u8" -segment_format mpegts "file%d.m4a"
Stoney Eagle
  • 982
  • 8
  • 11
0

this error can also happened if your mp3 contains image (art) to make sure you only segment audio data i use this command

ffmpeg -i 1.mp3 -map 0:a -c:a aac -b:a 320k -f hls -hls_time 10 -hls_list_size 0 -hls_segment_filename audio%04d.ts audio.m3u8

Mohammad
  • 722
  • 1
  • 8
  • 17