I confirmed your latest patch fixes the issue and is working as expected now.
Thank you! Aman On Sat, Sep 10, 2016 at 7:00 AM, Steven Liu <lingjiujia...@gmail.com> wrote: > > Steven Liu <lingjiujia...@gmail.com>于2016年9月9日 周五下午7:59写道: > >> 2016-09-09 16:33 GMT+08:00 Steven Liu <lingjiujia...@gmail.com>: >> >>> >>> >>> 2016-09-09 16:10 GMT+08:00 Steven Liu <lingjiujia...@gmail.com>: >>> >>>> >>>> >>>> 2016-09-09 15:33 GMT+08:00 Steven Liu <lingjiujia...@gmail.com>: >>>> >>>>> >>>>> >>>>> 2016-09-09 15:28 GMT+08:00 Aman Gupta <a...@tmm1.net>: >>>>> >>>>>> I tried your patch and TARGETDURATION is fixed, but it is still >>>>>> creating some segments which are only 0.2s instead of 2s. >>>>>> >>>>>> Aman >>>>>> >>>>>> On Thu, Sep 8, 2016 at 8:14 PM, Steven Liu <lingjiujia...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> This patch can merge with 1da00be009aa74400042bf470b9a5ffbd82a1c5e >>>>>>> i have checked this modify: >>>>>>> >>>>>>> ./ffmpeg -i ~/facebook.mp4 -c copy -f segment -segment_time 2 >>>>>>> -output_ts_offset 80 -segment_list output-test.m3u8 -v debug >>>>>>> output-test-%03d.ts >>>>>>> >>>>>>> #EXTM3U >>>>>>> #EXT-X-VERSION:3 >>>>>>> #EXT-X-MEDIA-SEQUENCE:0 >>>>>>> #EXT-X-ALLOW-CACHE:YES >>>>>>> #EXT-X-TARGETDURATION:10 >>>>>>> #EXTINF:4.120000, >>>>>>> output-test-000.ts >>>>>>> #EXTINF:7.840000, >>>>>>> output-test-001.ts >>>>>>> #EXTINF:4.200000, >>>>>>> output-test-002.ts >>>>>>> #EXTINF:2.920000, >>>>>>> output-test-003.ts >>>>>>> #EXTINF:1.840000, >>>>>>> output-test-004.ts >>>>>>> #EXTINF:2.240000, >>>>>>> output-test-005.ts >>>>>>> #EXTINF:2.000000, >>>>>>> output-test-006.ts >>>>>>> #EXTINF:3.560000, >>>>>>> >>>>>>> >>>>>>> [root@localhost linux]# ffmpeg -i output-test.m3u8 >>>>>>> ffmpeg version N-80917-ga1a240b Copyright (c) 2000-2016 the FFmpeg >>>>>>> developers >>>>>>> built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-17) >>>>>>> configuration: --prefix=/usr/ --libdir=/usr/lib64 --enable-libx264 >>>>>>> --enable-libfaac --enable-gpl --enable-nonfree >>>>>>> libavutil 55. 28.100 / 55. 28.100 >>>>>>> libavcodec 57. 48.102 / 57. 48.102 >>>>>>> libavformat 57. 41.100 / 57. 41.100 >>>>>>> libavdevice 57. 0.102 / 57. 0.102 >>>>>>> libavfilter 6. 47.100 / 6. 47.100 >>>>>>> libswscale 4. 1.100 / 4. 1.100 >>>>>>> libswresample 2. 1.100 / 2. 1.100 >>>>>>> libpostproc 54. 0.100 / 54. 0.100 >>>>>>> Input #0, hls,applehttp, from 'output-test.m3u8': >>>>>>> Duration: 00:03:21.04, start: 81.400000, bitrate: 0 kb/s >>>>>>> Program 0 >>>>>>> Metadata: >>>>>>> variant_bitrate : 0 >>>>>>> Stream #0:0: Video: h264 (High) ([27][0][0][0] / 0x001B), >>>>>>> yuv420p, 720x528 [SAR 1:1 DAR 15:11], 25 fps, 25 tbr, 90k tbn, 50 tbc >>>>>>> Stream #0:1: Audio: ac3 ([129][0][0][0] / 0x0081), 48000 Hz, >>>>>>> 5.1(side), fltp, 384 kb/s >>>>>>> At least one output file must be specified >>>>>>> >>>>>>> >>>>>>> >>>>>>> [root@localhost linux]# ffmpeg -i output-test-000.ts -i >>>>>>> output-test-001.ts >>>>>>> ffmpeg version N-80917-ga1a240b Copyright (c) 2000-2016 the FFmpeg >>>>>>> developers >>>>>>> built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-17) >>>>>>> configuration: --prefix=/usr/ --libdir=/usr/lib64 --enable-libx264 >>>>>>> --enable-libfaac --enable-gpl --enable-nonfree >>>>>>> libavutil 55. 28.100 / 55. 28.100 >>>>>>> libavcodec 57. 48.102 / 57. 48.102 >>>>>>> libavformat 57. 41.100 / 57. 41.100 >>>>>>> libavdevice 57. 0.102 / 57. 0.102 >>>>>>> libavfilter 6. 47.100 / 6. 47.100 >>>>>>> libswscale 4. 1.100 / 4. 1.100 >>>>>>> libswresample 2. 1.100 / 2. 1.100 >>>>>>> libpostproc 54. 0.100 / 54. 0.100 >>>>>>> Input #0, mpegts, from 'output-test-000.ts': >>>>>>> Duration: 00:00:04.12, start: 81.400000, bitrate: 1299 kb/s >>>>>>> Program 1 >>>>>>> Metadata: >>>>>>> service_name : Service01 >>>>>>> service_provider: FFmpeg >>>>>>> Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), >>>>>>> yuv420p, 720x528 [SAR 1:1 DAR 15:11], 25 fps, 25 tbr, 90k tbn, 50 tbc >>>>>>> Stream #0:1[0x101](und): Audio: ac3 ([129][0][0][0] / 0x0081), >>>>>>> 48000 Hz, 5.1(side), fltp, 384 kb/s >>>>>>> Input #1, mpegts, from 'output-test-001.ts': >>>>>>> Duration: 00:00:07.90, start: 85.464000, bitrate: 1679 kb/s >>>>>>> Program 1 >>>>>>> Metadata: >>>>>>> service_name : Service01 >>>>>>> service_provider: FFmpeg >>>>>>> Stream #1:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), >>>>>>> yuv420p, 720x528 [SAR 1:1 DAR 15:11], 25 fps, 25 tbr, 90k tbn, 50 tbc >>>>>>> Stream #1:1[0x101](und): Audio: ac3 ([129][0][0][0] / 0x0081), >>>>>>> 48000 Hz, 5.1(side), fltp, 384 kb/s >>>>>>> At least one output file must be specified >>>>>>> [root@localhost linux]# >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> this commit is used for fix commit 1da00be009aa74400042bf470b9a5f >>>>>>> fbd82a1c5e >>>>>>> because the option initial_offset will deprecated >>>>>>> >>>>>>> Signed-off-by: Steven Liu <lingjiujia...@gmail.com> >>>>>>> --- >>>>>>> libavformat/segment.c | 5 +++++ >>>>>>> 1 files changed, 5 insertions(+), 0 deletions(-) >>>>>>> >>>>>>> diff --git a/libavformat/segment.c b/libavformat/segment.c >>>>>>> index 33a5cf0..252f8b1 100644 >>>>>>> --- a/libavformat/segment.c >>>>>>> +++ b/libavformat/segment.c >>>>>>> @@ -885,6 +885,11 @@ calc_times: >>>>>>> av_log(s, AV_LOG_VERBOSE, "segment:'%s' starts with packet >>>>>>> stream:%d pts:%s pts_time:%s frame:%d\n", >>>>>>> seg->avf->filename, pkt->stream_index, >>>>>>> av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, >>>>>>> &st->time_base), seg->frame_count); >>>>>>> + seg->cut_pending = 0; >>>>>>> + seg->cur_entry.index = seg->segment_idx + >>>>>>> seg->segment_idx_wrap * seg->segment_idx_wrap_nb; >>>>>>> + seg->cur_entry.start_time = (double)pkt->pts * >>>>>>> av_q2d(st->time_base); >>>>>>> + seg->cur_entry.start_pts = av_rescale_q(pkt->pts, >>>>>>> st->time_base, AV_TIME_BASE_Q); >>>>>>> + seg->cur_entry.end_time = seg->cur_entry.start_time; >>>>>>> } >>>>>>> >>>>>>> av_log(s, AV_LOG_DEBUG, "stream:%d start_pts_time:%s pts:%s >>>>>>> pts_time:%s dts:%s dts_time:%s", >>>>>>> -- >>>>>>> 1.7.1 >>>>>>> >>>>>> >>>>>> ok, let me try your command line >>>>> >>>>> >>>> ...... >>>> it's reproduced when encode by default(video:mpeg2video audio: mp2) >>>> >>>> Ha, interesting, >>> /ffmpeg -ss 20 -i ~/Movies/objectC/facebook.mp4 -g 50 -f segment >>> -segment_time 2 -segment_start_number 10 -output_ts_offset 40 >>> -segment_list output-test.m3u8 -v debug output-test-%03d.ts >>> >>> no problem >>> >>> ./ffmpeg -ss 20 -i ~/Movies/objectC/facebook.mp4 -c:v mpeg2video -g 50 >>> -f segment -segment_time 2 -segment_start_number 10 -output_ts_offset 40 >>> -segment_list output-test.m3u8 -v debug output-test-%03d.ts >>> >>> no problem >>> >>> ./ffmpeg -ss 20 -i ~/Movies/objectC/facebook.mp4 -c:v libx264 -g 50 -f >>> segment -segment_time 2 -segment_start_number 10 -output_ts_offset 40 >>> -segment_list output-test.m3u8 -v debug output-test-%03d.ts >>> >>> no problem >>> >>> >>> ./ffmpeg -ss 20 -i ~/Movies/objectC/facebook.mp4 -c copy -f segment >>> -segment_time 2 -segment_start_number 10 -output_ts_offset 40 >>> -segment_list output-test.m3u8 -v debug output-test-%03d.ts >>> >>> no problem >>> >>> >>> ./ffmpeg -ss 20 -i ~/Movies/objectC/facebook.mp4 -f segment >>> -segment_time 2 -segment_start_number 10 -output_ts_offset 40 >>> -segment_list output-test.m3u8 -v debug output-test-%03d.ts >>> >>> reproduced >>> >>> >>> >> patch update, no problem now. >> >> ./ffmpeg -ss 40 -i ~/Movies/objectC/facebook.mp4 -f segment >> -segment_time 2 -output_ts_offset 40 -segment_list output-test.m3u8 >> -segment_start_number 10 -t 12 output-test-%03d.ts >> >> no problem >> >> #EXTM3U >> #EXT-X-VERSION:3 >> #EXT-X-MEDIA-SEQUENCE:10 >> #EXT-X-ALLOW-CACHE:YES >> #EXT-X-TARGETDURATION:3 >> #EXTINF:2.400000, >> output-test-010.ts >> #EXTINF:2.040000, >> output-test-011.ts >> #EXTINF:1.920000, >> output-test-012.ts >> #EXTINF:1.920000, >> output-test-013.ts >> #EXTINF:1.920000, >> output-test-014.ts >> #EXTINF:1.800000, >> output-test-015.ts >> #EXT-X-ENDLIST >> >> >> >> this commit is used for fix commit 1da00be009aa74400042bf470b9a5f >> fbd82a1c5e >> because the option initial_offset will deprecated >> >> Signed-off-by: Steven Liu <lingjiujia...@gmail.com> >> --- >> libavformat/segment.c | 12 +++++++++++- >> 1 file changed, 11 insertions(+), 1 deletion(-) >> >> diff --git a/libavformat/segment.c b/libavformat/segment.c >> index 33a5cf0..74ffe03 100644 >> --- a/libavformat/segment.c >> +++ b/libavformat/segment.c >> @@ -101,6 +101,7 @@ typedef struct SegmentContext { >> char *times_str; ///< segment times specification string >> int64_t *times; ///< list of segment interval specification >> int nb_times; ///< number of elments in the times array >> + int64_t init_time; ///< first segment start time >> >> char *frames_str; ///< segment frame numbers specification >> string >> int *frames; ///< list of frame number specification >> @@ -642,6 +643,7 @@ static int seg_init(AVFormatContext *s) >> int ret; >> int i; >> >> + seg->init_time = 0; >> seg->segment_count = 0; >> if (!seg->write_header_trailer) >> seg->individual_header_trailer = 0; >> @@ -837,7 +839,11 @@ calc_times: >> } >> seg->last_val = wrapped_val; >> } else { >> - end_pts = seg->time * (seg->segment_count + 1); >> + if (seg->init_time == 0) { >> + seg->init_time = av_rescale_q(pkt->pts, st->time_base, >> AV_TIME_BASE_Q); >> + } else { >> + end_pts = seg->time * (seg->segment_count + 1) + >> seg->init_time; >> + } >> } >> } >> >> @@ -885,6 +891,10 @@ calc_times: >> av_log(s, AV_LOG_VERBOSE, "segment:'%s' starts with packet >> stream:%d pts:%s pts_time:%s frame:%d\n", >> seg->avf->filename, pkt->stream_index, >> av_ts2str(pkt->pts), av_ts2timestr(pkt->pts, >> &st->time_base), seg->frame_count); >> + seg->cur_entry.index = seg->segment_idx + seg->segment_idx_wrap >> * seg->segment_idx_wrap_nb; >> + seg->cur_entry.start_time = (double)pkt->pts * >> av_q2d(st->time_base); >> + seg->cur_entry.start_pts = av_rescale_q(pkt->pts, st->time_base, >> AV_TIME_BASE_Q); >> + seg->cur_entry.end_time = seg->cur_entry.start_time; >> } >> >> av_log(s, AV_LOG_DEBUG, "stream:%d start_pts_time:%s pts:%s >> pts_time:%s dts:%s dts_time:%s", >> -- >> 2.7.4 (Apple Git-66) >> >> maybe have a bug, I'll fix it > When use all the output_ts_offset and initial_offset it will wrong result. > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel