[FFmpeg-trac] #9824(undetermined:new): Trimming mp3 using start time+copy makes audio stutter in VLC

FFmpeg trac at avcodec.org
Thu Jul 7 14:15:28 EEST 2022


#9824: Trimming mp3 using start time+copy makes audio stutter in VLC
-------------------------------------+-------------------------------------
             Reporter:  undone       |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:               |                  Version:
  undetermined                       |  unspecified
             Keywords:               |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 I was trying to remove the first couple of seconds of an mp3-file using
 ffmpeg without re-encoding the audio when I noticed it will start
 stuttering on playback in VLC.

 This could be an issue in VLC too, but I can't find a way to trim
 mp3-audio (using copy) that doesn't create this issue when playback in
 VLC.

 - It doesn't happen when the mp3-file is encoded by ffmpeg / lame.
 - It also happens when setting the starttime to 00:00:00.000 (as long as
 it's not before -i).

 Video example: https://undone.se/misc/chirp_vlc_video.mp4

 == How to reproduce:
 {{{
 ffmpeg -i chirp.wav -codec:a libmp3lame -qscale:a 0 chirp_ffmpeg_1.mp3
 ffmpeg -i chirp_ffmpeg_1.mp3 -ss 00:00:00.000 -codec:a copy
 chirp_ffmpeg_2.mp3
 }}}

 Wav-file: https://undone.se/misc/chirp.wav (source material doesn't seem
 to matter)

 '''ffmpeg''' was built today (2022-07-07). '''VLC''' is VLC media player
 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2) with default configuration
 (playlist view enabled in video)

 == Console output:

 {{{
 $ ffmpeg -v 9 -loglevel 99 -i chirp.wav -codec:a libmp3lame -qscale:a 0
 chirp_ffmpeg_1.mp3
 ffmpeg version N-107317-g85bc6b5abf Copyright (c) 2000-2022 the FFmpeg
 developers
   built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
   configuration: --prefix=/home/undone/ffmpeg_build --pkg-config-
 flags=--static --extra-cflags=-I/home/undone/ffmpeg_build/include --extra-
 ldflags=-L/home/undone/ffmpeg_build/lib --extra-libs='-lpthread -lm'
 --bindir=/home/undone/bin --enable-gpl --enable-gnutls --enable-libass
 --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-
 libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-
 libx265 --enable-nonfree --enable-libpulse
   libavutil      57. 27.100 / 57. 27.100
   libavcodec     59. 36.100 / 59. 36.100
   libavformat    59. 26.100 / 59. 26.100
   libavdevice    59.  6.100 / 59.  6.100
   libavfilter     8. 41.100 /  8. 41.100
   libswscale      6.  6.100 /  6.  6.100
   libswresample   4.  6.100 /  4.  6.100
   libpostproc    56.  5.100 / 56.  5.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 'chirp.wav'.
 Reading option '-codec:a' ... matched as option 'codec' (codec name) with
 argument 'libmp3lame'.
 Reading option '-qscale:a' ... matched as option 'qscale' (use fixed
 quality scale (VBR)) with argument '0'.
 Reading option 'chirp_ffmpeg_1.mp3' ... matched as output url.
 Finished splitting the commandline.
 Parsing a group of options: global .
 Applying option v (set logging level) with argument 9.
 Successfully parsed a group of options.
 Parsing a group of options: input url chirp.wav.
 Successfully parsed a group of options.
 Opening an input file: chirp.wav.
 [NULL @ 0x556051683800] Opening 'chirp.wav' for reading
 [file @ 0x556051683fc0] Setting default whitelist 'file,crypto,data'
 Probing wav score:99 size:2048
 [wav @ 0x556051683800] Format wav probed with size=2048 and score=99
 [wav @ 0x556051683800] Before avformat_find_stream_info() pos: 44 bytes
 read:65580 seeks:1 nb_streams:1
 [wav @ 0x556051683800] probing stream 0 pp:32
 [wav @ 0x556051683800] probing stream 0 pp:31
 [wav @ 0x556051683800] probing stream 0 pp:30
 [wav @ 0x556051683800] probing stream 0 pp:29
 [wav @ 0x556051683800] probing stream 0 pp:28
 [wav @ 0x556051683800] probing stream 0 pp:27
 [wav @ 0x556051683800] probing stream 0 pp:26
 [wav @ 0x556051683800] probing stream 0 pp:25
 [wav @ 0x556051683800] probing stream 0 pp:24
 [wav @ 0x556051683800] probing stream 0 pp:23
 [wav @ 0x556051683800] probing stream 0 pp:22
 [wav @ 0x556051683800] probing stream 0 pp:21
 [wav @ 0x556051683800] probing stream 0 pp:20
 [wav @ 0x556051683800] probing stream 0 pp:19
 [wav @ 0x556051683800] probing stream 0 pp:18
 [wav @ 0x556051683800] probing stream 0 pp:17
 [wav @ 0x556051683800] probing stream 0 pp:16
 [wav @ 0x556051683800] probing stream 0 pp:15
 [wav @ 0x556051683800] probing stream 0 pp:14
 [wav @ 0x556051683800] probing stream 0 pp:13
 [wav @ 0x556051683800] probing stream 0 pp:12
 [wav @ 0x556051683800] probing stream 0 pp:11
 [wav @ 0x556051683800] probing stream 0 pp:10
 [wav @ 0x556051683800] probing stream 0 pp:9
 [wav @ 0x556051683800] probing stream 0 pp:8
 [wav @ 0x556051683800] probing stream 0 pp:7
 [wav @ 0x556051683800] probing stream 0 pp:6
 [wav @ 0x556051683800] probing stream 0 pp:5
 [wav @ 0x556051683800] probing stream 0 pp:4
 [wav @ 0x556051683800] probing stream 0 pp:3
 [wav @ 0x556051683800] probing stream 0 pp:2
 [wav @ 0x556051683800] probing stream 0 pp:1
 [wav @ 0x556051683800] probed stream 0
 [wav @ 0x556051683800] parser not found for codec pcm_s16le, packets or
 times may be invalid.
 [wav @ 0x556051683800] All info found
 [wav @ 0x556051683800] stream 0: start_time: NOPTS duration: 3
 [wav @ 0x556051683800] format: start_time: NOPTS duration: 3 (estimate
 from stream) bitrate=705 kb/s
 [wav @ 0x556051683800] After avformat_find_stream_info() pos: 204844 bytes
 read:294956 seeks:1 frames:50
 Guessed Channel Layout for Input Stream #0.0 : mono
 Input #0, wav, from 'chirp.wav':
   Duration: 00:00:03.00, bitrate: 705 kb/s
   Stream #0:0, 50, 1/44100: Audio: pcm_s16le ([1][0][0][0] / 0x0001),
 44100 Hz, mono, s16, 705 kb/s
 Successfully opened the file.
 Parsing a group of options: output url chirp_ffmpeg_1.mp3.
 Applying option codec:a (codec name) with argument libmp3lame.
 Applying option qscale:a (use fixed quality scale (VBR)) with argument 0.
 Successfully parsed a group of options.
 Opening an output file: chirp_ffmpeg_1.mp3.
 [file @ 0x5560516ce780] Setting default whitelist 'file,crypto,data'
 Successfully opened the file.
 Stream mapping:
   Stream #0:0 -> #0:0 (pcm_s16le (native) -> mp3 (libmp3lame))
 Press [q] to stop, [?] for help
 cur_dts is invalid st:0 (0) [init:0 i_done:0 finish:0] (this is harmless
 if it occurs once at the start per stream)
 detected 8 logical cores
 [graph_0_in_0_0 @ 0x5560516d1c80] Setting 'time_base' to value '1/44100'
 [graph_0_in_0_0 @ 0x5560516d1c80] Setting 'sample_rate' to value '44100'
 [graph_0_in_0_0 @ 0x5560516d1c80] Setting 'sample_fmt' to value 's16'
 [graph_0_in_0_0 @ 0x5560516d1c80] Setting 'channel_layout' to value 'mono'
 [graph_0_in_0_0 @ 0x5560516d1c80] tb:1/44100 samplefmt:s16
 samplerate:44100 chlayout:mono
 [format_out_0_0 @ 0x5560516d2e40] Setting 'sample_fmts' to value
 's32p|fltp|s16p'
 [format_out_0_0 @ 0x5560516d2e40] Setting 'sample_rates' to value
 '44100|48000|32000|22050|24000|16000|11025|12000|8000'
 [format_out_0_0 @ 0x5560516d2e40] Setting 'channel_layouts' to value
 'mono|stereo'
 [format_out_0_0 @ 0x5560516d2e40] auto-inserting filter 'auto_aresample_0'
 between the filter 'Parsed_anull_0' and the filter 'format_out_0_0'
 [AVFilterGraph @ 0x5560516978c0] query_formats: 4 queried, 6 merged, 3
 already done, 0 delayed
 [auto_aresample_0 @ 0x5560516d4800] picking s16p out of 3 ref:s16
 [auto_aresample_0 @ 0x5560516d4800] [SWR @ 0x5560516d4980] Using s16p
 internally between filters
 [auto_aresample_0 @ 0x5560516d4800] ch:1 chl:mono fmt:s16 r:44100Hz ->
 ch:1 chl:mono fmt:s16p r:44100Hz
 Output #0, mp3, to 'chirp_ffmpeg_1.mp3':
   Metadata:
     TSSE            : Lavf59.26.100
   Stream #0:0, 0, 1/44100: Audio: mp3, 44100 Hz, mono, s16p, delay 1105
     Metadata:
       encoder         : Lavc59.36.100 libmp3lame
 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)
     Last message repeated 1 times
 [out_0_0 @ 0x5560516d2a80] EOF on sink link out_0_0:default.
 No more output streams to write to, finishing.
 [libmp3lame @ 0x5560516cd3c0] Trying to remove 227 more samples than there
 are in the queue
 size=      37kB time=00:00:03.00 bitrate= 100.2kbits/s speed= 150x
 video:0kB audio:37kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 0.606903%
 Input file #0 (chirp.wav):
   Input stream #0:0 (audio): 65 packets read (264600 bytes); 65 frames
 decoded (132300 samples);
   Total: 65 packets (264600 bytes) demuxed
 Output file #0 (chirp_ffmpeg_1.mp3):
   Output stream #0:0 (audio): 115 frames encoded (132300 samples); 116
 packets muxed (37403 bytes);
   Total: 116 packets (37403 bytes) muxed
 [AVIOContext @ 0x5560516ceb00] Statistics: 37630 bytes written, 0 seeks, 1
 writeouts
 65 frames successfully decoded, 0 decoding errors
 [AVIOContext @ 0x55605168c3c0] Statistics: 330180 bytes read, 1 seeks


 $ ffmpeg -v 9 -loglevel 99 -i chirp_ffmpeg_1.mp3 -ss 00:00:00.000 -codec:a
 copy chirp_ffmpeg_2.mp3
 ffmpeg version N-107317-g85bc6b5abf Copyright (c) 2000-2022 the FFmpeg
 developers
   built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
   configuration: --prefix=/home/undone/ffmpeg_build --pkg-config-
 flags=--static --extra-cflags=-I/home/undone/ffmpeg_build/include --extra-
 ldflags=-L/home/undone/ffmpeg_build/lib --extra-libs='-lpthread -lm'
 --bindir=/home/undone/bin --enable-gpl --enable-gnutls --enable-libass
 --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-
 libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-
 libx265 --enable-nonfree --enable-libpulse
   libavutil      57. 27.100 / 57. 27.100
   libavcodec     59. 36.100 / 59. 36.100
   libavformat    59. 26.100 / 59. 26.100
   libavdevice    59.  6.100 / 59.  6.100
   libavfilter     8. 41.100 /  8. 41.100
   libswscale      6.  6.100 /  6.  6.100
   libswresample   4.  6.100 /  4.  6.100
   libpostproc    56.  5.100 / 56.  5.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
 'chirp_ffmpeg_1.mp3'.
 Reading option '-ss' ... matched as option 'ss' (set the start time
 offset) with argument '00:00:00.000'.
 Reading option '-codec:a' ... matched as option 'codec' (codec name) with
 argument 'copy'.
 Reading option 'chirp_ffmpeg_2.mp3' ... matched as output url.
 Finished splitting the commandline.
 Parsing a group of options: global .
 Applying option v (set logging level) with argument 9.
 Successfully parsed a group of options.
 Parsing a group of options: input url chirp_ffmpeg_1.mp3.
 Successfully parsed a group of options.
 Opening an input file: chirp_ffmpeg_1.mp3.
 [NULL @ 0x55ec83eef800] Opening 'chirp_ffmpeg_1.mp3' for reading
 [file @ 0x55ec83eeffc0] Setting default whitelist 'file,crypto,data'
 Probing mp3 score:25 size:2003
 Probing mp3 score:51 size:4051
 [mp3 @ 0x55ec83eef800] Format mp3 probed with size=4096 and score=51
 id3v2 ver:4 flags:00 len:35
 [mp3 @ 0x55ec83eef800] pad 576 756
 [mp3 @ 0x55ec83eef800] Skipping 0 bytes of junk at 227.
 [mp3 @ 0x55ec83eef800] Before avformat_find_stream_info() pos: 227 bytes
 read:32768 seeks:0 nb_streams:1
 [mp3 @ 0x55ec83eef800] demuxer injecting skip 1105 / discard 0
 [mp3float @ 0x55ec83ef0f80] skip 1105 / discard 0 samples due to side data
 [mp3float @ 0x55ec83ef0f80] skip 1105/1152 samples
 [mp3 @ 0x55ec83eef800] All info found
 [mp3 @ 0x55ec83eef800] stream 0: start_time: 0.0250567 duration: 3.0302
 [mp3 @ 0x55ec83eef800] format: start_time: 0.025057 duration: 3.0302
 (estimate from stream) bitrate=99 kb/s
 [mp3 @ 0x55ec83eef800] After avformat_find_stream_info() pos: 17635 bytes
 read:32768 seeks:0 frames:50
 Input #0, mp3, from 'chirp_ffmpeg_1.mp3':
   Metadata:
     encoder         : Lavf59.26.100
   Duration: 00:00:03.03, start: 0.025057, bitrate: 99 kb/s
   Stream #0:0, 50, 1/14112000: Audio: mp3, 44100 Hz, mono, fltp, 99 kb/s
 Successfully opened the file.
 Parsing a group of options: output url chirp_ffmpeg_2.mp3.
 Applying option ss (set the start time offset) with argument 00:00:00.000.
 Applying option codec:a (codec name) with argument copy.
 Successfully parsed a group of options.
 Opening an output file: chirp_ffmpeg_2.mp3.
 [file @ 0x55ec83f02240] Setting default whitelist 'file,crypto,data'
 Successfully opened the file.
 Output #0, mp3, to 'chirp_ffmpeg_2.mp3':
   Metadata:
     TSSE            : Lavf59.26.100
   Stream #0:0, 0, 1/14112000: Audio: mp3, 44100 Hz, mono, fltp, 99 kb/s
 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)
 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)
 [mp3 @ 0x55ec83eef800] demuxer injecting skip 0 / discard 227
 No more output streams to write to, finishing.
 size=      36kB time=00:00:03.00 bitrate=  98.3kbits/s speed=8.1e+03x
 video:0kB audio:36kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 0.978998%
 Input file #0 (chirp_ffmpeg_1.mp3):
   Input stream #0:0 (audio): 116 packets read (37403 bytes);
   Total: 116 packets (37403 bytes) demuxed
 Output file #0 (chirp_ffmpeg_2.mp3):
   Output stream #0:0 (audio): 115 packets muxed (36568 bytes);
   Total: 115 packets (36568 bytes) muxed
 [AVIOContext @ 0x55ec83f02400] Statistics: 36926 bytes written, 0 seeks, 1
 writeouts
 0 frames successfully decoded, 0 decoding errors
 [AVIOContext @ 0x55ec83ef83c0] Statistics: 37630 bytes read, 0 seeks
 }}}
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/9824>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list