[FFmpeg-user] Trouble adding multiple subtitle tracks to HLS variant stream

Michael Hwang michael.a.hwang at gmail.com
Thu Sep 17 07:40:30 EEST 2020


Hi all,

I'm trying to convert a video into two HLS streams. This file has one
video track, one audio track, and seven subtitle tracks, only three of
which I am interested in.

The resulting HLS streams will be a "high quality" and "standard
quality" video stream, which, through the magic of var_stream_map, use
the same audio track. These streams are played back via a hls.js-based
player.

Here is the call to ffmpeg to produce the two streams, sans subtitles:

ffmpeg -i "input_file.mkv" \
-filter_complex
"[0]split=2[s1][s2];[s1]scale='min(1920,iw)':-2[hd];[s2]scale='min(1280,iw)':-2[sd]"
\
-map '[hd]' -c:v:0 libx264 -b:v:0 3800k \
-map '[sd]' -c:v:1 libx264 -b:v:1 2000k \
-map 0:1 -c:a:0 aac -b:a:0 192k -ac 2 \
-var_stream_map "a:0,agroup:audio v:0,agroup:audio v:1,agroup:audio" \
-f hls -master_pl_name master.m3u8 -hls_time 4 -hls_list_size 0
-hls_segment_type fmp4 -hls_segment_filename "live_%v_%04d.ts"
"live_%v.m3u8"

If I want to add subtitles, I have to first convert them to webvtt by adding:

-map '0:2' -c:s:0 webvtt \
-map '0:3' -c:s:1 webvtt \
-map '0:4' -c:s:2 webvtt

However, I'm not sure how to add my subtitles to the variant stream map.

I assumed at first that I could use "sgroup" in the same manner as "agroup":

-var_stream_map "a:0,agroup:audio s:0,sgroup:subtitle
s:1,sgroup:subtitle s:2,sgroup:subtitle
v:0,agroup:audio,sgroup:subtitle v:1,agroup:audio,sgroup:subtitle"

However, I get this error:

>No streams to mux were specified
>Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
>Error initializing output stream 0:1 --

So it seems like s: cannot be alone in its own variant stream.

If I drop the third subtitle track, I can get the first two to show up
properly in master.m3u8 like this:

-var_stream_map "a:0,agroup:audio
v:0,agroup:audio,s:0,sgroup:subtitles
v:1,agroup:audio,s:1,sgroup:subtitles"

But of course this limits me to only as many subtitle tracks as I have
video streams.

Does anyone know what var_stream_map syntax I should use to get my
third subtitle track to show up?

Thanks,

Michael

(I'm using a static ffmpeg build; here's the version info:)

ffmpeg version N-54088-gb0203fa72b-static
https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2020 the FFmpeg
developers
built with gcc 8 (Debian 8.3.0-6)
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
libavutil      56. 58.100 / 56. 58.100
libavcodec     58.105.100 / 58.105.100
libavformat    58. 54.100 / 58. 54.100
libavdevice    58. 11.101 / 58. 11.101
libavfilter     7. 87.100 /  7. 87.100
libswscale      5.  8.100 /  5.  8.100
libswresample   3.  8.100 /  3.  8.100
libpostproc    55.  8.100 / 55.  8.100


More information about the ffmpeg-user mailing list