因为每个镜头时间不肯能一样 我觉得不难,甚至画面都不用分析,把实时码率突变的时间点提出来就行。 播放器肯定是没有的,得去专业软件里找,而且专业软件也不能保证100%准确
比如DaVinCi Resolve就可以自动识别镜头切换,只要没有花里胡哨的转场的话识别率还挺高,就看你是什么需求值不值得折腾这个了 本帖最后由 无名的旅人 于 2015-5-22 23:21 编辑
理论上是可以实现的,原理其实非常简单,比较当前帧与前一帧的画面相似度(如PSNR/SSIM),若非常低则当前帧为场景切换点;但此种实现方式必须首先由软件预览一遍整个视频并建立一个log之后才能分析出结果,媒体播放器想实现这个功能是不可能的(硬说的话实时预处理理论上也可行……还是略勉强了……),简单易用的傻瓜软件据我所知也不存在
相信楼主问这个问题目的仅仅是希望在看视频的时候跳转功能能更加实用一点,直接一键跳到下个场景,很遗憾这是实现不了的……
视频压制时倒是有办法帮助观众实现类似的效果,比如keyint infinite配合高scenecut参数,可以尽量让编码器在场景变换时才插入IDR;在播放如此压制的视频时,大多数情况下直接用播放器的“跳转到下一个关键帧”功能即可跳到下一个场景
如若用AVS实现的话我给个简单的例子:
a=LWLibavVideoSource("Z:\needforspeed-tlr2_h1080p.mov").trim(1,3612)
b=LWLibavVideoSource("Z:\needforspeed-tlr2_h1080p.mov").trim(0,3611)
compare(a,b,logfile="z:\log.txt")
跑一遍这个scrip会得到一个logfile,节选如下(第一个值为帧号,最后一个值为PSNR,暂且只看这两个数据):
152 0.0000 +0.0000 0 0 111.8416
153 0.0000 +0.0000 0 0 111.8416
154 0.0000 +0.0000 0 0 111.8416
155 70.3094 +68.4349222 -44 8.3280
156 1.1374 +0.0543 70 -17 41.0940
157 1.0712 -0.0700 69 -17 41.4131
158 1.0872 +0.0515 64 -20 41.5274
159 1.0592 -0.0584 75 -20 41.5056
160 1.0017 +0.0608 65 -22 42.1723
161 0.9836 -0.0572 84 -20 42.1913
162 1.0458 +0.0654 62 -17 41.7453
163 1.0271 -0.0536 81 -17 41.7990
164 1.0256 +0.0563 64 -18 41.8621
165 0.9897 -0.0560 72 -12 41.9399
166 1.0215 +0.1212 63 -12 41.6391
167 1.0015 -0.0569 51 -14 41.6518
168 1.0322 +0.1223 49 -14 41.5174
169 1.0174 -0.0908 70 -15 41.5337
170 7.6773 -7.3687 56 -18 27.9118
171 3.0963 -2.6573 51 -14 35.2013
172 3.1618 -2.7837 50 -12 35.2873
173 3.2639 -2.9427 55 -11 35.0137
174 3.1217 -2.7912 53 -16 35.3935
175 3.2496 -2.9732 37 -17 35.0726
176 3.0388 -2.7552 36 -13 35.6071
177 3.1884 -2.9604 28 -12 35.2466
178 2.9615 -2.7169 24 -16 35.8582
179 3.1371 -2.9551 21 -14 35.4232
180 2.9475 -2.7149 19 -12 35.9193
181 3.1712 -3.0066 23 -11 35.3562
182 2.9039 -2.7186 16 -10 36.0272
183 3.1634 -2.9902 18 -6 35.3883
184 2.8722 -2.7060 13 -7 36.1490
185 3.1468 -2.9864 13 -7 35.4704
186 2.9031 -2.7493 15 -7 36.0593
187 3.1203 -2.9991 13 -6 35.4779
188 2.8317 -2.6780 8 -5 36.1239
189 2.9624 -2.8814 9 -6 35.6305
190 2.7516 -2.6117 7 -8 35.8277
191 2.3662 -2.2920 4 -5 36.1223
192 1.8505 -1.7274 4 -6 36.5645
193 0.6117 -0.5579 2 -2 42.3644
194 0.0000 +0.0000 1 0 100.3803
195 0.0000 -0.0000 0 -1 96.7901
196 53.4240 +50.8992221 -23 11.2534
197 0.8157 +0.1780130 -23 35.9253
198 0.7090 -0.1058108 -21 38.3351
199 0.6714 +0.0295117 -25 39.0155
可以看到在第155帧与196帧时数值走势出现了骤变且PSNR值极低,说明这两个位置就是scene cut
152、153、154、194、195的PSNR奇高,说明此两处画面与前一帧近乎完全一致;实际上都是黑帧
170帧PSNR相比之前的趋势出现了显著降低,但幅度仍不是特别大、数值仍不是很低,这种情况下就有可能出现误判了,既有可能是小幅场景变换(比如在同一个房间内摄像机切换到了另一个近似角度)、也有可能是fade out,只能亲自看一看加以确认了;实际上是fade out
编辑:刚反应过来,如果在compare中指定channels="uv"的话不会比较luma,对于fade就不会误判了
页:
[1]