[FFmpeg-trac] #5009(ffmpeg:new): HLS Segmenter: Declared EXTINF duration of the last segment in the m3u8 is incorrect
FFmpeg
trac at avcodec.org
Mon Jan 23 21:43:17 EET 2017
#5009: HLS Segmenter: Declared EXTINF duration of the last segment in the m3u8 is
incorrect
-------------------------------------+-------------------------------------
Reporter: | Owner:
an_ffmpeg_user | Status: new
Type: defect | Component: ffmpeg
Priority: normal | Resolution:
Version: unspecified | Blocked By:
Keywords: HLS Segment | Reproduced by developer: 0
Duration |
Blocking: |
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Comment (by an_ffmpeg_user):
Fixed by
http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=2deafd98988871f25b0778059ee84a704372ec24
Install FFmpeg from latest build on OS X
{{{
$ brew install ffmpeg --HEAD --with-freetype --with-sdl2 --with-tools
--with-fdk-aac
}}}
1. create a mezzanine file
{{{
$ ffmpeg -f lavfi -i testsrc=duration=14:size=1920x1080:rate=30*1000/1001
-vf
"drawtext=fontfile=/Library/Fonts/Verdana.ttf:timecode='00\:00\:00\:00':r=30*1000/1001:x=(w-tw)/2:y=h-(2*lh):fontcolor=white:box=1:boxcolor=0x00000099"
-c:v libx264 -profile:v high -level 4.0 -x264opts "bitrate=3500:vbv-
maxrate=3500:vbv-bufsize=3500" -pix_fmt yuv420p -f mp4 ./mezzanine.mp4
ffmpeg version N-43585-g9ea2998 Copyright (c) 2000-2017 the FFmpeg
developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD-9ea2998 --enable-
shared --enable-pthreads --enable-gpl --enable-version3 --enable-
hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-
ldflags= --enable-ffplay --enable-libfdk-aac --enable-libfreetype
--enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl
--disable-lzma --enable-nonfree --enable-vda
libavutil 55. 44.100 / 55. 44.100
libavcodec 57. 75.100 / 57. 75.100
libavformat 57. 63.100 / 57. 63.100
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 69.100 / 6. 69.100
libavresample 3. 2. 0 / 3. 2. 0
libswscale 4. 3.101 / 4. 3.101
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Input #0, lavfi, from
'testsrc=duration=14:size=1920x1080:rate=30*1000/1001':
Duration: N/A, start: 0.000000, bitrate: N/A
Stream #0:0: Video: rawvideo (RGB[24] / 0x18424752), rgb24, 1920x1080
[SAR 1:1 DAR 16:9], 29.97 tbr, 29.97 tbn, 29.97 tbc
File './mezzanine.mp4' already exists. Overwrite ? [y/N] y
[libx264 @ 0x7fb03d001800] using SAR=1/1
[libx264 @ 0x7fb03d001800] using cpu capabilities: MMX2 SSE2Fast SSSE3
SSE4.2
[libx264 @ 0x7fb03d001800] profile High, level 4.0
[libx264 @ 0x7fb03d001800] 264 - core 148 r2728 4d5c8b0 - H.264/MPEG-4 AVC
codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options:
cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1
psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1
cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6
lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0
bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25
scenecut=40 intra_refresh=0 rc_lookahead=40 rc=cbr mbtree=1 bitrate=3500
ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=3500
vbv_bufsize=3500 nal_hrd=none filler=0 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to './mezzanine.mp4':
Metadata:
encoder : Lavf57.63.100
Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p,
1920x1080 [SAR 1:1 DAR 16:9], q=-1--1, 3500 kb/s, 29.97 fps, 30k tbn,
29.97 tbc
Metadata:
encoder : Lavc57.75.100 libx264
Side data:
cpb: bitrate max/min/avg: 3500000/0/3500000 buffer size: 3500000
vbv_delay: -1
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Press [q] to stop, [?] for help
frame= 17 fps=0.0 q=0.0 size= 0kB time=00:00:00.00 bitrate=N/A
speed= frame= 31 fps= 30 q=0.0 size= 0kB time=00:00:00.00
bitrate=N/A speed= frame= 44 fps= 29 q=0.0 size= 0kB
time=00:00:00.00 bitrate=N/A speed= frame= 47 fps= 20 q=0.0 size=
0kB time=00:00:00.00 bitrate=N/A speed= frame= 57 fps= 20 q=18.0 size=
28kB time=00:00:00.13 bitrate=1689.8kbits/frame= 68 fps= 20 q=11.0 size=
54kB time=00:00:00.50 bitrate= 880.6kbits/frame= 78 fps= 20 q=11.0 size=
92kB time=00:00:00.83 bitrate= 906.7kbits/frame= 85 fps= 19 q=11.0 size=
120kB time=00:00:01.06 bitrate= 918.9kbits/frame= 93 fps= 19 q=11.0
size= 150kB time=00:00:01.33 bitrate= 918.9kbits/frame= 101 fps= 18
q=11.0 size= 184kB time=00:00:01.60 bitrate= 940.1kbits/frame= 113
fps= 19 q=11.0 size= 232kB time=00:00:02.00 bitrate= 947.6kbits/frame=
125 fps= 19 q=11.0 size= 279kB time=00:00:02.40 bitrate=
952.8kbits/frame= 137 fps= 19 q=11.0 size= 326kB time=00:00:02.80
bitrate= 954.0kbits/frame= 147 fps= 19 q=11.0 size= 366kB
time=00:00:03.13 bitrate= 957.1kbits/frame= 157 fps= 19 q=11.0 size=
405kB time=00:00:03.47 bitrate= 957.0kbits/frame= 168 fps= 19 q=11.0
size= 448kB time=00:00:03.83 bitrate= 956.4kbits/frame= 179 fps= 19
q=11.0 size= 492kB time=00:00:04.20 bitrate= 958.0kbits/frame= 185
fps= 19 q=11.0 size= 513kB time=00:00:04.40 bitrate= 954.4kbits/frame=
194 fps= 19 q=11.0 size= 547kB time=00:00:04.70 bitrate=
952.8kbits/frame= 202 fps= 18 q=11.0 size= 578kB time=00:00:04.97
bitrate= 953.0kbits/frame= 210 fps= 18 q=11.0 size= 611kB
time=00:00:05.23 bitrate= 955.9kbits/frame= 218 fps= 18 q=11.0 size=
645kB time=00:00:05.50 bitrate= 959.0kbits/frame= 226 fps= 18 q=11.0
size= 676kB time=00:00:05.77 bitrate= 959.7kbits/frame= 236 fps= 18
q=11.0 size= 713kB time=00:00:06.10 bitrate= 956.0kbits/frame= 243
fps= 18 q=11.0 size= 744kB time=00:00:06.33 bitrate= 961.0kbits/frame=
255 fps= 18 q=11.0 size= 792kB time=00:00:06.74 bitrate=
962.0kbits/frame= 267 fps= 18 q=12.0 size= 833kB time=00:00:07.14
bitrate= 955.4kbits/frame= 280 fps= 18 q=12.0 size= 864kB
time=00:00:07.57 bitrate= 934.5kbits/frame= 292 fps= 18 q=13.0 size=
902kB time=00:00:07.97 bitrate= 927.0kbits/frame= 297 fps= 18 q=13.0
size= 914kB time=00:00:08.14 bitrate= 920.1kbits/frame= 307 fps= 18
q=11.0 size= 958kB time=00:00:08.47 bitrate= 926.3kbits/frame= 317
fps= 18 q=11.0 size= 989kB time=00:00:08.80 bitrate= 919.3kbits/frame=
330 fps= 18 q=11.0 size= 1039kB time=00:00:09.24 bitrate=
920.6kbits/frame= 341 fps= 18 q=11.0 size= 1085kB time=00:00:09.60
bitrate= 924.8kbits/frame= 354 fps= 18 q=11.0 size= 1133kB
time=00:00:10.04 bitrate= 924.3kbits/frame= 366 fps= 18 q=11.0 size=
1180kB time=00:00:10.44 bitrate= 925.7kbits/frame= 379 fps= 19 q=11.0
size= 1230kB time=00:00:10.87 bitrate= 926.6kbits/frame= 392 fps= 19
q=11.0 size= 1283kB time=00:00:11.31 bitrate= 929.5kbits/frame= 405
fps= 19 q=11.0 size= 1335kB time=00:00:11.74 bitrate= 931.0kbits/frame=
418 fps= 19 q=11.0 size= 1387kB time=00:00:12.17 bitrate=
932.7kbits/frame= 420 fps= 18 q=-1.0 Lsize= 1627kB time=00:00:13.91
bitrate= 957.9kbits/s speed=0.596x
video:1621kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: 0.355593%
[libx264 @ 0x7fb03d001800] frame I:2 Avg QP: 1.33 size: 23156
[libx264 @ 0x7fb03d001800] frame P:106 Avg QP: 1.93 size: 2744
[libx264 @ 0x7fb03d001800] frame B:312 Avg QP: 2.27 size: 4237
[libx264 @ 0x7fb03d001800] consecutive B-frames: 1.0% 0.0% 0.0% 99.0%
[libx264 @ 0x7fb03d001800] mb I I16..4: 95.1% 0.6% 4.3%
[libx264 @ 0x7fb03d001800] mb P I16..4: 1.7% 0.2% 0.3% P16..4: 4.1%
0.3% 0.1% 0.0% 0.0% skip:93.4%
[libx264 @ 0x7fb03d001800] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 3.1%
0.1% 0.0% direct: 8.7% skip:88.1% L0:49.4% L1:49.6% BI: 1.0%
[libx264 @ 0x7fb03d001800] 8x8 transform intra:4.0% inter:31.6%
[libx264 @ 0x7fb03d001800] coded y,uvDC,uvAC intra: 6.5% 21.2% 20.9%
inter: 0.1% 7.2% 6.7%
[libx264 @ 0x7fb03d001800] i16 v,h,dc,p: 96% 3% 1% 0%
[libx264 @ 0x7fb03d001800] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 56% 13% 31% 0%
0% 0% 0% 0% 0%
[libx264 @ 0x7fb03d001800] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 18% 57% 24% 1%
0% 0% 0% 1% 0%
[libx264 @ 0x7fb03d001800] i8c dc,h,v,p: 52% 12% 35% 1%
[libx264 @ 0x7fb03d001800] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fb03d001800] ref P L0: 59.0% 0.3% 39.1% 1.7%
[libx264 @ 0x7fb03d001800] ref B L0: 94.6% 5.1% 0.3%
[libx264 @ 0x7fb03d001800] ref B L1: 97.7% 2.3%
[libx264 @ 0x7fb03d001800] kb/s:947.21
}}}
2. Inspect the duration of mezzanine file
{{{
$ ffprobe -loglevel quiet -print_format flat -show_entries format=duration
"./mezzanine.mp4"
format.duration="14.014000"
}}}
{{{
ffprobe -loglevel quiet -print_format flat -show_streams -select_streams v
-show_entries stream=duration "./mezzanine.mp4"
streams.stream.0.duration="14.014000"
streams.stream.0.disposition.default=1
streams.stream.0.disposition.dub=0
streams.stream.0.disposition.original=0
streams.stream.0.disposition.comment=0
streams.stream.0.disposition.lyrics=0
streams.stream.0.disposition.karaoke=0
streams.stream.0.disposition.forced=0
streams.stream.0.disposition.hearing_impaired=0
streams.stream.0.disposition.visual_impaired=0
streams.stream.0.disposition.clean_effects=0
streams.stream.0.disposition.attached_pic=0
streams.stream.0.disposition.timed_thumbnails=0
streams.stream.0.tags.language="und"
streams.stream.0.tags.handler_name="VideoHandler"
}}}
3. Encode a HLS version
{{{
$ ffmpeg -i "./mezzanine.mp4" -vf "scale=1280:720" -c:v libx264 -preset
medium -profile:v main -level 3.1 -x264opts "bitrate=2400:vbv-maxrate=2400
:vbv-bufsize=2400:min-keyint=30:keyint=60:scenecut=0" -pix_fmt yuv420p -f
hls -hls_time 6 -hls_list_size 0 -hls_segment_filename
'test_1280x720_%03d.ts' ./test_mediaplaylist_1280x720.m3u8
ffmpeg version N-43585-g9ea2998 Copyright (c) 2000-2017 the FFmpeg
developers
built with Apple LLVM version 8.0.0 (clang-800.0.42.1)
configuration: --prefix=/usr/local/Cellar/ffmpeg/HEAD-9ea2998 --enable-
shared --enable-pthreads --enable-gpl --enable-version3 --enable-
hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-
ldflags= --enable-ffplay --enable-libfdk-aac --enable-libfreetype
--enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl
--disable-lzma --enable-nonfree --enable-vda
libavutil 55. 44.100 / 55. 44.100
libavcodec 57. 75.100 / 57. 75.100
libavformat 57. 63.100 / 57. 63.100
libavdevice 57. 2.100 / 57. 2.100
libavfilter 6. 69.100 / 6. 69.100
libavresample 3. 2. 0 / 3. 2. 0
libswscale 4. 3.101 / 4. 3.101
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './mezzanine.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.63.100
Duration: 00:00:14.01, start: 0.000000, bitrate: 951 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
1920x1080 [SAR 1:1 DAR 16:9], 947 kb/s, 29.97 fps, 29.97 tbr, 30k tbn,
59.94 tbc (default)
Metadata:
handler_name : VideoHandler
[libx264 @ 0x7fb095019a00] using SAR=1/1
[libx264 @ 0x7fb095019a00] using cpu capabilities: MMX2 SSE2Fast SSSE3
SSE4.2
[libx264 @ 0x7fb095019a00] profile Main, level 3.1
Output #0, hls, to './test_mediaplaylist_1280x720.m3u8':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.63.100
Stream #0:0(und): Video: h264 (libx264), yuv420p, 1280x720 [SAR 1:1
DAR 16:9], q=-1--1, 2400 kb/s, 29.97 fps, 90k tbn, 29.97 tbc (default)
Metadata:
handler_name : VideoHandler
encoder : Lavc57.75.100 libx264
Side data:
cpb: bitrate max/min/avg: 2400000/0/2400000 buffer size: 2400000
vbv_delay: -1
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Press [q] to stop, [?] for help
frame= 420 fps= 44 q=-1.0 Lsize=N/A time=00:00:13.91 bitrate=N/A
speed=1.47x
video:1610kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: unknown
[libx264 @ 0x7fb095019a00] frame I:7 Avg QP: 0.43 size: 25272
[libx264 @ 0x7fb095019a00] frame P:105 Avg QP: 0.61 size: 4410
[libx264 @ 0x7fb095019a00] frame B:308 Avg QP: 1.83 size: 3274
[libx264 @ 0x7fb095019a00] consecutive B-frames: 1.7% 0.0% 5.0% 93.3%
[libx264 @ 0x7fb095019a00] mb I I16..4: 90.7% 0.0% 9.3%
[libx264 @ 0x7fb095019a00] mb P I16..4: 9.0% 0.0% 0.5% P16..4: 5.3%
1.1% 0.7% 0.0% 0.0% skip:83.3%
[libx264 @ 0x7fb095019a00] mb B I16..4: 0.6% 0.0% 0.0% B16..8: 4.2%
0.5% 0.0% direct: 7.6% skip:87.0% L0:53.6% L1:43.3% BI: 3.1%
[libx264 @ 0x7fb095019a00] coded y,uvDC,uvAC intra: 4.3% 12.0% 11.7%
inter: 0.5% 9.3% 9.1%
[libx264 @ 0x7fb095019a00] i16 v,h,dc,p: 98% 1% 1% 0%
[libx264 @ 0x7fb095019a00] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 36% 40% 18% 2%
1% 1% 0% 1% 0%
[libx264 @ 0x7fb095019a00] i8c dc,h,v,p: 27% 5% 66% 1%
[libx264 @ 0x7fb095019a00] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fb095019a00] ref P L0: 58.0% 0.5% 23.9% 17.6%
[libx264 @ 0x7fb095019a00] ref B L0: 68.9% 4.1% 27.0%
[libx264 @ 0x7fb095019a00] ref B L1: 97.4% 2.6%
[libx264 @ 0x7fb095019a00] kb/s:941.01
}}}
4. Inspect the manifest file
{{{
$ cat ./test_mediaplaylist_1280x720.m3u8
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:6.006000,
test_1280x720_000.ts
#EXTINF:6.006000,
test_1280x720_001.ts
#EXTINF:2.002000,
test_1280x720_002.ts
#EXT-X-ENDLIST
}}}
5. Inspect the duration of the file using FFprobe
{{{
$ ffprobe -loglevel quiet -print_format flat -show_entries format=duration
"./test_mediaplaylist_1280x720.m3u8"
format.duration="14.013999"
}}}
--
Ticket URL: <https://trac.ffmpeg.org/ticket/5009#comment:2>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list