0

I have a video I'd like to convert to HLS, however, when I run the command, it only records the last few segments to the master manifest. How can I get all of the fragments and their associated data into the same manifest?

Output manifest:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:16
#EXTINF:4.800000,
out-316.ts
#EXTINF:7.000000,
out-317.ts
#EXTINF:4.800000,
out-318.ts
#EXTINF:6.360000,
out-319.ts
#EXTINF:1.920000,
out-320.ts
#EXT-X-ENDLIST

Command and output:

$ ffmpeg -i segment-3.mp4 -c copy -copyts -hls_time 6 out-3.m3u8
ffmpeg version N-90649-g9825f77ac7 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.3.0 (GCC)
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --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-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
  libavutil      56. 13.100 / 56. 13.100
  libavcodec     58. 17.100 / 58. 17.100
  libavformat    58. 11.101 / 58. 11.101
  libavdevice    58.  2.100 / 58.  2.100
  libavfilter     7. 14.100 /  7. 14.100
  libswscale      5.  0.102 /  5.  0.102
  libswresample   3.  0.101 /  3.  0.101
  libpostproc    55.  0.100 / 55.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'segment-3.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.11.101
  Duration: 00:02:03.18, start: 39.915011, bitrate: 188 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240 [SAR 1:1 DAR 4:3], 111 kb/s, 24.98 fps, 25 tbr, 12800 tbn, 50 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 72 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
[hls @ 0000028f6faf5380] Opening 'out-30.ts' for writing
Output #0, hls, to 'out-3.m3u8':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.11.101
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 320x240 [SAR 1:1 DAR 4:3], q=2-31, 111 kb/s, 24.98 fps, 25 tbr, 90k tbn, 25 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 72 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[hls @ 0000028f6faf5380] Opening 'out-31.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-32.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-33.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-34.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-35.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-36.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-37.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-38.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-39.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-310.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-311.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-312.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-313.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-314.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-315.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-316.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-317.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-318.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-319.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-320.ts' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
[hls @ 0000028f6faf5380] Opening 'out-3.m3u8.tmp' for writing
frame= 3076 fps=0.0 q=-1.0 Lsize=N/A time=00:02:43.07 bitrate=N/A speed= 696x
video:1674kB audio:1083kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

1 Answer 1

1

Add -hls_playlist_type vod to the output parameters.

Doing this will write all the fragments to the same manifest, as well as add a #EXT-X-PLAYLIST-TYPE:VOD tag to the manifest.

You can also do -hls_list_size 0. The default for this is 5, which means the output manifest will contain up to 5 segments by default. Setting it to 0 will tell ffmpeg to contain all the fragments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.