[FFmpeg-trac] #4733(undetermined:new): HLS segmenting generates different EXT-X-TARGETDURATION values for different resolutions/framerates
FFmpeg
trac at avcodec.org
Thu Jul 23 18:52:18 CEST 2015
#4733: HLS segmenting generates different EXT-X-TARGETDURATION values for
different resolutions/framerates
-------------------------------------+-------------------------------------
Reporter: lushi | Type: defect
Status: new | Priority: normal
Component: | Version: git-
undetermined | master
Keywords: HLS | Blocked By:
TARGETDURATION | Reproduced by developer: 0
Blocking: |
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
Summary of the bug:
I am trying to encode a video to HLS in multiple bitrates (and, therefore,
according to apple's recommendations, multiple frame rates).
I can get one HLS working fine when I have a single variant. But when I
have variants, I sometimes get different segment durations and, therefore,
different TARGETDURATION (since they have different maxes). This means
that the variants can't be used together.
For example, here are the first few lines of the m3u8 file of the same
video encoded a 15 fps and 30 fps. Note the durations of the first
segments have _different_lengths_. Also the TARGETDURATION is different.
{{{
#EXT-X-TARGETDURATION:10
#EXTINF:9.023222,
480_0.ts
}}}
{{{
#EXT-X-TARGETDURATION:10
#EXTINF:9.023222,
640_0.ts
}}}
{{{
#EXT-X-TARGETDURATION:9
#EXTINF:9.000000,
960_0.ts
}}}
I have already posted to ffmpeg-users and discussed it on #ffmpeg irc.
Here are the links to a more complete writeup:
[http://ffmpeg-users.933282.n4.nabble.com/HLS-segment-duration-for-
multiple-framerate-encoding-td4671498.html]
[http://pastebin.com/JqxiMe3U]
How to reproduce:
Source video
file:[http://www.caminandes.com/download/01_llama_drama_1080p.zip]
full logs with -v 9 -loglevel 99 are attached
'''ENCODING 1'''
{{{
%./ffmpeg -y -i ../infile.mp4 -pix_fmt yuv420p -vbsf h264_mp4toannexb
-flags -global_header -vcodec libx264 -strict -2 -acodec aac -r 15
-profile:v baseline -level 3 -b:v 1632k -maxrate 1746.24k -keyint_min 45
-g 45 -sc_threshold 0 -vf scale=480:-1 -hls_list_size 0 -hls_time 9
480_.m3u8
ffmpeg version N-48432-ga176bbc-static http://johnvansickle.com/ffmpeg/
Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.9.3 (Debian 4.9.3-1)
configuration: --enable-gpl --enable-version3 --disable-shared
--disable-debug --enable-runtime-cpudetect --enable-libmp3lame --enable-
libx264 --enable-libx265 --enable-libwebp --enable-libspeex --enable-
libvorbis --enable-libvpx --enable-libfreetype --enable-fontconfig
--enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb
--enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-
gray --enable-libopenjpeg --enable-libopus --enable-libass --enable-gnutls
--enable-libvidstab --enable-libsoxr --cc=gcc-4.9
libavutil 54. 28.100 / 54. 28.100
libavcodec 56. 52.100 / 56. 52.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 27.100 / 5. 27.100
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '../infile.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2013-02-08 18:56:45
Duration: 00:01:30.00, start: 0.000000, bitrate: 3120 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
1920x1080, 2925 kb/s, 24 fps, 24 tbr, 48 tbn, 48 tbc (default)
Metadata:
creation_time : 1970-01-01 00:00:00
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz,
stereo, fltp, 191 kb/s (default)
Metadata:
creation_time : 2013-02-08 18:56:46
handler_name : IsoMedia File Produced by Google, 5-11-2011
[libx264 @ 0x3a12de0] VBV maxrate specified, but no bufsize, ignored
[libx264 @ 0x3a12de0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
AVX
[libx264 @ 0x3a12de0] profile Constrained Baseline, level 3.0
Output #0, hls, to '480_.m3u8':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
encoder : Lavf56.40.101
Stream #0:0(und): Video: h264 (libx264), yuv420p, 480x270, q=-1--1,
1632 kb/s, 15 fps, 90k tbn, 15 tbc (default)
Metadata:
creation_time : 1970-01-01 00:00:00
handler_name : VideoHandler
encoder : Lavc56.52.100 libx264
Stream #0:1(und): Audio: aac, 44100 Hz, stereo, fltp, 128 kb/s
(default)
Metadata:
creation_time : 2013-02-08 18:56:46
handler_name : IsoMedia File Produced by Google, 5-11-2011
encoder : Lavc56.52.100 aac
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
frame= 1352 fps=123 q=-1.0 Lsize=N/A time=00:01:30.13 bitrate=N/A dup=0
drop=808
video:16495kB audio:1394kB subtitle:0kB other streams:0kB global
headers:0kB muxing overhead: unknown
[libx264 @ 0x3a12de0] frame I:31 Avg QP: 3.48 size: 58339
[libx264 @ 0x3a12de0] frame P:1321 Avg QP: 5.84 size: 11418
[libx264 @ 0x3a12de0] mb I I16..4: 31.5% 0.0% 68.5%
[libx264 @ 0x3a12de0] mb P I16..4: 2.7% 0.0% 5.5% P16..4: 45.3% 6.5%
8.2% 0.0% 0.0% skip:31.8%
[libx264 @ 0x3a12de0] final ratefactor: 7.75
[libx264 @ 0x3a12de0] coded y,uvDC,uvAC intra: 86.8% 89.0% 88.6% inter:
45.3% 49.2% 47.7%
[libx264 @ 0x3a12de0] i16 v,h,dc,p: 34% 34% 18% 14%
[libx264 @ 0x3a12de0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 39% 12% 4% 5%
5% 8% 4% 7%
[libx264 @ 0x3a12de0] i8c dc,h,v,p: 46% 39% 8% 8%
[libx264 @ 0x3a12de0] ref P L0: 90.2% 6.3% 3.5%
[libx264 @ 0x3a12de0] kb/s:1499.21
}}}
'''ENCODING 2'''
{{{
%./ffmpeg -y -i ../infile.mp4 -pix_fmt yuv420p -vbsf h264_mp4toannexb
-flags -global_header -vcodec libx264 -strict -2 -acodec aac -r 30
-profile:v main -level 3.1 -b:v 1568k -maxrate 1677.76k -keyint_min 90 -g
90 -sc_threshold 0 -vf scale=960:-1 -hls_list_size 0 -hls_time 9 960_.m3u8
ffmpeg version N-48432-ga176bbc-static http://johnvansickle.com/ffmpeg/
Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.9.3 (Debian 4.9.3-1)
configuration: --enable-gpl --enable-version3 --disable-shared
--disable-debug --enable-runtime-cpudetect --enable-libmp3lame --enable-
libx264 --enable-libx265 --enable-libwebp --enable-libspeex --enable-
libvorbis --enable-libvpx --enable-libfreetype --enable-fontconfig
--enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb
--enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-
gray --enable-libopenjpeg --enable-libopus --enable-libass --enable-gnutls
--enable-libvidstab --enable-libsoxr --cc=gcc-4.9
libavutil 54. 28.100 / 54. 28.100
libavcodec 56. 52.100 / 56. 52.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 27.100 / 5. 27.100
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '../infile.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2013-02-08 18:56:45
Duration: 00:01:30.00, start: 0.000000, bitrate: 3120 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
1920x1080, 2925 kb/s, 24 fps, 24 tbr, 48 tbn, 48 tbc (default)
Metadata:
creation_time : 1970-01-01 00:00:00
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz,
stereo, fltp, 191 kb/s (default)
Metadata:
creation_time : 2013-02-08 18:56:46
handler_name : IsoMedia File Produced by Google, 5-11-2011
[libx264 @ 0x3350de0] VBV maxrate specified, but no bufsize, ignored
[libx264 @ 0x3350de0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
AVX
[libx264 @ 0x3350de0] profile Main, level 3.1
Output #0, hls, to '960_.m3u8':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
encoder : Lavf56.40.101
Stream #0:0(und): Video: h264 (libx264), yuv420p, 960x540, q=-1--1,
1568 kb/s, 30 fps, 90k tbn, 30 tbc (default)
Metadata:
creation_time : 1970-01-01 00:00:00
handler_name : VideoHandler
encoder : Lavc56.52.100 libx264
Stream #0:1(und): Audio: aac, 44100 Hz, stereo, fltp, 128 kb/s
(default)
Metadata:
creation_time : 2013-02-08 18:56:46
handler_name : IsoMedia File Produced by Google, 5-11-2011
encoder : Lavc56.52.100 aac
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
frame= 2700 fps=108 q=-1.0 Lsize=N/A time=00:01:30.00 bitrate=N/A dup=540
drop=0
video:16105kB audio:1394kB subtitle:0kB other streams:0kB global
headers:0kB muxing overhead: unknown
[libx264 @ 0x3350de0] frame I:30 Avg QP:10.99 size: 99460
[libx264 @ 0x3350de0] frame P:974 Avg QP:13.39 size: 11549
[libx264 @ 0x3350de0] frame B:1696 Avg QP:17.09 size: 1332
[libx264 @ 0x3350de0] consecutive B-frames: 15.3% 2.1% 2.7% 80.0%
[libx264 @ 0x3350de0] mb I I16..4: 29.2% 0.0% 70.8%
[libx264 @ 0x3350de0] mb P I16..4: 5.9% 0.0% 6.1% P16..4: 26.1% 8.0%
7.6% 0.0% 0.0% skip:46.4%
[libx264 @ 0x3350de0] mb B I16..4: 0.1% 0.0% 0.2% B16..8: 16.1% 1.9%
0.7% direct: 1.3% skip:79.8% L0:37.9% L1:56.3% BI: 5.8%
[libx264 @ 0x3350de0] final ratefactor: 15.30
[libx264 @ 0x3350de0] coded y,uvDC,uvAC intra: 52.5% 73.7% 39.7% inter:
7.3% 13.4% 1.9%
[libx264 @ 0x3350de0] i16 v,h,dc,p: 34% 38% 10% 18%
[libx264 @ 0x3350de0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 21% 32% 16% 4% 5%
5% 6% 4% 6%
[libx264 @ 0x3350de0] i8c dc,h,v,p: 50% 33% 13% 5%
[libx264 @ 0x3350de0] Weighted P-Frames: Y:12.8% UV:6.7%
[libx264 @ 0x3350de0] ref P L0: 72.2% 10.2% 12.0% 5.3% 0.3%
[libx264 @ 0x3350de0] ref B L0: 92.6% 6.1% 1.3%
[libx264 @ 0x3350de0] ref B L1: 95.1% 4.9%
[libx264 @ 0x3350de0] kb/s:1465.93
}}}
--
Ticket URL: <https://trac.ffmpeg.org/ticket/4733>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list