I would like to display the current frame number on a video while playing it with ffplay. I have already seen this solution, but when I seek to any part of the video, the counter resets. There's a variable, start_number
, which the ffplay documentation says is The starting frame number for the n/frame_num variable. The default value is "0".
It seems that n is set to that when starting the video or seeking between I-frames. I thought setting this variable to %{floor(t*60)}
would solve my problem, but after running this:
ffplay -i "video.mp4" -vf drawtext="fontsize=30:box=1:boxcolor=white:fontcolor=black:fontfile=/Windows/Fonts/arial.ttf:start_number=floor(t*60):text=%{n}"
I got the following console output:
ffplay version N-84679-gd65b595 Copyright (c) 2003-2017 the FFmpeg developers
built with gcc 6.3.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-zlib
libavutil 55. 51.100 / 55. 51.100
libavcodec 57. 86.103 / 57. 86.103
libavformat 57. 67.100 / 57. 67.100
libavdevice 57. 3.101 / 57. 3.101
libavfilter 6. 78.100 / 6. 78.100
libswscale 4. 3.101 / 4. 3.101
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':= 0B f=0/0
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 2017-03-30T02:49:20.000000Z
encoder : Open Broadcaster Software v0.659b
Duration: 00:05:36.85, start: 0.000000, bitrate: 72636 kb/s
Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 162 kb/s (default)
Metadata:
creation_time : 2017-03-30T02:49:20.000000Z
handler_name : Sound Media Handler
Stream #0:1(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709/bt709/iec61966-2-1), 2560x1440, 72465 kb/s, 60 fps, 60 tbr, 1k tbn, 120 tbc (default)
Metadata:
creation_time : 2017-03-30T02:49:20.000000Z
handler_name : Video Media Handler
encoder : AVC Coding
[drawtext @ 00000000122770e0] [Eval @ 0000000008f3eb60] Undefined constant or missing '(' in 't*60)'
[drawtext @ 00000000122770e0] Unable to parse option value "floor(t*60)"
[drawtext @ 00000000122770e0] [Eval @ 0000000008f3ebd0] Undefined constant or missing '(' in 't*60)'
[drawtext @ 00000000122770e0] Unable to parse option value "floor(t*60)"
[drawtext @ 00000000122770e0] Error setting option start_number to value floor(t*60).
[Parsed_drawtext_0 @ 000000000263eca0] Error applying options to the filter.
Error initializing filter 'drawtext' with args 'fontsize=30:box=1:boxcolor=white:fontcolor=black:fontfile=/Windows/Fonts/arial.ttf:start_number=floor(t*60):text=%{n}'
0.01 A-V: nan fd= 0 aq= 22KB vq= 5866KB sq= 0B f=0/0
In fact, any variable in start_number
's assignment invokes this error. I don't know if I have the correct syntax, but does this mean it doesn't evaluate expressions? Or maybe it doesn't accept variables for some reason?
After that downer I tried just setting the text to %{t}
, which played the video, but repeatedly gave this error and had no text in the top left corner:
[Parsed_drawtext_0 @ 0000000003e54ea0] %{t} is not known 0B f=0/0
So does the current time variable just not work in drawtext?
Is there another way to write the current frame on the video or even on the console window?
Using Windows 10 Enterprise and the latest build of ffplay for windows at this time.
Assuming the video has a constant frame rate of 60 fps, use
ffplay -i "video.mp4"
-vf "drawtext=fontsize=30:box=1:boxcolor=white:fontcolor=black:fontfile=/Windows/Fonts/arial.ttf:text='%{eif\:t*60\:d}'"