gpt4 book ai didi

bash - 如何准确地将图像与视频帧匹配并使用 ffmpeg 退出

转载 作者:行者123 更新时间:2023-12-04 22:48:02 25 4
gpt4 key购买 nike

在巴什,
我正在尝试将图像与 ffmpeg 中的帧匹配。我还想在找到匹配项时退出 ffmpeg 进程。这是当前代码的(简化版本):

ffmpeg --hide_banner -ss 0 -to 60 \
-i "video.mp4" -i "image.jpg" -filter_complex \
"blend=difference, blackframe" -f null - </dev/null 2>log.txt &
pid=$!
trap "kill $pid 2>/dev/null" EXIT
while kill -0 $pid 2>/dev/null; do
# (grep command to monitor log file)
# if grep finds blackframe match, return blackframe time
done

据我了解,如果视频实际上包含黑框,我会得到误报。我怎样才能有效地缓解这种情况?

虽然这没有必要回答这个问题,但我想退出 ffmpeg 进程,而不必使用 grep 来不断监视日志文件,而是使用纯 ffmpeg

编辑:我这么说是因为虽然我了解混合滤镜正在计算差异,但我在视频中的黑框上得到了误报,我不知道为什么。

编辑:这个问题的一个可能的解决方案是根本不使用黑框,但是 psnr ( Peak Signal to Noise Ratio ) 但正常使用是通过逐帧比较两个视频,我不知道如何有效地将它与图像一起使用输入。

最佳答案

利用

ffmpeg -ss 0 -t 60 -copyts -i video.mp4 -i image.jpg -filter_complex "[0]extractplanes=y[v];[1]extractplanes=y[i];[v][i]blend=difference,blackframe=0,metadata=select:key=lavfi.blackframe.pblack:value=100:function=equal,trim=duration=0.0001,metadata=print:file=-" -an -v 0 -vsync 0 -f null -

如果找到匹配项,它将打印到标准输出表格的一行,
frame:179  pts:2316800 pts_time:6.03333
lavfi.blackframe.pblack=100

否则不会打印任何行。如果找到,它将在第一次匹配后退出,或者直到处理完整个输入。

由于 blackframe 只查看 luma,我使用 extractplanes 来加速混合并避免任何意外的格式转换 blend可以要求。

黑框阈值设置为 0,因此所有帧都标记了黑框值元数据。由于混合计算差异,因此不可能出现误报。黑色输入帧和引用帧之间的差异等于引用帧,除非引用是黑色帧,在这种情况下,它不是误报。

第一个元数据过滤器仅通过黑框值为 100 的帧。修剪过滤器阻止第二帧通过(除非您的视频的 fps 大于 10000)。第二个元数据过滤器打印所选帧的元数据。

关于bash - 如何准确地将图像与视频帧匹配并使用 ffmpeg 退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57447740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com