[FFmpeg-user] why are my streams not aligned?

gordon wgordonw1 at gmail.com
Mon Nov 18 19:27:38 EET 2019


On Mon, Nov 18, 2019 at 10:54 AM Dennis Mungai <dmngaie at gmail.com> wrote:

> On Mon, 18 Nov 2019, 18:44 Dennis Mungai, <dmngaie at gmail.com> wrote:
>
> >
> >
> > On Mon, 18 Nov 2019, 18:38 gordon, <wgordonw1 at gmail.com> 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 <dmngaie at gmail.com>
> wrote:
> >>
> >> > On Mon, 18 Nov 2019 at 17:31, gordon <wgordonw1 at gmail.com> 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 at 0
> >> > > 21b79578a1d04533932e32d28f46eb94.ts
> >> > > #EXTINF:6.000000,
> >> > > #EXT-X-BYTERANGE:96256 at 116748
> >> > > 21b79578a1d04533932e32d28f46eb94.ts
> >> > > #EXTINF:6.000000,
> >> > > #EXT-X-BYTERANGE:143256 at 213004
> >> > > 21b79578a1d04533932e32d28f46eb94.ts
> >> > > #EXTINF:6.000000,
> >> > > #EXT-X-BYTERANGE:97760 at 356260
> >> > > 21b79578a1d04533932e32d28f46eb94.ts
> >> > > #EXTINF:5.750000,
> >> > > #EXT-X-BYTERANGE:75764 at 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 at 0
> >> > > e3658a88388c4d4da25681956bccb00f.ts
> >> > > #EXTINF:6.000000,
> >> > > #EXT-X-BYTERANGE:125020 at 146452
> >> > > e3658a88388c4d4da25681956bccb00f.ts
> >> > > #EXTINF:5.916667,
> >> > > #EXT-X-BYTERANGE:167320 at 271472
> >> > > e3658a88388c4d4da25681956bccb00f.ts
> >> > > #EXTINF:6.083333,
> >> > > #EXT-X-BYTERANGE:133856 at 438792
> >> > > e3658a88388c4d4da25681956bccb00f.ts
> >> > > #EXTINF:5.750000,
> >> > > #EXT-X-BYTERANGE:103776 at 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
> ffmpeg-user at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
> To unsubscribe, visit link above, or email
> ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".






 So, I did not get expected results with cgop and -g.  What have I done
wrong?

/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 -flags +cgop -hls_flags single_file -hls_time 6 -hls_list_size 0
-hls_playlist_type vod -pix_fmt yuv420p -vsync cfr -g 24 -map 0:v:0
-hls_segment_type mpegts -hls_segment_filename
/tmp/c8d61968cf274de1a96184e55354ffea/output/7f96b3983a4c4da2baf74f5c3b732a1c.ts
-master_pl_name 7f96b3983a4c4da2baf74f5c3b732a1c-master.m3u8 -profile:v
baseline -level 3.0 -b 145k -pix_fmt yuv420p
/tmp/c8d61968cf274de1a96184e55354ffea/output/7f96b3983a4c4da2baf74f5c3b732a1c-variant.m3u8

/usr/local/bin/ffmpeg -y -loglevel error -f s16le -acodec pcm_s16le -ar
44100 -ac 2 -i - -i
/tmp/c8d61968cf274de1a96184e55354ffea/output/7f96b3983a4c4da2baf74f5c3b732a1c.ts
-vcodec libx264 -acodec libfdk_aac -ar 44100 -strict -2 -f hls -flags +cgop
-hls_flags single_file -hls_time 6 -hls_list_size 0 -hls_playlist_type vod
-pix_fmt yuv420p -vsync cfr -g 24 -map 0:a:0 -profile:a aac_he_v2 -vbr 1
-hls_segment_type mpegts -hls_segment_filename
/tmp/c8d61968cf274de1a96184e55354ffea/output/9a9036b2484e425ca4443ad31ade2867.ts
-master_pl_name 9a9036b2484e425ca4443ad31ade2867-master.m3u8
/tmp/c8d61968cf274de1a96184e55354ffea/output/9a9036b2484e425ca4443ad31ade2867-variant.m3u8

$ cat /tmp/c8d61968cf274de1a96184e55354ffea/output/*var*
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:6.666667,
#EXT-X-BYTERANGE:131600 at 0
7f96b3983a4c4da2baf74f5c3b732a1c.ts
#EXTINF:5.916667,
#EXT-X-BYTERANGE:96256 at 131600
7f96b3983a4c4da2baf74f5c3b732a1c.ts
#EXTINF:6.250000,
#EXT-X-BYTERANGE:143632 at 227856
7f96b3983a4c4da2baf74f5c3b732a1c.ts
#EXTINF:5.166667,
#EXT-X-BYTERANGE:82344 at 371488
7f96b3983a4c4da2baf74f5c3b732a1c.ts
#EXTINF:5.750000,
#EXT-X-BYTERANGE:80464 at 453832
7f96b3983a4c4da2baf74f5c3b732a1c.ts
#EXT-X-ENDLIST
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:6.037778,
#EXT-X-BYTERANGE:30644 at 0
9a9036b2484e425ca4443ad31ade2867.ts
#EXTINF:5.991333,
#EXT-X-BYTERANGE:29892 at 30644
9a9036b2484e425ca4443ad31ade2867.ts
#EXTINF:5.991333,
#EXT-X-BYTERANGE:31020 at 60536
9a9036b2484e425ca4443ad31ade2867.ts
#EXTINF:5.991333,
#EXT-X-BYTERANGE:30832 at 91556
9a9036b2484e425ca4443ad31ade2867.ts
#EXTINF:5.832267,
#EXT-X-BYTERANGE:29892 at 122388
9a9036b2484e425ca4443ad31ade2867.ts
#EXT-X-ENDLIST


$ /usr/local/bin/ffmpeg -version
ffmpeg version N-95760-g315a449 Copyright (c) 2000-2019 the FFmpeg
developers
built with gcc 7 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
configuration: --prefix=/home/vagrant/ffmpeg/build
--pkg-config-flags=--static
--extra-cflags=-I/home/vagrant/ffmpeg/build/include
--extra-ldflags=-L/home/vagrant/ffmpeg/build/lib --bindir=/home/vagrant/bin
--enable-openssl --enable-gpl --enable-libass --enable-libfdk-aac
--enable-libfreetype --enable-libmp3lame --enable-libopus
--enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264
--enable-libx265 --enable-nonfree
libavutil      56. 36.100 / 56. 36.100
libavcodec     58. 62.100 / 58. 62.100
libavformat    58. 35.100 / 58. 35.100
libavdevice    58.  9.100 / 58.  9.100
libavfilter     7. 66.100 /  7. 66.100
libswscale      5.  6.100 /  5.  6.100
libswresample   3.  6.100 /  3.  6.100
libpostproc    55.  6.100 / 55.  6.100


More information about the ffmpeg-user mailing list