【问题标题】:How to accurately match an image to a video frame and exit with ffmpeg如何准确地将图像与视频帧匹配并使用 ffmpeg 退出
【发布时间】:2019-12-18 05:44:42
【问题描述】:

在 Bash 中, 我正在尝试将图像与 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),但正常使用是逐帧比较两个视频,我不知道如何有效地使用它图像作为输入。

【问题讨论】:

    标签: bash video ffmpeg


    【解决方案1】:

    使用

    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)。第二个元数据过滤器打印所选帧的元数据。

    【讨论】:

    • 这很好,但我尝试使用它,但无法将任何内容打印到标准输出。如果视频在 00:00:01 处具有匹配帧,则需要 14 秒并退出且不打印任何内容。
    • 图片是如何生成的?你能分享这个视频和图片吗?
    • 图片是从视频中提取出来的,我原来的解决方案适用于这种情况。目标视频是 Matroska。不幸的是,我无法分享 exact 文件,但这里是视频的下载链接和 youtube 视频中的图片:send.firefox.com/download/acd9d5c57837894b/… 这应该是一样的。
    • value=100:function=equal 更改为value=99:function=greater。如果您要使用 MKV 和 AVIs..etc,请在黑框过滤器之前添加 settb=1/10000
    • 提取JPG时,轻轻压缩。即-q:v 1 -qmin 1 -qmax 1 否则 JPEG 编码会引入足够的失真以防止精确匹配,更大的问题是大部分帧保持静态,帧之间仅发生细微变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2016-04-19
    • 2017-10-12
    相关资源
    最近更新 更多