Opened 5 years ago

Closed 4 years ago

Last modified 4 years ago

#634 closed defect (fixed)

non monotonically increasing dts with v4l2

Reported by: wim Owned by:
Priority: normal Component: undetermined
Version: git-master Keywords: av_interleaved_write_frame v4l2
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

errors when encoding webcam to video file

When using .avi container:

wim@wim-ubuntu:~/croncap$ ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 -vcodec libx264 -preset medium -vprofile baseline blah.avi
ffmpeg version git-2011-11-03-988f585, Copyright (c) 2000-2011 the FFmpeg developers

built on Nov 3 2011 20:03:33 with gcc 4.6.1
configuration: --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab --enable-libvpx
libavutil 51. 23. 0 / 51. 23. 0
libavcodec 53. 27. 0 / 53. 27. 0
libavformat 53. 18. 0 / 53. 18. 0
libavdevice 53. 4. 0 / 53. 4. 0
libavfilter 2. 45. 3 / 2. 45. 3
libswscale 2. 1. 0 / 2. 1. 0
libpostproc 51. 2. 0 / 51. 2. 0

[video4linux2,v4l2 @ 0x1f188c0] Estimating duration from bitrate, this may be inaccurate
Input #0, video4linux2,v4l2, from '/dev/video0':

Duration: N/A, start: 422744.730718, bitrate: 18432 kb/s

Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 320x240, 18432 kb/s, 15 tbr, 1000k tbn, 15 tbc

Incompatible pixel format 'yuyv422' for codec 'libx264', auto-selecting format 'yuv420p'
[buffer @ 0x1f1d060] w:320 h:240 pixfmt:yuyv422 tb:1/1000000 sar:0/1 sws_param:
[buffersink @ 0x1f1d4e0] auto-inserting filter 'auto-inserted scale 0' between the filter 'src' and the filter 'out'
[scale @ 0x1f1dcc0] w:320 h:240 fmt:yuyv422 -> w:320 h:240 fmt:yuv420p flags:0x4
[libx264 @ 0x1f19dc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle? SSE4.1 Cache64
[libx264 @ 0x1f19dc0] profile Constrained Baseline, level 1.2
Output #0, avi, to 'blah.avi':

Metadata:

ISFT : Lavf53.18.0
Stream #0:0: Video: h264 (H264 / 0x34363248), yuv420p, 320x240, q=-1--1, 15 tbn, 15 tbc

Stream mapping:

Stream #0.0 -> #0.0 (rawvideo -> libx264)

Press [q] to stop, ? for help
non-strictly-monotonic PTS.0 size= 1008450kB time=38:51:05.60 bitrate= 59.1kbits/s
non-strictly-monotonic PTS.0 size= 1008451kB time=38:51:06.13 bitrate= 59.1kbits/s
non-strictly-monotonic PTS.0 size= 1008451kB time=38:51:06.66 bitrate= 59.1kbits/s
non-strictly-monotonic PTS.0 size= 1008452kB time=38:51:07.20 bitrate= 59.1kbits/s
[libx264 @ 0x1f19dc0] non-strictly-monotonic PTS
non-strictly-monotonic PTS.0 size= 1008452kB time=38:51:07.73 bitrate= 59.1kbits/s
non-strictly-monotonic PTS.0 size= 1008453kB time=38:51:08.26 bitrate= 59.1kbits/s
non-strictly-monotonic PTS.0 size= 1008453kB time=38:51:08.80 bitrate= 59.1kbits/s
[avi @ 0x1f19600] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 2098034 >= 2098034
av_interleaved_write_frame(): Invalid argument

When using .mkv container:

wim@wim-ubuntu:~/croncap$ ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 -vcodec libx264 -preset medium -vprofile baseline eggs.mkv
ffmpeg version git-2011-11-03-988f585, Copyright (c) 2000-2011 the FFmpeg developers

built on Nov 3 2011 20:03:33 with gcc 4.6.1
configuration: --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-postproc --enable-version3 --enable-x11grab --enable-libvpx
libavutil 51. 23. 0 / 51. 23. 0
libavcodec 53. 27. 0 / 53. 27. 0
libavformat 53. 18. 0 / 53. 18. 0
libavdevice 53. 4. 0 / 53. 4. 0
libavfilter 2. 45. 3 / 2. 45. 3
libswscale 2. 1. 0 / 2. 1. 0
libpostproc 51. 2. 0 / 51. 2. 0

[video4linux2,v4l2 @ 0x164a8c0] Estimating duration from bitrate, this may be inaccurate
Input #0, video4linux2,v4l2, from '/dev/video0':

Duration: N/A, start: 2250.662157, bitrate: 18432 kb/s

Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 320x240, 18432 kb/s, 15 tbr, 1000k tbn, 15 tbc

Incompatible pixel format 'yuyv422' for codec 'libx264', auto-selecting format 'yuv420p'
[buffer @ 0x164a7e0] w:320 h:240 pixfmt:yuyv422 tb:1/1000000 sar:0/1 sws_param:
[buffersink @ 0x164f720] auto-inserting filter 'auto-inserted scale 0' between the filter 'src' and the filter 'out'
[scale @ 0x164ff80] w:320 h:240 fmt:yuyv422 -> w:320 h:240 fmt:yuv420p flags:0x4
[libx264 @ 0x164bf60] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle? SSE4.1 Cache64
[libx264 @ 0x164bf60] profile Constrained Baseline, level 1.2
[libx264 @ 0x164bf60] 264 - core 119 r2106 07efeb4 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=0 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=15 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to 'eggs.mkv':

Metadata:

encoder : Lavf53.18.0
Stream #0:0: Video: h264, yuv420p, 320x240, q=-1--1, 1k tbn, 15 tbc

Stream mapping:

Stream #0.0 -> #0.0 (rawvideo -> libx264)

Press [q] to stop, ? for help
non-strictly-monotonic PTS.0 size= 796312kB time=38:50:38.66 bitrate= 46.6kbits/s
non-strictly-monotonic PTS.0 size= 796312kB time=38:50:39.20 bitrate= 46.6kbits/s
[libx264 @ 0x164bf60] non-strictly-monotonic PTS
non-strictly-monotonic PTS.0 size= 796312kB time=38:50:39.73 bitrate= 46.6kbits/s
non-strictly-monotonic PTS.0 size= 796312kB time=38:50:40.26 bitrate= 46.6kbits/s
non-strictly-monotonic PTS.0 size= 796312kB time=38:50:40.80 bitrate= 46.6kbits/s
[libx264 @ 0x164bf60] non-strictly-monotonic PTS
non-strictly-monotonic PTS.0 size= 796312kB time=38:50:41.33 bitrate= 46.6kbits/s
[matroska @ 0x164b600] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 139841733 >= 139841733
av_interleaved_write_frame(): Invalid argument

Attachments (2)

17.png (146.0 KB) - added by wim 5 years ago.
debug.txt (1.3 MB) - added by blsa 5 years ago.

Download all attachments as: .zip

Change History (16)

comment:1 Changed 5 years ago by cehoyos

  • Keywords av_interleaved_write_frame added
  • Version changed from unspecified to git-master

Is an external library required to reproduce this problem (is the problem also reproducible without -vcodec libx264)?

comment:2 Changed 5 years ago by wim

Which vcodec can I use that will not use external library?

comment:3 Changed 5 years ago by cehoyos

mpeg1video, mpeg2video, mpeg4, msmpeg4, msmpeg4v2, mjpeg, ljpeg, jpegls, ffv1, ffvhuff, flv, snow, svq1, wmv1, wmv2 come to mind (I probably forgot some), but simply omitting "-vcodec libx264 -preset medium -vprofile baseline" is sufficient to let FFmpeg automatically choose a codec suitable for avi (mpeg4 asp).

Changed 5 years ago by wim

comment:4 Changed 5 years ago by wim

I tried it with omitting the stuff, and ffmpeg chooses

Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46)

giving a similar error like:

Error, Invalid timestamp=2098226, last=2098226
Video encoding failed

You can see the rest in the screencap attached above.

comment:5 Changed 5 years ago by cehoyos

  • Keywords v4l2 added

Did your recording really run for more than a day?

Please always post complete, uncut console output as text, please do not attach screen-shots instead (there are cases when this is useful, but they are very rare).

comment:6 follow-up: Changed 5 years ago by wim

Yes, the recording duration is correct. It is recording to ext4 filesystem and plenty of space on disk.

I posted the screenshot because the console output as text might be misleading in this case (see the coloured error line over-writing on the usual ffmpeg stderr chat in black)

comment:7 in reply to: ↑ 6 Changed 5 years ago by cehoyos

Replying to wim:

I posted the screenshot because the console output as text might be misleading in this case (see the coloured error line over-writing on the usual ffmpeg stderr chat in black)

It cannot be misleading, at least not in this case.

comment:8 Changed 5 years ago by cehoyos

  • Status changed from new to open

I was able to trigger a similar error by running an encode for >26 hours.

$ ffmpeg -async 1 -f v4l2 -i /dev/video1 -f alsa -i hw:2 -s 64x64 out.avi
ffmpeg version N-35411-g28a11a6, Copyright (c) 2000-2011 the FFmpeg developers
  built on Dec  3 2011 14:27:33 with gcc 4.5.3
  configuration: --cc=/usr/local/gcc-4.5.3/bin/gcc
  libavutil    51. 29. 1 / 51. 29. 1
  libavcodec   53. 40. 0 / 53. 40. 0
  libavformat  53. 24. 0 / 53. 24. 0
  libavdevice  53.  4. 0 / 53.  4. 0
  libavfilter   2. 50. 0 /  2. 50. 0
  libswscale    2.  1. 0 /  2.  1. 0
[video4linux2,v4l2 @ 0x139f7e0] Estimating duration from bitrate, this may be inaccurate
Input #0, video4linux2,v4l2, from '/dev/video1':
  Duration: N/A, start: 1322924421.201907, bitrate: 132710 kb/s
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 768x576, 132710 kb/s, 25 tbr, 1000k tbn, 25 tbc
[alsa @ 0x139a040] Estimating duration from bitrate, this may be inaccurate
Input #1, alsa, from 'hw:2':
  Duration: N/A, start: 1322924421.195346, bitrate: N/A
    Stream #1:0: Audio: pcm_s16le, 32000 Hz, 2 channels, s16, 1024 kb/s
File 'out.avi' already exists. Overwrite ? [y/N] y
w:768 h:576 pixfmt:yuv420p tb:1/1000000 sar:0/1 sws_param:
[scale @ 0x13a4e00] w:768 h:576 fmt:yuv420p -> w:64 h:64 fmt:yuv420p flags:0x4
Incompatible sample format 's16' for codec 'ac3', auto-selecting format 'flt'
[ac3 @ 0x13a4220] channel_layout not specified
[ac3 @ 0x13a4220] No channel layout specified. The encoder will guess the layout, but it might be incorrect.
Output #0, avi, to 'out.avi':
  Metadata:
    ISFT            : Lavf53.24.0
    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 64x64, q=2-31, 200 kb/s, 25 tbn, 25 tbc
    Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 32000 Hz, stereo, flt, 128 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo -> mpeg4)
  Stream #1:0 -> #0:1 (pcm_s16le -> ac3)
Press [q] to stop, [?] for help
[alsa @ 0x139a040] ALSA buffer xrun.
ALSA buffer xrun.= 25 q=2.0 size= 3314018kB time=26:37:07.29 bitrate= 283.3kbits/s dup=0 drop=453
Error, Invalid timestamp=2399562, last=2399562me=26:39:42.40 bitrate= 283.3kbits/s dup=0 drop=453
Video encoding failed

comment:9 Changed 5 years ago by blsa

I second this issue.

I'm using ffmpeg+ffserver to transfer RTSP stream to FLV stream, played in Flash player.
ffmpeg -rtsp_transport tcp -i rtsp://ipaddress:554 -vcodec copy -an http://127.0.0.1:8010/feed1.ffm

I heard there is higher chance when using -vcodec copy to remux the stream into FLV stream.

Changed 5 years ago by blsa

comment:10 Changed 5 years ago by blsa

I attached a complete log file in the above, which is the output of the following command

ffmpeg -rtsp_transport tcp -i rtsp://10.8.0.2:554 -vcodec copy -an -r 10 http://127.0.0.1:8010/feed1.ffm -loglevel debug 2> debug.txt

Hopefully, someone can look into this.

comment:11 Changed 4 years ago by michael

  • Summary changed from non monotonically increasing dts to non monotonically increasing dts with v4l2

comment:12 Changed 4 years ago by holden

Could somebody still reproduce this by running for example:

ffmpeg -f v4l2 -video_size 320x240 -framerate 10 -i /dev/video0 out.avi

with current git head?

comment:13 Changed 4 years ago by cehoyos

  • Resolution set to fixed
  • Status changed from open to closed

Appears to work fine now.

$ ffmpeg -f v4l2 -video_size 64x48 -framerate 10 -i /dev/video0 out.avi
ffmpeg version N-51435-g24cfe91 Copyright (c) 2000-2013 the FFmpeg developers
  built on Mar 29 2013 06:11:26 with gcc 4.7 (SUSE Linux)
  configuration: --enable-gpl --disable-indev=jack
  libavutil      52. 22.101 / 52. 22.101
  libavcodec     55.  2.100 / 55.  2.100
  libavformat    55.  0.100 / 55.  0.100
  libavdevice    55.  0.100 / 55.  0.100
  libavfilter     3. 48.105 /  3. 48.105
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
[video4linux2,v4l2 @ 0x2e3d140] The driver does not allow to change time per frame
[video4linux2,v4l2 @ 0x2e3d140] Estimating duration from bitrate, this may be inaccurate
Input #0, video4linux2,v4l2, from '/dev/video0':
  Duration: N/A, start: 1364536659.669939, bitrate: 921 kb/s
    Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 64x48, 921 kb/s, 25 fps, 25 tbr, 1000k tbn, 1000k tbc
[mpeg4 @ 0x2e3f120] too many threads/slices (4), reducing to 3
Output #0, avi, to 'out.avi':
  Metadata:
    ISFT            : Lavf55.0.100
    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 64x48, q=2-31, 200 kb/s, 25 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo -> mpeg4)
Press [q] to stop, [?] for help
frame=7269585 fps= 25 q=2.0 Lsize= 7188621kB time=80:46:23.80 bitrate= 202.5kbits/s
video:7054192kB audio:0kB subtitle:0 global headers:0kB muxing overhead 1.905667%

comment:14 Changed 4 years ago by holden

Thanks for taking the time to test and close the ticket! :)

Note: See TracTickets for help on using tickets.