Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#1171 closed defect (wontfix)

h264 to VP8: "non monotonically increasing dts" with 2 pass and vp8flags altref

Reported by: temporary Owned by:
Priority: normal Component: undetermined
Version: git-master Keywords: webm libvpx
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

vopts="-c:v libvpx -vp8flags altref -rc_lookahead 5"
ffmpeg -pass 1 -i testv.mkv -f rawvideo $vopts -y /dev/null
ffmpeg -pass 2 -i testv.mkv $vopts -y testout.mkv
ffmpeg version git-2012-04-05-c99bdd5 Copyright (c) 2000-2012 the FFmpeg developers
  built on Apr  5 2012 17:19:33 with gcc 4.6.3
  configuration: --prefix=/usr --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-postproc --enable-x11grab --enable-shared
  libavutil      51. 44.100 / 51. 44.100
  libavcodec     54. 12.100 / 54. 12.100
  libavformat    54.  3.100 / 54.  3.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 66.101 /  2. 66.101
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 10.100 /  0. 10.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, matroska,webm, from 'testv.mkv':
  Metadata:
    AACAOT          : 2
    AUDIOCHANNELS   : 2
    AVCLEVEL        : 32
    AVCPROFILE      : 77
    MOOVPOSITION    : 28
    VIDEOFRAMERATE  : 25
    ENCODER         : Lavf54.3.100
  Duration: 00:00:01.04, start: 0.000000, bitrate: 2331 kb/s
    Stream #0:0: Video: h264 (Main), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1k fps, 25 tbr, 1k tbn, 50 tbc (default)
[buffer @ 0x2639d40] w:1280 h:720 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param:flags=2
[libvpx @ 0x26403e0] v1.0.0
Output #0, rawvideo, to '/dev/null':
  Metadata:
    AACAOT          : 2
    AUDIOCHANNELS   : 2
    AVCLEVEL        : 32
    AVCPROFILE      : 77
    MOOVPOSITION    : 28
    VIDEOFRAMERATE  : 25
    encoder         : Lavf54.3.100
    Stream #0:0: Video: vp8, yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, pass 1, 200 kb/s, 90k tbn, 25 tbc (default)
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libvpx)
Press [q] to stop, [?] for help
frame=   12 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=   0.0kbits/sframe=   26 fps= 20 q=0.0 Lsize=       0kB time=00:00:00.00 bitrate=   0.0kbits/s dup=1 drop=0    
video:0kB audio:0kB global headers:0kB muxing overhead -nan%
Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)
ffmpeg version git-2012-04-05-c99bdd5 Copyright (c) 2000-2012 the FFmpeg developers
  built on Apr  5 2012 17:19:33 with gcc 4.6.3
  configuration: --prefix=/usr --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-postproc --enable-x11grab --enable-shared
  libavutil      51. 44.100 / 51. 44.100
  libavcodec     54. 12.100 / 54. 12.100
  libavformat    54.  3.100 / 54.  3.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 66.101 /  2. 66.101
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 10.100 /  0. 10.100
  libpostproc    52.  0.100 / 52.  0.100
Input #0, matroska,webm, from 'testv.mkv':
  Metadata:
    AACAOT          : 2
    AUDIOCHANNELS   : 2
    AVCLEVEL        : 32
    AVCPROFILE      : 77
    MOOVPOSITION    : 28
    VIDEOFRAMERATE  : 25
    ENCODER         : Lavf54.3.100
  Duration: 00:00:01.04, start: 0.000000, bitrate: 2331 kb/s
    Stream #0:0: Video: h264 (Main), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1k fps, 25 tbr, 1k tbn, 50 tbc (default)
[buffer @ 0x1af4d40] w:1280 h:720 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param:flags=2
[libvpx @ 0x1afb3e0] v1.0.0
Output #0, matroska, to 'testout.mkv':
  Metadata:
    AACAOT          : 2
    AUDIOCHANNELS   : 2
    AVCLEVEL        : 32
    AVCPROFILE      : 77
    MOOVPOSITION    : 28
    VIDEOFRAMERATE  : 25
    encoder         : Lavf54.3.100
    Stream #0:0: Video: vp8, yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, pass 2, 200 kb/s, 1k tbn, 25 tbc (default)
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libvpx)
Press [q] to stop, [?] for help
[matroska @ 0x1afaca0] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 80 >= 80
av_interleaved_write_frame(): Invalid argument

I get no error in 1 pass mode, when I remove "-vp8flags altref", or with "-rc_lookahead" < 5.

The source file was in flv format and was converted to mkv with ffmpeg (a simple copy), but the error also happens with the source flv.

Attachments (1)

testv.mkv (295.9 KB) - added by temporary 5 years ago.

Download all attachments as: .zip

Change History (7)

Changed 5 years ago by temporary

comment:1 Changed 5 years ago by temporary

I forgot: this is with libvpx 1.0.0

comment:2 Changed 5 years ago by reimar

Despite several people (including me) pointing out the issues, VP8 went with this idiotic design for altref.
This means that you can't really mux stuff encoded with altref in any other format that webm without creating invalid files.
So either
1) do not use altref
2) use webm as container

comment:3 Changed 5 years ago by temporary

Thanks but I haven’t been able to find any explanation about this invalid mkv files problem on the web. I thought webm was supposed to be a subset of mkv? Also I have already encoded such a file and it was playable by VLC and mplayer.

However I can confirm that changing “testout.mkv” to “testout.webm” does remove the error!

Version 0, edited 5 years ago by temporary (next)

comment:4 Changed 5 years ago by cehoyos

  • Keywords webm libvpx added
  • Resolution set to wontfix
  • Status changed from new to closed

Afaiu, this is not a bug in FFmpeg, if somebody disagrees, please reopen the ticket.

comment:5 Changed 5 years ago by temporary

Shouldn’t ffmpeg at least provide a more understandable error message, such as “altref requires webm output format (and 2 pass)”?

comment:6 Changed 5 years ago by reimar

First about matroska: it is possible altref is supported in that too, but if so it is a rather new feature and might break things on older players.
Worse, at least so far it is not possible to enable that feature only for VP8, so that might lead to silently creating broken files.
A better error message would be nice, but I do not know how to reliably detect that situation, the error message can be caused by altref but it can be an FFmpeg bug just as well.

Note: See TracTickets for help on using tickets.