Opened 2 years ago
#9824 new defect
Trimming mp3 using start time+copy makes audio stutter in VLC
Reported by: | undone | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | undetermined |
Version: | unspecified | Keywords: | |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
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