使用 ffmpeg 分析视频场景帧,并生成播放器支持的书签文件,支持 PotPlayer

203 天前
 jifengg

前几天看 v 站有位 v 友发了个帖子《有沒有視頻產生縮略圖並記錄時間點的軟件》/t/1034649。 当时有兴趣就研究了一下。

不得不说 ffmpeg 本身真是强大,经过几天研究,有了一些心得和产出。

先给出 GitHub 地址:https://github.com/jifengg/ffmpeg-script

使用方式:

node ffmpeg.video2bookmark.js -i <file|folder> [-temp <folder> ...]

支持的参数:

-i              <string>    [必须]要处理的文件或目录
-y                          是否覆盖已经存在的 pbf 文件,默认:false
-size           <number>    缩略图高度,默认:72
-score          <number>    0.0 到 1.0 之间的值,表示视频帧可能为新场景的概率;建议设置在 0.3 到 0.5 之间。太小的值会出现过多场景帧,而太大的值会导致过少的场景帧。默认:0.5
-temp           <string>    缓存目录,默认为脚本所在目录下的“temp”目录
-min-interval   <number>    两个场景帧之间的最小间隔,间隔比这个值小的场景帧将被丢弃,这个值保证书签不会太密集,单位秒,默认:20.0
-max-interval   <number>    两个场景帧之间的最大间隔,如果间隔比这个值大,将在他们之间每 max-interval 秒取一帧,这个值保证书签不会太稀疏,单位秒,默认:60.0
-h                          显示这个帮助信息
-debug                      是否开启 debug 模式,打印更详细的日志

以下是一些技术点总结:

1209 次点击
所在节点    分享创造
3 条回复
archxm
203 天前
不错啊,优秀的分享
lamquan
203 天前
这个脚本本身是没有问题的,可以将 ffmpeg 的场景帧转换成 pbf 文件。但受限于 ffmpeg 的场景识别能力,最终的结果并不理想。
用过类似的独立小软件叫 PySceneDetect, https://github.com/Breakthrough/PySceneDetect
可以按场景分割,也可以保存为图片,还可以输出为时间码,也可以修改原码直接转换成 pbf 。
kuanat
202 天前
楼上说得很对,ffmpeg 几乎大部分 filter 都有附带的 scene detection ,这是一个效率优先的实现,需要根据目标视频反复测试参数阈值。

原理是以 YUV 信号提取帧的 luma 亮度信息,速度虽然快,但主要是适应动、静态的场景转换。对于比如讲座类视频效果就不好。

达到目标还有很多思路,比如相似性 hash ,点云等等,主要看目标视频的特性。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1036436

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX