我不知道这是否可行,但有东西告诉我这是可能的……你看,我想动态控制伽马校正FFMPEG/FFPLAY取决于视频/电影中重现的帧有多亮/暗……
就上下文而言,有一个过滤器FFMPEG/FFPLAY/FFPROBE调用该函数报告有关正在处理/再现/分析的视频的各种有用信息。过滤器中signalstats
有一个参数返回帧的平均级别(YAVG
signalstats
luma
https://ffmpeg.org/ffmpeg-filters.html#signalstats-1)。这就是我想要用来确定/计算gamma
在 eq 过滤器中使用的值gamma
(https://ffmpeg.org/ffmpeg-filters.html#eq)…例如,最后我想使用这样的公式"1-(YAVG/50)+1"
……
通过signalstats YAVG
过滤器/参数,我成功地完成了这些不相关的练习:
分析(用FF探针)视频并写下日志YAVG
包含每帧值的文件:
ffprobe -f lavfi movie=VIDEO_INPUT,signalstats -show_entries frame_tags=lavfi.signalstats.YAVG -of csv="p=0" > YAVG.log
我还可以播放视频(使用飞飞游戏),并在左上角显示YAVG
正在重现的每一帧的值:
首先,我们需要在主文件夹中创建一个名为“ signalstat_drawtext.txt
”的文本文件,其内容如下:
%{metadata:lavfi.signalstats.YAVG}
然后,我们运行这个命令:
ffplay VIDEO_INPUT -vf signalstats,drawtext=fontfile=FreeSerif.ttf:fontcolor=lime:textfile=signalstat_drawtext.txt
但是,我无法找到/猜测如何使用输出YAVG
来(实时)控制过滤器gamma
中的值eq
...我认为这是可能的,我只是不知道如何编写命令。
使用飞飞游戏,我会想象这样的事情:
ffplay VIDEO_INPUT -vf signalstats,eq=gamma="1-(metadata:lavfi.signalstats.YAVG/50)+1"
但当然,这是行不通的,而且我确信我写的只是废话。