Moz*_*art 17 video ffmpeg ffprobe
基于这篇文章,似乎可以使用FFMPEG来检测视频中的场景变化:http: //www.luckydinosaur.com/u/ffmpeg-scene-change-detector
现在我有一个显示书籍文本的视频,当说出文本(单词或句子)时,它会突出显示.像这本有声读物的东西:https://youtu.be/lA7L6ZNVKjc
我需要知道文本突出显示时的时间戳(因此场景更改),这将允许我在我的YouTube视频上添加时间戳标签,这样听众就可以更轻松地浏览有声读物.
执行此操作的神奇命令行是什么?
非常感谢你!
cko*_*ehn 20
组合场景过滤器(用于检测场景变化)和showinfo过滤器应该达到你想要的效果:
ffmpeg -i input.flv \
-filter:v "select='gt(scene,0.4)',showinfo" \
-f null \
- 2> ffout
Run Code Online (Sandbox Code Playgroud)
此命令将提取与前一帧不同的所有帧多于(gt)0.4(从比例0开始1).对于这些帧,信息打印出来(showinfo)像这样
[Parsed_showinfo_1 @ 0x2d85e60] n: 0 pts:2537204 pts_time:2.5372 pos: 2998114 fmt:rgb24 sar:1/1 s:1920x1200 i:P iskey:1 type:I checksum:5616582E plane_checksum:[5616582E]
Run Code Online (Sandbox Code Playgroud)
现在您只需要提取时间戳.我觉得你很感兴趣pts_time.你可以这样做:
grep showinfo ffout | grep pts_time:[0-9.]* -o | grep [0-9.]* -o > timestamps
Run Code Online (Sandbox Code Playgroud)
这将为您提供所有时间戳的列表:
2.5372
4.37799
6.65301
8.09344
Run Code Online (Sandbox Code Playgroud)
要使此方法起作用,您必须具有实现场景检测的FFmpeg版本.此外,您必须为阈值选择合适的值(0.4在第一个命令中).您可以尝试通过提取不同阈值的帧(以及之后手动检查帧)来找到最佳阈值,就像这样
ffmpeg -i input.flv \
-filter:v "select='gt(scene,0.1)',showinfo" \
-vsync 0 frames/%05d.jpg
Run Code Online (Sandbox Code Playgroud)
只是为了澄清:grep [0-9.]*不排除另一个答案中声称的整数.它匹配由数字和句点组成的任何字符序列,但它也匹配非数字,如'4.4.4'.但是,ffmpeg不应该输出这种格式错误的时间戳.
我没有代表对上述答案发表评论,但我想指出@ckoehn和@keypulsations发布的grep只会获取浮点时间戳.要同时获取浮点和整数时间戳,请使用以下正则表达式
grep showinfo ffout | grep pts_time:[0-9.]* -o | grep -E '[0-9]+(?:\.[0-9]*)?' -o > timestamps
Run Code Online (Sandbox Code Playgroud)
您可以简单地使用以下命令:
ffmpeg inputvideo.mp4 -filter_complex "select='gt(scene,0.3)',metadata=print:file=time.txt" -vsync vfr img%03d.png
Run Code Online (Sandbox Code Playgroud)
这将只在 time.txt 文件中保存相关信息,如下所示。
frame:0 pts:108859 pts_time:1.20954
lavfi.scene_score=0.436456
frame:1 pts:285285 pts_time:3.16983
lavfi.scene_score=0.444537
frame:2 pts:487987 pts_time:5.42208
lavfi.scene_score=0.494256
frame:3 pts:904654 pts_time:10.0517
lavfi.scene_score=0.462327
frame:4 pts:2533781 pts_time:28.1531
lavfi.scene_score=0.460413
frame:5 pts:2668916 pts_time:29.6546
lavfi.scene_score=0.432326
Run Code Online (Sandbox Code Playgroud)
帧是从开始时检测到的镜头变化的序列号。此外,为您的用例选择阈值(这里是0.3)以获得正确的输出
| 归档时间: |
|
| 查看次数: |
16138 次 |
| 最近记录: |