[FFmpeg-user] Question about random() expression

Jim DeLaHunt list+ffmpeg-user at jdlh.com
Thu Dec 28 01:54:00 EET 2023


Michael:

On 2023-12-27 15:20, Michael Koch wrote:
> Am 27.12.2023 um 23:59 schrieb Jim DeLaHunt:
>> Michael:
>>
>> On 2023-12-27 13:51, Michael Koch wrote:
>>> ...I'm using this command line to print four consecutive random 
>>> numbers:
>>> ...
>> I do not have an answer to your question about the behaviour of the 
>> random() function. However, I cannot reproduce your results on my 
>> machine. I get an error complaining about the video filter syntax 
>> instead.
>
> If not on a Windows machine, you may have to encapsulate the filter 
> thread in double quotes.
> Please try this command:
> ffmpeg -filter_threads 1 -loglevel repeat -f lavfi -i 
> color=gray:size=1x1,format=gray -vf 
> "geq=lum='st(0,0.123);print(random(0));print(random(0));print(random(0));print(random(0))'" 
> -frames 1 -y out.png

Right you are. Enclosing the filter expression in double quotes, I was 
able to reproduce your result. Four numbers printed out, and the first 
of them was 0.000000. The remaining three were exactly the same as your 
output. That makes those numbers seem not very random.

Interestingly, when I change "random(0)" to "random(0.9)", I get the 
identical sequence of four numbers. The behaviour of the parameter is 
not the "seed" behaviour that I expect.

The documentation says, "x is the index of the internal variable which 
will be used to save the seed/state." 
(https://ffmpeg.org/ffmpeg-all.html#Expression-Evaluation). I don't know 
what it means by "index of the internal variable", and I don't know what 
"save" means. In a function named random(), I expect the parameter to be 
used as a seed. I guess this is one of the places where one has to read 
the source code.

Apologies for my confusion,
      —Jim DeLaHunt




More information about the ffmpeg-user mailing list