Opened 9 years ago
Last modified 9 years ago
#6756 reopened defect
comfortnoise decoder prints warnings and decodes forever even if given a time limit
| Reported by: | James Cowgill | Owned by: | |
|---|---|---|---|
| Priority: | normal | Component: | undetermined |
| Version: | git-master | Keywords: | |
| Cc: | Blocked By: | ||
| Blocking: | Reproduced by developer: | no | |
| Analyzed by developer: | no |
Description
Summary of the bug:
With ffmpeg 3.4 and git master, trying to decode a nut file encoded with the comfortnoise codec spews warnings everywhere and generates a huge output file (ie many GBs) even though the output is limited to 1 second.
How to reproduce:
$ ffmpeg -f lavfi -i sine=d=10 -c:a comfortnoise -f nut comfortnoise.nut -y $ ffmpeg -i comfortnoise.nut -t 1 -c:v rawvideo -c:a pcm_s32le -f nut /dev/null -y
The warnings are all like this and appear to go on forever (although I killed it once the log file grew to about 1GB):
[nut @ 0x5610e00d14c0] Non-monotonous DTS in output stream 0:0; previous: 699, current: 697; changing to 700. This may result in incorrect timestamps in the output file. [nut @ 0x5610e00d14c0] Non-monotonous DTS in output stream 0:0; previous: 700, current: 697; changing to 701. This may result in incorrect timestamps in the output file. ...
One thing I notice is that trying to play the comfortnoise.nut file with ffplay causes the current timestamp to go wildly all over the place (including into negative time). I'm guessing this is related.
Change History (4)
comment:1 by , 9 years ago
comment:2 by , 9 years ago
| Resolution: | → worksforme |
|---|---|
| Status: | new → closed |
$ ffmpeg -f lavfi -i sine=d=10 -c:a comfortnoise -f nut comfortnoise.nut -y
ffmpeg version N-87875-gf685bbc Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 6.3.0 (GCC)
configuration: --enable-gpl
libavutil 55. 79.100 / 55. 79.100
libavcodec 57.108.100 / 57.108.100
libavformat 57. 84.100 / 57. 84.100
libavdevice 57. 11.100 / 57. 11.100
libavfilter 6.108.100 / 6.108.100
libswscale 4. 9.100 / 4. 9.100
libswresample 2. 10.100 / 2. 10.100
libpostproc 54. 8.100 / 54. 8.100
Input #0, lavfi, from 'sine=d=10':
Duration: N/A, start: 0.000000, bitrate: 705 kb/s
Stream #0:0: Audio: pcm_s16le, 44100 Hz, mono, s16, 705 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (pcm_s16le (native) -> comfortnoise (native))
Press [q] to stop, [?] for help
Output #0, nut, to 'comfortnoise.nut':
Metadata:
encoder : Lavf57.84.100
Stream #0:0: Audio: comfortnoise (3389 / 0x39383333), 44100 Hz, mono, s16, 128 kb/s
Metadata:
encoder : Lavc57.108.100 comfortnoise
[Parsed_sine_0 @ 0x391d4c0] EOF timestamp not reliable
size= 10kB time=00:00:10.01 bitrate= 8.5kbits/s speed= 971x
video:0kB audio:7kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 39.986824%
$ ffmpeg -i comfortnoise.nut -t 1 -c:v rawvideo -c:a pcm_s32le -f nut /dev/null -y
ffmpeg version N-87875-gf685bbc Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 6.3.0 (GCC)
configuration: --enable-gpl
libavutil 55. 79.100 / 55. 79.100
libavcodec 57.108.100 / 57.108.100
libavformat 57. 84.100 / 57. 84.100
libavdevice 57. 11.100 / 57. 11.100
libavfilter 6.108.100 / 6.108.100
libswscale 4. 9.100 / 4. 9.100
libswresample 2. 10.100 / 2. 10.100
libpostproc 54. 8.100 / 54. 8.100
Guessed Channel Layout for Input Stream #0.0 : mono
Input #0, nut, from 'comfortnoise.nut':
Metadata:
encoder : Lavf57.84.100
Duration: 00:00:10.00, start: 0.000000, bitrate: 8 kb/s
Stream #0:0: Audio: comfortnoise (3389 / 0x39383333), 8000 Hz, mono, s16
Metadata:
encoder : Lavc57.108.100 comfortnoise
Stream mapping:
Stream #0:0 -> #0:0 (comfortnoise (native) -> pcm_s32le (native))
Press [q] to stop, [?] for help
Output #0, nut, to '/dev/null':
Metadata:
encoder : Lavf57.84.100
Stream #0:0: Audio: pcm_s32le (PSD / 0x20445350), 8000 Hz, mono, s32, 256 kb/s
Metadata:
encoder : Lavc57.108.100 pcm_s32le
size= 163kB time=00:00:01.00 bitrate=1334.6kbits/s speed= 491x
video:0kB audio:162kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.425596%
comment:3 by , 9 years ago
Sorry, I copied the wrong command. It should be this:
$ ffmpeg -f lavfi -i sine=d=0.1 -c:a comfortnoise -f nut comfortnoise.nut -y $ ffmpeg -i comfortnoise.nut -t 1 -c:v rawvideo -c:a pcm_s32le -f nut /dev/null -y
ie "sine=d=0.1" instead of "sine=d=10"
comment:4 by , 9 years ago
| Resolution: | worksforme |
|---|---|
| Status: | closed → reopened |



Managed to bisect to this commit (first bad commit):
commit 061a0c14bb5767bca72e3a7227ca400de439ba09
Author: Anton Khirnov <anton@khirnov.net>
Date: Wed Oct 26 13:59:15 2016 +0200