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 >>>>>> 1da00be009aa74400042bf470b9a5ffbd82a1c5e >>>>>> 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 1da00be009aa74400042bf470b9a5ffbd82a1c5e > 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