文章来源:Python的乐趣作者:一粒米在上一篇文章(Python在手,女神视频轻松有)分享了使用AI人脸识别技术标记出场时间人物截取视频Fragment教程,限制是只能通过识别特定物体(比如人脸)进行操作。在这篇文章中,我将分享一个视频场景分割工具——PySceneDetect。下面开始介绍PySceneDetect以及如何安装和使用它。1.什么是PySceneDetectPySceneDetect是一个命令行工具和Python库,用于分析视频、寻找场景变化或剪辑。PySceneDetect集成了外部工具(例如mkvmerge、ffmpeg)以在使用split-video命令时自动将视频分割成单独的片段。还可以为视频生成称为统计文件的逐帧分析,以帮助确定最佳阈值或检测特定视频的模式/其他分析方法。PySceneDetect使用两种主要的检测方法:detect-threshold(将每一帧与设定的黑电平进行比较,对检测从黑到黑的淡入淡出很有用)和detect-content(比较每一帧,寻找内容的变化,有用)检测视频场景之间的快速转换,尽管处理速度较慢)。每种模式的参数略有不同,在文档中有详细说明。通常,如果要使用淡入/淡出/切黑来检测场景边界,请使用检测阈值模式。如果视频在没有明确定义场景边界的内容之间使用大量快速切换,则应使用“检测内容”模式。知道要使用哪种检测模式后,您可以尝试使用下面建议的参数,或生成统计文件(使用-s/--stats参数),以确定正确的参数-特别是正确的阈值。2、PySceneDetectPySceneDetect的安装依赖Python模块numpy、OpenCV(cv2模块)和tqdm(进度条模块,用于显示处理进度)。安装命令如下:$pipinstallscenedetectPySceneDetect基于ffmpeg和mkvmerge裁剪视频。ffmpeg是一款开源软件,可以运行多种音视频格式的视频、转换、流功能。它功能强大,用途广泛,是最常用的视频处理开源软件。mkvmerge是MKV工具集MKVToolNix中的一款软件,可以将多媒体文件封装、合并、混合成MKV文件。安装完成后,可以通过命令行或代码两种方式使用。3.在命令行使用PySceneDetect在命令行使用scenedetect命令进行操作。命令格式如下:$scenedetect--inputmy_video.mp4--outputmy_video_scenes--statsmy_video.stats.csvdetect-contentlist-scenessave-images参数说明:常用参数说明如下:–input:输入视频文件的路径–output:指定输出目录(可选)–stats:生成统计文件(可选)time:用于设置输入视频时长/长度或开始/结束时间。detect-content:基于内容检测算法对视频进行分段。detect-threshold:分割视频是基于阈值检测算法。list-scenes:打印场景列表并输出到CSV文件。save-images:为每个场景保存视频中的图像。split-video:使用ffmpeg或mkvMerge分割视频。可以使用scenedetecthelpall命令查看完整的参数列表。示例:$scenedetect--inputdemo.mp4detect-contentlist-scenessave-imagessplit-video运行后会在当前文件夹中生成视频剪辑、剪辑截图和csv文件,如下:demo-Scene-001-01。jpgdemo-Scene-004-03.jpg...demo-Scene-001-02.jpgdemo-Scene-004.mp4...demo-Scenes.csvcsv文件包含帧、时间、长度等信息片段,内容如下:TimecodeList:00:07.900:14.600:38.700:45.300:48.901:00.001:12.301:21.501:36.3SceneNumberStartFrameStartTimecodeStartTime(seconds))EndFrameTimeEndTimecode(SECONDS)Length(Frames)Length(TimeCode)Length(Seconds)1000:00.0019000:07.97.91719000:07.97.9172190:07.97.91735000:14.583160:06.767337333333333333333333333333333333333333333333333A333333333333A333333333.73.735673333333333.714.58392800:38.738.66757800:24.124.083...4。在Python中使用在Python中使用PySceneDetect主要使用以下类:VideoManager:用于加载视频并提供搜索;SceneManager:用于协调SceneDetector、VideoManager的高级管理器和可选的StatsManager对象;FrameTimecode:用于存储时间码并以帧级精度对时间码值进行算术运算(加/减/比较);StatsManager:用于存储/缓存Frame指标,以加快后续对同一视频进行场景检测的操作,可保存为CSV文件或从CSV缓存中加载;SceneDetector:实现检测算法的基类,如ContentDetector,阈值检测器等官方的示例代码如下:`from?__future__?import?print_functionimport?osimport?scenedetectfrom?scenedetect.video_manager?import?VideoManagerfrom?scenedetect.scene_manager?import?SceneManagerfrom?scenedetect.frame_timecode?import?FrameTimecodefrom?scenedetect.stats_manager?import?StatsManagerfrom?scenedetect.detectors?import?ContentDetectorSTATS_FILE_PATH?=?'testvideo.stats.csv'def?main():#创建一个指向视频文件testvideo.mp4的video_manager。请注意,多个#视频可以通过简单地在列表中指定更多文件路径来附加#传递给VideoManager构造函数。请注意,附加多个视频#要求它们都具有相同的帧大小和可选的帧速率。video_manager=VideoManager(['testvideo.mp4'])stats_manager=StatsManager()scene_manager=SceneManager(stats_manager)#添加ContentDetector算法(构造函数采用检测器选项,如阈值)。scene_manager.add_detector(ContentDetector())base_timecode=video_manager.get_base_timecode()尝试:#如果统计文件存在,加载它。如果OS.Path.exists(stats_file_path):#从读取模式打开的CSV文件中读取统计信息:stats_file:stats_manager.load_from_csv(stats_from_csv(stats_file,stats_file,base_timecode,base_timecode,base_timecode)start_time_time=base_timecode+20#20#20#00#00:00:00:00.667end_time=base_timecode+20.0#00:00:20.000#设置video_manager持续时间以从00:00:00到00:00:20读取帧。video_manager.set_duration(start_time=start_time,end_time=end_time)#设置缩减因子以提高处理速度。video_manager.set_downscale_factor()#启动video_manager。video_manager.start()#在vi??deo_manager上执行场景检测。scene_manager.detect_scenes(frame_source=video_manager)#获取检测到的场景列表。scene_list=scene_manager.get_scene_list(base_timecode)#与帧时间码一样,如果#场景列表未排序,则可以对scene_list中的每个场景进行排序。print('获得的场景列表:')fori,sceneinenumerate(scene_list):print('场景%2d:开始%s/帧%d,结束%s/帧%d'%(i+1,[0].get_timecode(),scene[0].get_frames(),scene[1].get_timecode(),scene[1].get_frames(),))#我们只在需要保存时写入统计文件:ifStats_manager.is_save_required():在stats_file:stats_manager.save_save_to_csv(stats_file,base_timecode,base_timecode)中,开放(stats_file_path,'w')最后:
