使用ffmpeg在视频中查找帧

时间:2018-10-15 23:10:37

标签: ffmpeg

我有一个保存为1.jpg的图像,我想在视频中查找与此图像相似的帧,并获取这些帧或时间戳的帧号。 该命令可以找到相似的图像,但是它以难以解析的格式输出结果。如何修复此命令以仅获取相似的帧而没有其他信息?

ffmpeg.exe  -i "1.mkv" -r 1 -loop 1 -i 1.jpg -an -filter_complex "blend=difference:shortest=1,blackframe=99:32" -f null -

1 个答案:

答案 0 :(得分:1)

使用grepsed-f null - 2>&1 | grep blackframe | sed 's/.*frame\:\(.*\)/\1/'

完整代码:

ffmpeg.exe  -i "1.mkv" -r 1 -loop 1 -i 1.jpg -an -filter_complex "blend=difference:shortest=1,blackframe=99:32" -f null - 2>&1 | grep blackframe | sed 's/.*frame\:\(.*\)/\1/'

grep blackframe为您提供了以下几行:

[Parsed_blackframe_9 @ 0x7fea7de01b80] frame:199 pblack:99 pts:716400 t:7.960000 type:P last_keyframe:198

sed修改此行:

s命令(如替代命令)可能是sed中最重要的命令,并且有许多不同的选项。 s命令的语法为's/regexp/replacement/flags'

在这种情况下,regexp(正则表达式模式)为.*frame\:\(.*\)

这意味着{any characters}frame: {any characters}

({\是正则表达式中冒号:和括号( )的必需转义字符。)

replacement\1

它是指由转义括号捕获的字符。