[FFmpeg-devel] [PATCH] avformat/segment: fix the duration error of use output_ts_offset

Steven Liu lingjiujianke at gmail.com
Fri Sep 9 06:14:37 EEST 2016


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 at 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 at 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 at localhost linux]#




this commit is used for fix commit 1da00be009aa74400042bf470b9a5ffbd82a1c5e
because the option initial_offset will deprecated

Signed-off-by: Steven Liu <lingjiujianke at 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


More information about the ffmpeg-devel mailing list