On Mon, 18 Nov 2019, 18:44 Dennis Mungai, <[email protected]> wrote:

>
>
> On Mon, 18 Nov 2019, 18:38 gordon, <[email protected]> wrote:
>
>> Okay, thank you. I will give that a go.
>>
>> -- aside --
>>
>> I thought that the "-force_key_frames expr:gte(t,n_forced*2)" was placing
>> the key frames for segment boundaries and still allowing the encoder to
>> place other keyframes where they wanted?  I am trying to use h264, h265,
>> and vp9 so I figured the keyframes not at boundaries would need to be
>> different for efficiency.
>>
>> How do I determine the best (or good) value for "-g" given a particular
>> source file and target duration for segments?
>>
>> On Mon, Nov 18, 2019 at 10:19 AM Dennis Mungai <[email protected]> wrote:
>>
>> > On Mon, 18 Nov 2019 at 17:31, gordon <[email protected]> wrote:
>> >
>> > > Why are the segments for my stream not aligned?  The first command
>> > outputs
>> > > video segment.  The second command outputs an audio segment with the
>> > > previous video output copied in.
>> > >
>> > > Ffmpeg commands are pasted below with the m3u8 outputs.  The same
>> results
>> > > were observed on ffmpeg 4.2.1 and snapshot
>> > >
>> > > /usr/local/bin/ffmpeg -y -loglevel error -f rawvideo -vcodec rawvideo
>> -s
>> > > 160x120 -pix_fmt rgb24 -r 12.00 -i - -an -vcodec libx264 -preset
>> medium
>> > -f
>> > > hls -an -hls_flags single_file -hls_time 6 -hls_list_size 0
>> > > -hls_segment_type mpegts -hls_segment_filename
>> > >
>> > >
>> >
>> /tmp/973b7b02b6e6486f90d3064527a69701/output/21b79578a1d04533932e32d28f46eb94.ts
>> > > -hls_playlist_type vod -master_pl_name
>> > > 21b79578a1d04533932e32d28f46eb94-master.m3u8 -force_key_frames
>> > > 'expr:gte(t,n_forced*2)' -profile:v baseline -level 3.0 -pix_fmt
>> yuv420p
>> > > -vsync cfr -b 145k -pix_fmt yuv420p
>> > >
>> > >
>> >
>> /tmp/973b7b02b6e6486f90d3064527a69701/output/21b79578a1d04533932e32d28f46eb94-variant.m3u8
>> > >
>> > > #EXTM3U
>> > > #EXT-X-VERSION:4
>> > > #EXT-X-TARGETDURATION:6
>> > > #EXT-X-MEDIA-SEQUENCE:0
>> > > #EXT-X-PLAYLIST-TYPE:VOD
>> > > #EXTINF:6.000000,
>> > > #EXT-X-BYTERANGE:116748@0
>> > > 21b79578a1d04533932e32d28f46eb94.ts
>> > > #EXTINF:6.000000,
>> > > #EXT-X-BYTERANGE:96256@116748
>> > > 21b79578a1d04533932e32d28f46eb94.ts
>> > > #EXTINF:6.000000,
>> > > #EXT-X-BYTERANGE:143256@213004
>> > > 21b79578a1d04533932e32d28f46eb94.ts
>> > > #EXTINF:6.000000,
>> > > #EXT-X-BYTERANGE:97760@356260
>> > > 21b79578a1d04533932e32d28f46eb94.ts
>> > > #EXTINF:5.750000,
>> > > #EXT-X-BYTERANGE:75764@454020
>> > > 21b79578a1d04533932e32d28f46eb94.ts
>> > > #EXT-X-ENDLIST
>> > >
>> > >
>> > > /usr/local/bin/ffmpeg -y -loglevel error -f s16le -acodec pcm_s16le
>> -ar
>> > > 44100 -ac 2 -i - -i
>> > >
>> > >
>> >
>> /tmp/973b7b02b6e6486f90d3064527a69701/output/21b79578a1d04533932e32d28f46eb94.ts
>> > > -vcodec copy -acodec libfdk_aac -ar 44100 -strict -2 -profile:a
>> aac_he_v2
>> > > -vbr 1 -f hls -hls_flags single_file -hls_time 6 -hls_list_size 0
>> > > -hls_segment_type mpegts -hls_segment_filename
>> > >
>> > >
>> >
>> /tmp/973b7b02b6e6486f90d3064527a69701/output/e3658a88388c4d4da25681956bccb00f.ts
>> > > -hls_playlist_type vod -master_pl_name
>> > > e3658a88388c4d4da25681956bccb00f-master.m3u8 -force_key_frames
>> > > 'expr:gte(t,n_forced*2)' -pix_fmt yuv420p -vsync cfr
>> > >
>> > >
>> >
>> /tmp/973b7b02b6e6486f90d3064527a69701/output/e3658a88388c4d4da25681956bccb00f-variant.m3u8
>> > >
>> > > #EXTM3U
>> > > #EXT-X-VERSION:4
>> > > #EXT-X-TARGETDURATION:6
>> > > #EXT-X-MEDIA-SEQUENCE:0
>> > > #EXT-X-PLAYLIST-TYPE:VOD
>> > > #EXTINF:6.000000,
>> > > #EXT-X-BYTERANGE:146452@0
>> > > e3658a88388c4d4da25681956bccb00f.ts
>> > > #EXTINF:6.000000,
>> > > #EXT-X-BYTERANGE:125020@146452
>> > > e3658a88388c4d4da25681956bccb00f.ts
>> > > #EXTINF:5.916667,
>> > > #EXT-X-BYTERANGE:167320@271472
>> > > e3658a88388c4d4da25681956bccb00f.ts
>> > > #EXTINF:6.083333,
>> > > #EXT-X-BYTERANGE:133856@438792
>> > > e3658a88388c4d4da25681956bccb00f.ts
>> > > #EXTINF:5.750000,
>> > > #EXT-X-BYTERANGE:103776@572648
>> > > e3658a88388c4d4da25681956bccb00f.ts
>> > > #EXT-X-ENDLIST
>> >
>> >
>> >
>> > To ensure alignment, you must use a closed GOP (set via -flags +cgop)
>> and
>> > specify a GOP size via the -g option passed to your video encoder.
>>
>>
>>
>
>
> A keyframe distance of 2 is ideal. Simply set -g to 2x your content's
>> frame rate. If your fps is 30, then -g should be 60. As an example.
>> Secondly, set your segment length to a multiple of 2. Segment lengths of 6
>> seconds are ideal (and it's what Apple recommends in their HLS authoring
>> guidelines). However, if low latency for a trade off in encoding quality is
>> desired, then set segment length to 2.
>
>
If you must force keyframes, then ensure that they are forced as IDRs.
libx264 should have that as a private encoder option, verify with ffmpeg -h
encoder=libx264.

Combining both -g and force key frames to the same interval is also ideal,
but be aware that forcing too many keyframes will invariably affect
transcode quality, as it may impact look ahead decisions, etc. Some
encoders, particularly libvpx are heavily affected by this quality
degradation with forcing keyframes. Evaluate what your requirements and
tradeoffs are and deploy them as needed.

>
_______________________________________________
ffmpeg-user mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-user

To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".

Reply via email to