首页 > 解决方案 > FFMpeg random 是否会为连续执行生成相同的伪随机数序列?

问题描述

例如,如果我执行命令两次:

ffmpeg -i input.mp4 -vf geq=r='random(1)*255':g='random(1)*255':b='random(1)*255' -strict -2 output.mp4

对于同一个源文件,我有相同的输出文件。为什么?我想获得不同的输出文件。

测试配置:

ffmpeg version 2.8.17-0ubuntu0.1 Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 20160609

我想那是因为随机化器的起始值是相同的。ffmepg 有 srand 之类的功能吗?

更具体地说,我想像这样添加随机噪声:noise=alls=20:allf=p+t+u. 但是如果我尝试这样做,我会在同一个输入文件上的不同执行中得到相同的噪音。

标签: randomffmpeg

解决方案


添加all_seed选项:

ffmpeg -i input.mp4 -vf "noise=alls=20:allf=p+t+u:all_seed=123457" random.mp4

默认值为123457。您需要在每次执行时更改它。也许有类似的东西:

ffmpeg -i input.mp4 -vf "noise=alls=20:allf=p+t+u:all_seed=$(tr -cd [:digit:] < /dev/urandom | head -c 9)" random.mp4

使用hash demuxer进行验证:

ffmpeg -i random.mp4 -f hash -
[…]
SHA256=4e3c698661b0482684d2c38f7c075a4fd8bf46fadc665b4b0f53ff41e7d9266a

请参阅噪声过滤器文档


推荐阅读