out_time_us wrong or strangely inaccurate
I try to get the duration of a webm video file. During testing I encountered some to me very strange output of ffmpeg. I use this line: ffmpeg -i "./recordedVideo.webm" -progress - -f null -stats_period 0.00015 - With this line I get nearly every frame shown with frame number and out_time_us on stdout. The video file seems to have 40 frames according to ffmpeg. Now the strange things start right with the first frame. The first frame is not being shown as to start at "out_time_us=0000000", as one would expect, but at "out_time_us=1020000". This is more than a full second after zero. Then it seems to progress ok through the frames, taking about 60000 microseconds for each frame until it hits frame 26 of 40 with indication "out_time_us=2700000" Then strangely all the rest of the 14 frames also show "out_time_us=2700000". Is this a bug in ffmpeg? Why would this be? Am I missing something here? How do I get the exact duration of a video file? Best would be of course if every frame is marked with its correct timestamp. Please help! Here is the full output: ========= ffmpeg version 5.1.6-0+deb12u1 Copyright (c) 2000-2024 the FFmpeg developers built with gcc 12 (Debian 12.2.0-14) configuration: --prefix=/usr --extra-version=0+deb12u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared libavutil 57. 28.100 / 57. 28.100 libavcodec 59. 37.100 / 59. 37.100 libavformat 59. 27.100 / 59. 27.100 libavdevice 59. 7.100 / 59. 7.100 libavfilter 8. 44.100 / 8. 44.100 libswscale 6. 7.100 / 6. 7.100 libswresample 4. 7.100 / 4. 7.100 libpostproc 56. 6.100 / 56. 6.100 ffmpeg stats and -progress period set to 0.00015. Input #0, matroska,webm, from './recordedVideo.webm': Metadata: encoder : Chrome Duration: N/A, start: 0.000000, bitrate: N/A Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp (default) Stream #0:1(eng): Video: vp8, yuv420p(progressive), 640x480, SAR 1:1 DAR 4:3, 250 tbr, 1k tbn (default) Metadata: alpha_mode : 1 Stream mapping: Stream #0:1 -> #0:0 (vp8 (native) -> wrapped_avframe (native)) Stream #0:0 -> #0:1 (opus (native) -> pcm_s16le (native)) Press [q] to stop, [?] for help Output #0, null, to 'pipe:': Metadata: encoder : Lavf59.27.100 Stream #0:0(eng): Video: wrapped_avframe, yuv420p(tv, bt470bg/unknown/unknown, progressive), 640x480 [SAR 1:1 DAR 4:3], q=2-31, 200 kb/s, 250 fps, 250 tbn (default) Metadata: alpha_mode : 1 encoder : Lavc59.37.100 wrapped_avframe Stream #0:1(eng): Audio: pcm_s16le, 48000 Hz, mono, s16, 768 kb/s (default) Metadata: encoder : Lavc59.37.100 pcm_s16le frame=1 1 fps=0.0 q=-0.0 size=N/A time=00:00:01.02 bitrate=N/A speed= 167x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1020000 out_time_ms=1020000 out_time=00:00:01.020000 dup_frames=0 drop_frames=0 speed= 167x progress=continue frame=1 1 fps=0.0 q=-0.0 size=N/A time=00:00:01.08 bitrate=N/A speed= 139x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1080000 out_time_ms=1080000 out_time=00:00:01.080000 dup_frames=0 drop_frames=0 speed= 139x progress=continue frame=1 1 fps=0.0 q=-0.0 size=N/A time=00:00:01.14 bitrate=N/A speed= 144x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1140000 out_time_ms=1140000 out_time=00:00:01.140000 dup_frames=0 drop_frames=0 speed= 144x progress=continue frame=3 3 fps=0.0 q=-0.0 size=N/A time=00:00:01.20 bitrate=N/A speed= 146x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1200000 out_time_ms=1200000 out_time=00:00:01.200000 dup_frames=0 drop_frames=0 speed= 146x progress=continue frame=4 4 fps=0.0 q=-0.0 size=N/A time=00:00:01.26 bitrate=N/A speed= 148x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1260000 out_time_ms=1260000 out_time=00:00:01.260000 dup_frames=0 drop_frames=0 speed= 148x progress=continue frame=4 4 fps=0.0 q=-0.0 size=N/A time=00:00:01.32 bitrate=N/A speed= 152x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1320000 out_time_ms=1320000 out_time=00:00:01.320000 dup_frames=0 drop_frames=0 speed= 152x progress=continue frame=5 5 fps=0.0 q=-0.0 size=N/A time=00:00:01.38 bitrate=N/A speed= 156x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1380000 out_time_ms=1380000 out_time=00:00:01.380000 dup_frames=0 drop_frames=0 speed= 156x progress=continue frame=6 6 fps=0.0 q=-0.0 size=N/A time=00:00:01.44 bitrate=N/A speed= 160x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1440000 out_time_ms=1440000 out_time=00:00:01.440000 dup_frames=0 drop_frames=0 speed= 160x progress=continue frame=8 8 fps=0.0 q=-0.0 size=N/A time=00:00:01.50 bitrate=N/A speed= 162x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1500000 out_time_ms=1500000 out_time=00:00:01.500000 dup_frames=0 drop_frames=0 speed= 162x progress=continue frame=9 9 fps=0.0 q=-0.0 size=N/A time=00:00:01.56 bitrate=N/A speed= 166x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1560000 out_time_ms=1560000 out_time=00:00:01.560000 dup_frames=0 drop_frames=0 speed= 166x progress=continue frame=10 10 fps=0.0 q=-0.0 size=N/A time=00:00:01.62 bitrate=N/A speed= 169x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1620000 out_time_ms=1620000 out_time=00:00:01.620000 dup_frames=0 drop_frames=0 speed= 169x progress=continue frame=10 10 fps=0.0 q=-0.0 size=N/A time=00:00:01.74 bitrate=N/A speed= 178x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1740000 out_time_ms=1740000 out_time=00:00:01.740000 dup_frames=0 drop_frames=0 speed= 178x progress=continue frame=11 11 fps=0.0 q=-0.0 size=N/A time=00:00:01.74 bitrate=N/A speed= 174x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1740000 out_time_ms=1740000 out_time=00:00:01.740000 dup_frames=0 drop_frames=0 speed= 174x progress=continue frame=12 12 fps=0.0 q=-0.0 size=N/A time=00:00:01.80 bitrate=N/A speed= 176x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1800000 out_time_ms=1800000 out_time=00:00:01.800000 dup_frames=0 drop_frames=0 speed= 176x progress=continue frame=13 13 fps=0.0 q=-0.0 size=N/A time=00:00:01.86 bitrate=N/A speed= 177x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1860000 out_time_ms=1860000 out_time=00:00:01.860000 dup_frames=0 drop_frames=0 speed= 177x progress=continue frame=14 14 fps=0.0 q=-0.0 size=N/A time=00:00:01.92 bitrate=N/A speed= 179x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1920000 out_time_ms=1920000 out_time=00:00:01.920000 dup_frames=0 drop_frames=0 speed= 179x progress=continue frame=15 15 fps=0.0 q=-0.0 size=N/A time=00:00:01.98 bitrate=N/A speed= 180x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=1980000 out_time_ms=1980000 out_time=00:00:01.980000 dup_frames=0 drop_frames=0 speed= 180x progress=continue frame=16 16 fps=0.0 q=-0.0 size=N/A time=00:00:02.04 bitrate=N/A speed= 182x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2040000 out_time_ms=2040000 out_time=00:00:02.040000 dup_frames=0 drop_frames=0 speed= 182x progress=continue frame=17 17 fps=0.0 q=-0.0 size=N/A time=00:00:02.10 bitrate=N/A speed= 183x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2100000 out_time_ms=2100000 out_time=00:00:02.100000 dup_frames=0 drop_frames=0 speed= 183x progress=continue frame=18 18 fps=0.0 q=-0.0 size=N/A time=00:00:02.16 bitrate=N/A speed= 184x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2160000 out_time_ms=2160000 out_time=00:00:02.160000 dup_frames=0 drop_frames=0 speed= 184x progress=continue frame=19 19 fps=0.0 q=-0.0 size=N/A time=00:00:02.22 bitrate=N/A speed= 185x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2220000 out_time_ms=2220000 out_time=00:00:02.220000 dup_frames=0 drop_frames=0 speed= 185x progress=continue frame=19 19 fps=0.0 q=-0.0 size=N/A time=00:00:02.34 bitrate=N/A speed= 192x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2340000 out_time_ms=2340000 out_time=00:00:02.340000 dup_frames=0 drop_frames=0 speed= 192x progress=continue frame=20 20 fps=0.0 q=-0.0 size=N/A time=00:00:02.34 bitrate=N/A speed= 188x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2340000 out_time_ms=2340000 out_time=00:00:02.340000 dup_frames=0 drop_frames=0 speed= 188x progress=continue frame=21 21 fps=0.0 q=-0.0 size=N/A time=00:00:02.40 bitrate=N/A speed= 190x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2400000 out_time_ms=2400000 out_time=00:00:02.400000 dup_frames=0 drop_frames=0 speed= 190x progress=continue frame=22 22 fps=0.0 q=-0.0 size=N/A time=00:00:02.46 bitrate=N/A speed= 192x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2460000 out_time_ms=2460000 out_time=00:00:02.460000 dup_frames=0 drop_frames=0 speed= 192x progress=continue frame=23 23 fps=0.0 q=-0.0 size=N/A time=00:00:02.52 bitrate=N/A speed= 193x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2520000 out_time_ms=2520000 out_time=00:00:02.520000 dup_frames=0 drop_frames=0 speed= 193x progress=continue frame=24 24 fps=0.0 q=-0.0 size=N/A time=00:00:02.58 bitrate=N/A speed= 194x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2580000 out_time_ms=2580000 out_time=00:00:02.580000 dup_frames=0 drop_frames=0 speed= 194x progress=continue frame=25 25 fps=0.0 q=-0.0 size=N/A time=00:00:02.64 bitrate=N/A speed= 195x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2640000 out_time_ms=2640000 out_time=00:00:02.640000 dup_frames=0 drop_frames=0 speed= 195x progress=continue frame=26 26 fps=0.0 q=-0.0 size=N/A time=00:00:02.70 bitrate=N/A speed= 197x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2700000 out_time_ms=2700000 out_time=00:00:02.700000 dup_frames=0 drop_frames=0 speed= 197x progress=continue frame=29 29 fps=0.0 q=-0.0 size=N/A time=00:00:02.70 bitrate=N/A speed= 193x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2700000 out_time_ms=2700000 out_time=00:00:02.700000 dup_frames=0 drop_frames=0 speed= 193x progress=continue frame=30 30 fps=0.0 q=-0.0 size=N/A time=00:00:02.70 bitrate=N/A speed= 191x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2700000 out_time_ms=2700000 out_time=00:00:02.700000 dup_frames=0 drop_frames=0 speed= 191x progress=continue frame=31 31 fps=0.0 q=-0.0 size=N/A time=00:00:02.70 bitrate=N/A speed= 183x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2700000 out_time_ms=2700000 out_time=00:00:02.700000 dup_frames=0 drop_frames=0 speed= 183x progress=continue frame=33 33 fps=0.0 q=-0.0 size=N/A time=00:00:02.70 bitrate=N/A speed= 179x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2700000 out_time_ms=2700000 out_time=00:00:02.700000 dup_frames=0 drop_frames=0 speed= 179x progress=continue frame=34 34 fps=0.0 q=-0.0 size=N/A time=00:00:02.70 bitrate=N/A speed= 175x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2700000 out_time_ms=2700000 out_time=00:00:02.700000 dup_frames=0 drop_frames=0 speed= 175x progress=continue frame=35 35 fps=0.0 q=-0.0 size=N/A time=00:00:02.70 bitrate=N/A speed= 173x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2700000 out_time_ms=2700000 out_time=00:00:02.700000 dup_frames=0 drop_frames=0 speed= 173x progress=continue frame=37 37 fps=0.0 q=-0.0 size=N/A time=00:00:02.70 bitrate=N/A speed= 171x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2700000 out_time_ms=2700000 out_time=00:00:02.700000 dup_frames=0 drop_frames=0 speed= 171x progress=continue frame=38 38 fps=0.0 q=-0.0 size=N/A time=00:00:02.70 bitrate=N/A speed= 169x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2700000 out_time_ms=2700000 out_time=00:00:02.700000 dup_frames=0 drop_frames=0 speed= 169x progress=continue frame=40 40 fps=0.0 q=-0.0 size=N/A time=00:00:02.70 bitrate=N/A speed= 167x fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2700000 out_time_ms=2700000 out_time=00:00:02.700000 dup_frames=0 drop_frames=0 speed= 167x progress=continue frame= 40 fps=0.0 q=-0.0 Lsize=N/A time=00:00:02.70 bitrate=N/A speed= 165x frame=40 fps=0.00 stream_0_0_q=-0.0 bitrate=N/A total_size=N/A out_time_us=2700000 out_time_ms=2700000 out_time=00:00:02.700000 dup_frames=0 drop_frames=0 speed= 165x progress=end video:18kB audio:253kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
How do I get the exact duration of a video file? Best would be of course if every frame is marked with its correct timestamp.
Why not use ffprobe? |ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 |./recordedVideo.webm webm containers also store the duration of the streams in the stream metadata so you can also just query the duration tag.
On 04.07.25 18:15, Ferdi Scholten wrote:
How do I get the exact duration of a video file? Best would be of course if every frame is marked with its correct timestamp.
Why not use ffprobe?
|ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 |./recordedVideo.webm
webm containers also store the duration of the streams in the stream metadata so you can also just query the duration tag. _______________________________________________ ffmpeg-user mailing list ffmpeg-user@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-user
To unsubscribe, visit link above, or email ffmpeg-user-request@ffmpeg.org with subject "unsubscribe".
Because I accept user videos and not all clips contain this information: ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 ./recordedVideo.webm N/A
On 7/4/2025 9:33 AM, thefoss@icybiz.com wrote:
On 04.07.25 18:15, Ferdi Scholten wrote:
Why not use ffprobe?
Because I accept user videos and not all clips contain this information:
I've also found that more-than-occasionally the metadata is very wrong, like a one hour file which says it's 37 minutes long. Later, z!
participants (3)
-
Carl Zwanzig -
Ferdi Scholten -
thefoss@icybiz.com