[FFmpeg-user] Transcoding individual segments of HLS?

David Johansen davejohansen at gmail.com
Sat Mar 16 19:31:57 EET 2024

On Sat, Mar 16, 2024 at 12:56 AM Def Etienne <shaker.doc at gmail.com> wrote:

> Sent from my iPhone
> > On 16 Mar 2024, at 06:44, David Johansen <davejohansen at gmail.com> wrote:
> >
> > I've used ffmpeg to convert an H.264 .mp4 to segments for HLS playback
> and
> > it works. I'd like to then transcode them to H.265 so that it's available
> > as well, and I'd like to process them as individual segments so it can be
> > done in parallel.
> >
> > I'm doing that by creating a manifest that has the init.mp4 and single
> > segment and then outputting just that segment, but when I do that, it
> will
> > only playback the first segment and then stop. I believe that something
> is
> > going wrong with the PTS and/or DTS values when I do this.
> >
> > I tried using -copyts but it didn't change the output and I also disabled
> > B-frames because it made the PTS values of the resulting HLS appear in
> > sequential order as the original one does, but it still won't play in the
> > browser.
> >
> The command you used and the complete  uncut console output (a good
> posting guideline) is always a good starting point for anyone who wants to
> help.

Sorry, I should have included that.

Here's the command to convert the file to HLS segments:
ffmpeg -i input.mp4 -c:v copy -c:a copy -map v:0 -map a:0 -tag:v hvc1
-hls_segment_type fmp4 -hls_init_time 5.9 -hls_time 6 -hls_list_size 10000
-hls_flags "independent_segments+program_date_time+temp_file"
-master_pl_name index.m3u8 -var_stream_map "v:0,agroup:aud
a:0,agroup:aud,default:yes" -f hls "%v/index.m3u8"

Then I make a manifest file for each segment that looks like this:

And then I run this command to transcode each segment:
ffmpeg -i segment.m3u8 -c:v libx265 -tag:v hvc1 -x265-params
"log-level=warning:no-wpp=1:lookahead-slices=0" -hls_segment_type fmp4
-hls_init_time 5.9 -hls_time 6 -f hls video.m3u8

I tried adding bframes=0 to -x265-params and that made the PTS values be
sequential like the original input, but the player still only showed the
first segment. I also tried adding -copyts and -muxdelay 0 but that didn't
change the output.

More information about the ffmpeg-user mailing list