Hi,
is the current limit of 99:59:59.999 for the Timer Duration field an arbitrary choice, or would extending this to say 999 or 9999 hours pose a technical problem (int size or something)?
Background info for this oddball request: (tl;dr: 100 hours divided by a remapping speedup of 1000x is only six minutes of usable time; at speedup 1’000’000x it’s only 0.36s)
This is relevant for a workaround of another issue of the Timer and/or Simple Text filters that’s probably more difficult to tackle.
I have high-speed footage of an older Keyence camera that encodes 4’000-150’000fps into 15fps avi video. Compressing this via Properties->Speed to true proportions and blowing it back up via filters isn’t really possible (and I do not fault Shotcut for not supporting that, this is some specialized piece of video, I know). However, I do need a real-time text overlay…somehow. Doesn’t really matter if the internal units are fake, as long as the rendered video shows correct values.
Since the Simple Text filter only allows the display of variables, e.g. the very useful frame count, but no calculation with these, I cannot make an evaluate[[frame count] * [time per frame]] kind of overlay.
Timer on the other hand has two separate issues while providing some sort of calculation ability that the Simple Text filter lacks:
a) Timer speeds below 1 have no intermediate ticks, they only update once per full tick. For example, at a speed of 0.00016 (which btw lacks resolution for this niche application), the transition from zero to 0.00016 takes 1.5ish minutes (I guess 6250 frames @ 60fps, so 1:34 plusminus some rounding stuff?). In between, the time output is frozen at 0.00000 and then suddenly jumps ahead, which isn’t terribly helpful. This limitation could also be noted in Timer Video Filter
b) There’s no sub-millisecond resolution format in the output format anyway, so even if everything else works, multiple video frames from 100kfps+ footage will sit at the exact same timecode. Again, not a terrible limitation of Shotcut, my own eyes max out at 400-500Hz. And although we are now entering the 1000Hz display era, actually saving kHz+ framerate video because anyone can SEE that is unlikely. The only purpose would be saving high-speed footage with a correct fps value instead of a predefined slowdown like my 15fps video - but that’s a thing of the camera, and typically not needed for processed video.
So - my current workaround is mapping millseconds into seconds, gaining 1000x leverage. For example in a 15000fps video, I can run Speed=1, because real 15000fps in 15fps video are a 1000x slowdown, and milliseconds to seconds is a factor of 1000x as well, that cancels nicely. And because speed is equal or greater than 1, I also get an updated timestamp every frame. Set up Format to “SS.SS” or “SS.SSS”, add some aligned text overlay stating “this is milliseconds”, and this works fine.
For videos with greater framerate, this falls apart - sure, video with 150’000fps works with speed 0.1x, but only gets an updated time in 0.066ms increments every ten frames as described. Doubling down on the workaround is an option at this temporal resolution → mapping microseconds into seconds. 150kfps@15fps, running at Speed 100x yields microseconds in the Timer seconds field and therefore an update every frame.
And this is where my original request comes from…a limit of 100 hours = 6’000 minutes = 360’000 seconds in the Timer Duration field is good for 6 minutes = 360 seconds of 1000x speedup footage (ms mapping), but only for 0.36 seconds at 1’000’000x speedup (µs mapping). The camera cannot capture six minutes at 15kfps - but it can do three seconds at 150kfps. And that causes the Timer to stop at 12% of the video, because it runs into the 99h 59min 59.999s (359’999.999µs) limit
There’s another workaround for that, of course, and that’s limiting the thing to 100’000 “seconds” and putting the 100k decimal place manually into the static text…but let’s be real here, that’s a timer reset and a text change ten times per real second, and while I’m glad that’s theoretically possible, it’s not a very practical solution. An extension of the maximum value the Duration timer can hold would be SO much more convenient…(even if capped at the seemingly also-arbitrary values of 596 or 1193 hours!)
