williamfzc / stagesepx

detect stages in video automatically
MIT License
434 stars 125 forks source link

在一些视频上会陷入死循环 #67

Closed williamfzc closed 5 years ago

williamfzc commented 5 years ago

现象

对于部分视频,可能会存在分析过程陷入死循环的问题(停在某一帧):

2019-10-10 23:02:02.766 | DEBUG    | stagesepx.cutter.cutter:_convert_video_into_range_list:134 - between 164 & 164: ssim=1.0; mse=0.0; psnr=1.0
2019-10-10 23:02:02.884 | DEBUG    | stagesepx.hook:do:30 - execute hook: CompressHook, frame id: 164
2019-10-10 23:02:02.886 | DEBUG    | stagesepx.hook:_wrap:40 - origin frame has been changed by CompressHook
2019-10-10 23:02:02.886 | DEBUG    | stagesepx.hook:do:30 - execute hook: GreyHook, frame id: 164
2019-10-10 23:02:02.886 | DEBUG    | stagesepx.hook:_wrap:40 - origin frame has been changed by GreyHook
2019-10-10 23:02:02.886 | DEBUG    | stagesepx.cutter.cutter:_convert_video_into_range_list:106 - computing 164(25.58803571915474) & 164(25.58803571915474) ...
2019-10-10 23:02:02.890 | DEBUG    | stagesepx.cutter.cutter:_convert_video_into_range_list:131 - part 0: ssim=1.0; mse=0.0; psnr=1.0
2019-10-10 23:02:02.892 | DEBUG    | stagesepx.cutter.cutter:_convert_video_into_range_list:131 - part 1: ssim=1.0; mse=0.0; psnr=1.0
2019-10-10 23:02:02.894 | DEBUG    | stagesepx.cutter.cutter:_convert_video_into_range_list:131 - part 2: ssim=1.0; mse=0.0; psnr=1.0
2019-10-10 23:02:02.896 | DEBUG    | stagesepx.cutter.cutter:_convert_video_into_range_list:131 - part 3: ssim=1.0; mse=0.0; psnr=1.0
2019-10-10 23:02:02.896 | DEBUG    | stagesepx.cutter.cutter:_convert_video_into_range_list:134 - between 164 & 164: ssim=1.0; mse=0.0; psnr=1.0

可以看到,分析停留在164帧并陷入循环。

原因

通常,这种现象是因为mp4文件本身出现损坏(可能是录制没有正常停止)导致。

解决方案

在 0.8.1 及 之后的版本会对该现象进行容错。 现阶段,开启预加载模式不会有该问题。