[FFmpeg-trac] #10120(ffmpeg:new): Combining -copyts with segmentation gives unexpected results on opus streams and possibly others
FFmpeg
trac at avcodec.org
Sun Dec 25 22:31:27 EET 2022
#10120: Combining -copyts with segmentation gives unexpected results on opus
streams and possibly others
------------------------------------+--------------------------------------
Reporter: Jarno Suni | Type: defect
Status: new | Priority: normal
Component: ffmpeg | Version: git-master
Keywords: | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
------------------------------------+--------------------------------------
Summary of the bug:
When using -copyts with segmentation, output files do not have the
expected duration and count.
How to reproduce:
{{{
% ffmpeg -v 9 -loglevel 99 -i http://volosatoff.ru:8008/euro.opus -c copy
-copyts -t 25 -f segment -segment_time 10 -reset_timestamps 0 -strftime 0
recording-%05d.opus
ffmpeg version N-109444-geef763c705 Copyright (c) 2000-2022 the FFmpeg
developers
built with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
configuration:
libavutil 57. 43.100 / 57. 43.100
libavcodec 59. 55.103 / 59. 55.103
libavformat 59. 34.102 / 59. 34.102
libavdevice 59. 8.101 / 59. 8.101
libavfilter 8. 53.100 / 8. 53.100
libswscale 6. 8.112 / 6. 8.112
libswresample 4. 9.100 / 4. 9.100
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set logging level) with
argument '9'.
Reading option '-loglevel' ... matched as option 'loglevel' (set logging
level) with argument '99'.
Reading option '-i' ... matched as input url with argument
'http://volosatoff.ru:8008/euro.opus'.
Reading option '-c' ... matched as option 'c' (codec name) with argument
'copy'.
Reading option '-copyts' ... matched as option 'copyts' (copy timestamps)
with argument '1'.
Reading option '-t' ... matched as option 't' (record or transcode
"duration" seconds of audio/video) with argument '25'.
Reading option '-f' ... matched as option 'f' (force format) with argument
'segment'.
Reading option '-segment_time' ... matched as AVOption 'segment_time' with
argument '10'.
Reading option '-reset_timestamps' ... matched as AVOption
'reset_timestamps' with argument '0'.
Reading option '-strftime' ... matched as AVOption 'strftime' with
argument '0'.
Reading option 'recording-%05d.opus' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set logging level) with argument 9.
Applying option copyts (copy timestamps) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input url http://volosatoff.ru:8008/euro.opus.
Successfully parsed a group of options.
Opening an input file: http://volosatoff.ru:8008/euro.opus.
[NULL @ 0x55e3dad746c0] Opening 'http://volosatoff.ru:8008/euro.opus' for
reading
[http @ 0x55e3dad74f80] Setting default whitelist
'http,https,tls,rtp,tcp,udp,crypto,httpproxy,data'
[tcp @ 0x55e3dad77dc0] Original list of addresses:
[tcp @ 0x55e3dad77dc0] Address 93.92.207.107 port 8008
[tcp @ 0x55e3dad77dc0] Interleaved list of addresses:
[tcp @ 0x55e3dad77dc0] Address 93.92.207.107 port 8008
[tcp @ 0x55e3dad77dc0] Starting connection attempt to 93.92.207.107 port
8008
[tcp @ 0x55e3dad77dc0] Successfully connected to 93.92.207.107 port 8008
[http @ 0x55e3dad74f80] request: GET /euro.opus HTTP/1.1
User-Agent: Lavf/59.34.102
Accept: */*
Range: bytes=0-
Connection: close
Host: volosatoff.ru:8008
Icy-MetaData: 1
[http @ 0x55e3dad74f80] header='HTTP/1.0 200 OK'
[http @ 0x55e3dad74f80] http_code=200
[http @ 0x55e3dad74f80] header='Server: Icecast 2.4.4'
[http @ 0x55e3dad74f80] header='Connection: Close'
[http @ 0x55e3dad74f80] header='Date: Sun, 25 Dec 2022 20:05:40 GMT'
[http @ 0x55e3dad74f80] header='Content-Type: audio/ogg'
[http @ 0x55e3dad74f80] header='Cache-Control: no-cache, no-store'
[http @ 0x55e3dad74f80] header='Expires: Mon, 26 Jul 1997 05:00:00 GMT'
[http @ 0x55e3dad74f80] header='Pragma: no-cache'
[http @ 0x55e3dad74f80] header='Access-Control-Allow-Origin: *'
[http @ 0x55e3dad74f80] header='icy-br:128'
[http @ 0x55e3dad74f80] header='icy-description:EuroDance 90s (Opus 128
kbps)'
[http @ 0x55e3dad74f80] header='icy-genre:EuroDance'
[http @ 0x55e3dad74f80] header='icy-name:VOLOSATOE RADIO'
[http @ 0x55e3dad74f80] header='icy-pub:1'
[http @ 0x55e3dad74f80] header='icy-url:http://fm.spb.ru'
[http @ 0x55e3dad74f80] header=''
Probing ogg score:100 size:2048
[ogg @ 0x55e3dad746c0] Format ogg probed with size=2048 and score=100
[ogg @ 0x55e3dad746c0] ogg_packet: curidx=-1
[ogg @ 0x55e3dad746c0] ogg_packet: idx=0 pstart=0 psize=0 segp=0 nsegs=1
[ogg @ 0x55e3dad746c0] ogg_packet: curidx=-1
[ogg @ 0x55e3dad746c0] ogg_packet: idx=0 pstart=19 psize=0 segp=0 nsegs=3
[ogg @ 0x55e3dad746c0] 636 bytes of comment header remain
[ogg @ 0x55e3dad746c0] ogg_packet: curidx=-1
[ogg @ 0x55e3dad746c0] ogg_packet: idx=0 pstart=783 psize=0 segp=0
nsegs=86
[ogg @ 0x55e3dad746c0] found headers
[ogg @ 0x55e3dad746c0] Before avformat_find_stream_info() pos: 14698 bytes
read:14698 seeks:0 nb_streams:1
For transform of length 120, inverse, mdct_float, flags: [aligned,
out_of_place], found 5 matches:
1: mdct_pfa_15xM_inv_float_c - type: mdct_float, len: [30, ∞],
factors[2]: [15, any], flags: [unaligned, out_of_place, inv_only], prio:
304
2: mdct_pfa_5xM_inv_float_c - type: mdct_float, len: [10, ∞],
factors[2]: [5, any], flags: [unaligned, out_of_place, inv_only], prio:
144
3: mdct_pfa_3xM_inv_float_c - type: mdct_float, len: [6, ∞],
factors[2]: [3, any], flags: [unaligned, out_of_place, inv_only], prio:
112
4: mdct_inv_float_c - type: mdct_float, len: [2, ∞], factors[2]: [2,
any], flags: [unaligned, out_of_place, inv_only], prio: 96
5: mdct_naive_inv_float_c - type: mdct_float, len: [2, ∞], factors[2]:
[2, any], flags: [unaligned, out_of_place, inv_only], prio: -130976
For transform of length 4, inverse, fft_float, flags: [aligned, inplace,
preshuf], found 2 matches:
1: fft4_fwd_float_sse2 - type: fft_float, len: 4, factor: 2, flags:
[aligned, inplace, out_of_place, preshuf], prio: 352
2: fft4_ns_float_c - type: fft_float, len: 4, factor: 2, flags:
[unaligned, inplace, out_of_place, preshuf], prio: 96
Transform tree:
mdct_pfa_15xM_inv_float_c - type: mdct_float, len: 120, factors[2]:
[15, any], flags: [unaligned, out_of_place, inv_only]
fft4_fwd_float_sse2 - type: fft_float, len: 4, factor: 2, flags:
[aligned, inplace, out_of_place, preshuf]
For transform of length 240, inverse, mdct_float, flags: [aligned,
out_of_place], found 5 matches:
1: mdct_pfa_15xM_inv_float_c - type: mdct_float, len: [30, ∞],
factors[2]: [15, any], flags: [unaligned, out_of_place, inv_only], prio:
304
2: mdct_pfa_5xM_inv_float_c - type: mdct_float, len: [10, ∞],
factors[2]: [5, any], flags: [unaligned, out_of_place, inv_only], prio:
144
3: mdct_pfa_3xM_inv_float_c - type: mdct_float, len: [6, ∞],
factors[2]: [3, any], flags: [unaligned, out_of_place, inv_only], prio:
112
4: mdct_inv_float_c - type: mdct_float, len: [2, ∞], factors[2]: [2,
any], flags: [unaligned, out_of_place, inv_only], prio: 96
5: mdct_naive_inv_float_c - type: mdct_float, len: [2, ∞], factors[2]:
[2, any], flags: [unaligned, out_of_place, inv_only], prio: -130976
For transform of length 8, inverse, fft_float, flags: [aligned, inplace,
preshuf], found 4 matches:
1: fft8_ns_float_avx - type: fft_float, len: 8, factor: 2, flags:
[aligned, inplace, out_of_place, preshuf], prio: 480
2: fft8_ns_float_sse3 - type: fft_float, len: 8, factor: 2, flags:
[aligned, inplace, out_of_place, preshuf], prio: 352
3: fft_pfa_ns_float_c - type: fft_float, len: [6, ∞], factors[2]: [7,
5, 3, 2, any], flags: [unaligned, inplace, out_of_place, preshuf], prio:
112
4: fft8_ns_float_c - type: fft_float, len: 8, factor: 2, flags:
[unaligned, inplace, out_of_place, preshuf], prio: 96
Transform tree:
mdct_pfa_15xM_inv_float_c - type: mdct_float, len: 240, factors[2]:
[15, any], flags: [unaligned, out_of_place, inv_only]
fft8_ns_float_avx - type: fft_float, len: 8, factor: 2, flags:
[aligned, inplace, out_of_place, preshuf]
For transform of length 480, inverse, mdct_float, flags: [aligned,
out_of_place], found 5 matches:
1: mdct_pfa_15xM_inv_float_c - type: mdct_float, len: [30, ∞],
factors[2]: [15, any], flags: [unaligned, out_of_place, inv_only], prio:
304
2: mdct_pfa_5xM_inv_float_c - type: mdct_float, len: [10, ∞],
factors[2]: [5, any], flags: [unaligned, out_of_place, inv_only], prio:
144
3: mdct_pfa_3xM_inv_float_c - type: mdct_float, len: [6, ∞],
factors[2]: [3, any], flags: [unaligned, out_of_place, inv_only], prio:
112
4: mdct_inv_float_c - type: mdct_float, len: [2, ∞], factors[2]: [2,
any], flags: [unaligned, out_of_place, inv_only], prio: 96
5: mdct_naive_inv_float_c - type: mdct_float, len: [2, ∞], factors[2]:
[2, any], flags: [unaligned, out_of_place, inv_only], prio: -130976
For transform of length 16, inverse, fft_float, flags: [aligned, inplace,
preshuf], found 3 matches:
1: fft16_ns_float_avx - type: fft_float, len: 16, factor: 2, flags:
[aligned, inplace, out_of_place, preshuf], prio: 480
2: fft_pfa_ns_float_c - type: fft_float, len: [6, ∞], factors[2]: [7,
5, 3, 2, any], flags: [unaligned, inplace, out_of_place, preshuf], prio:
112
3: fft16_ns_float_c - type: fft_float, len: 16, factor: 2, flags:
[unaligned, inplace, out_of_place, preshuf], prio: 96
Transform tree:
mdct_pfa_15xM_inv_float_c - type: mdct_float, len: 480, factors[2]:
[15, any], flags: [unaligned, out_of_place, inv_only]
fft16_ns_float_avx - type: fft_float, len: 16, factor: 2, flags:
[aligned, inplace, out_of_place, preshuf]
For transform of length 960, inverse, mdct_float, flags: [aligned,
out_of_place], found 5 matches:
1: mdct_pfa_15xM_inv_float_c - type: mdct_float, len: [30, ∞],
factors[2]: [15, any], flags: [unaligned, out_of_place, inv_only], prio:
304
2: mdct_pfa_5xM_inv_float_c - type: mdct_float, len: [10, ∞],
factors[2]: [5, any], flags: [unaligned, out_of_place, inv_only], prio:
144
3: mdct_pfa_3xM_inv_float_c - type: mdct_float, len: [6, ∞],
factors[2]: [3, any], flags: [unaligned, out_of_place, inv_only], prio:
112
4: mdct_inv_float_c - type: mdct_float, len: [2, ∞], factors[2]: [2,
any], flags: [unaligned, out_of_place, inv_only], prio: 96
5: mdct_naive_inv_float_c - type: mdct_float, len: [2, ∞], factors[2]:
[2, any], flags: [unaligned, out_of_place, inv_only], prio: -130976
For transform of length 32, inverse, fft_float, flags: [aligned, inplace,
preshuf], found 3 matches:
1: fft32_ns_float_avx - type: fft_float, len: 32, factor: 2, flags:
[aligned, inplace, out_of_place, preshuf], prio: 480
2: fft_pfa_ns_float_c - type: fft_float, len: [6, ∞], factors[2]: [7,
5, 3, 2, any], flags: [unaligned, inplace, out_of_place, preshuf], prio:
112
3: fft32_ns_float_c - type: fft_float, len: 32, factor: 2, flags:
[unaligned, inplace, out_of_place, preshuf], prio: 96
Transform tree:
mdct_pfa_15xM_inv_float_c - type: mdct_float, len: 960, factors[2]:
[15, any], flags: [unaligned, out_of_place, inv_only]
fft32_ns_float_avx - type: fft_float, len: 32, factor: 2, flags:
[aligned, inplace, out_of_place, preshuf]
[ogg @ 0x55e3dad746c0] ogg_packet: curidx=0
[ogg @ 0x55e3dad746c0] ogg_packet: idx=0 pstart=783 psize=0 segp=0
nsegs=86
[opus @ 0x55e3dad7a7c0] skip 312 / discard 0 samples due to side data
[opus @ 0x55e3dad7a7c0] skip 312/960 samples
[ogg @ 0x55e3dad746c0] All info found
[ogg @ 0x55e3dad746c0] stream 0: start_time: 1.48417e+07 duration: NOPTS
[ogg @ 0x55e3dad746c0] format: start_time: 1.48417e+07 duration: NOPTS
(estimate from bit rate) bitrate=0 kb/s
[ogg @ 0x55e3dad746c0] After avformat_find_stream_info() pos: 14698 bytes
read:14698 seeks:0 frames:1
Input #0, ogg, from 'http://volosatoff.ru:8008/euro.opus':
Metadata:
icy-br : 128
icy-description : EuroDance 90s (Opus 128 kbps)
icy-genre : EuroDance
icy-name : VOLOSATOE RADIO
icy-pub : 1
icy-url : http://fm.spb.ru
Duration: N/A, start: 14841699.000000, bitrate: N/A
Stream #0:0, 1, 1/48000: Audio: opus, 48000 Hz, stereo, fltp, delay 312
Metadata:
ENCODER : opusenc from opus-tools 0.2-3-gf5f571b
ENCODER_OPTIONS : --bitrate 128
Successfully opened the file.
Parsing a group of options: output url recording-%05d.opus.
Applying option c (codec name) with argument copy.
Applying option t (record or transcode "duration" seconds of audio/video)
with argument 25.
Applying option f (force format) with argument segment.
Successfully parsed a group of options.
Opening an output file: recording-%05d.opus.
Successfully opened the file.
[segment @ 0x55e3dad88dc0] Selected stream id:0 type:audio
[segment @ 0x55e3dad88dc0] Opening 'recording-00000.opus' for writing
[file @ 0x55e3dadd9780] Setting default whitelist 'file,crypto,data'
Output #0, segment, to 'recording-%05d.opus':
Metadata:
icy-br : 128
icy-description : EuroDance 90s (Opus 128 kbps)
icy-genre : EuroDance
icy-name : VOLOSATOE RADIO
icy-pub : 1
icy-url : http://fm.spb.ru
encoder : Lavf59.34.102
Stream #0:0, 0, 1/48000: Audio: opus, 48000 Hz, stereo, fltp, delay 312
Metadata:
ENCODER : opusenc from opus-tools 0.2-3-gf5f571b
ENCODER_OPTIONS : --bitrate 128
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
cur_dts is invalid st:0 (0) [init:1 i_done:0 finish:0] (this is harmless
if it occurs once at the start per stream)
[ogg @ 0x55e3dad746c0] ogg_packet: curidx=0
[ogg @ 0x55e3dad746c0] ogg_packet: idx=0 pstart=1057 psize=0 segp=2
nsegs=86
[ogg @ 0x55e3dad746c0] ogg_packet: curidx=0
[ogg @ 0x55e3dad746c0] ogg_packet: idx=0 pstart=1312 psize=0 segp=4
nsegs=86
No more output streams to write to, finishing. -0.0kbits/s speed=N/A
All streams finished for output file #0
Terminating muxer thread 0
[segment @ 0x55e3dad88dc0] segment:'recording-00000.opus' count:0 ended
[AVIOContext @ 0x55e3dadd0700] Statistics: 343 bytes written, 0 seeks, 1
writeouts
size=N/A time=-577014:32:22.77 bitrate=N/A speed=N/A
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
muxing overhead: unknown
Input file #0 (http://volosatoff.ru:8008/euro.opus):
Input stream #0:0 (audio): 1 packets read (274 bytes);
Total: 1 packets (274 bytes) demuxed
Output file #0 (recording-%05d.opus):
Output stream #0:0 (audio): 0 packets muxed (0 bytes);
Total: 0 packets (0 bytes) muxed
0 frames successfully decoded, 0 decoding errors
Terminating demuxer thread 0
[AVIOContext @ 0x55e3dad8a040] Statistics: 14698 bytes read, 0 seeks
}}}
This will create one small output file that seems to be invalid. Not three
playable files.
If you leave out -t option, the command will produce less than 1kB files
fast, not one in 10s.
If the example stream fails, you could replace it by any other opuse
stream from e.g. https://dir.xiph.org/codecs/Opus
--
Ticket URL: <https://trac.ffmpeg.org/ticket/10120>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list