python opencv输出mp4_Python玩转视频处理(四):视频按场景进行分割

9f16e2252b04a4d06ebe952bd54b9366.png

在上一篇文章(python在手,女神视频轻松有)分享了用AI人脸识别技术标记人物出现时间点来截取视频片段的教程,它的局限性在于只能通过识别特定的对象(比如人脸)来操作。在本文中将分享一个按场景进行分割视频的工具——PySceneDetect

f503cd4f6b02d59e784b51bdf2c07369.png

下面开始介绍下PySceneDetect及其安装使用方法。

1. 什么是PySceneDetect

PySceneDetect是一个命令行工具和Python库,用于分析视频,查找场景更改或剪辑。

PySceneDetect集成了外部工具(例如mkvmerge , ffmpeg ),可在使用split-video命令时自动将视频分割为单个片段。还可以为视频生成逐帧分析,称为统计文件,以帮助确定最佳阈值或检测特定视频的模式/其他分析方法。

PySceneDetect使用两种主要的检测方法: detect-threshold (将每个帧与设置的黑电平进行比较,对于检测从黑色到黑色的淡入和淡出有用)和detect-content (比较每个帧,依次查找内容的变化,有用)用于检测视频场景之间的快速切换,尽管处理速度较慢)。每种模式的参数略有不同,并在文档中进行了详细说明.。

通常,如果要使用淡入/淡出/切成黑色来检测场景边界,请使用检测阈值模式。如果视频在内容之间使用大量快速剪切,并且没有明确定义的场景边界,则应使用" 检测内容"模式。一旦知道要使用哪种检测模式,就可以尝试以下建议的参数,或生成统计文件(使用-s / –stats参数),以确定正确的参数-具体来说,是正确的阈值.

2. PySceneDetect的安装

PySceneDetect依赖于Python模块numpy,OpenCV(cv2模块)和tqdm(进度条模块,用来显示处理进度),安装命令如下:

$ pip install scenedetect

PySceneDetect基于ffmpeg和mkvmerge对视频进行裁剪。

ffmpeg 是一个开源软件,可以运行音频和视频多种格式的录影、转换、流功能,它功能强大,用途广泛,是视频处理最常用的开源软件。
mkvmerge是MKV工具集MKVToolNix中的一个软件,可以将多媒体文件封装、合并、混流为 MKV 文件。

安装完成后可以通过命令行或代码两种方式进行使用。

3. 命令行使用

PySceneDetect在命令行中使用scenedetect命令进行操作,命令格式如下:

$ scenedetect --input my_video.mp4 --output my_video_scenes --stats my_video.stats.csv detect-content list-scenes save-images

参数说明:

常用的参数说明如下:

  • –input :输入视频文件的路径
  • –output :指定输出目录(可选)
  • –stats:生成统计文件(可选)
  • time:用于设置输入视频持续时间/长度或开始/结束时间。
  • detect-content:切分视频基于内容检测算法。
  • detect-threshold:切分视频基于阈值检测算法。
  • list-scenes:打印场景列表并输出到CSV文件。
  • save-images:为每个场景保存视频中的图像。
  • split-video:使用ffmpeg或mkvMerge对视频进行分割。

完整的参数列表可使用scenedetect help all命令进行查看。

示例:

$ scenedetect --input demo.mp4 detect-content list-scenes save-images  split-video

运行完成后会在当前文件夹生成视频片段,片段截图以及csv文件,如下:

demo-Scene-001-01.jpg demo-Scene-004-03.jpg ...
demo-Scene-001-02.jpg demo-Scene-004.mp4    
...
demo-Scenes.csv

csv文件中包含片段的帧、时间、长度等信息,内容如下:

Timecode List: 00:07.9 00:14.6 00:38.7 00:45.3 00:48.9 01:00.0 01:12.3 01:21.5 01:36.3
Scene Number Start Frame Start Timecode Start Time (seconds) End Frame End Timecode End Time (seconds) Length (frames) Length (timecode) Length (seconds)
1 0 00:00.0 0 190 00:07.9 7.917 190 00:07.9 7.917
2 190 00:07.9 7.917 350 00:14.6 14.583 160 00:06.7 6.667
3 350 00:14.6 14.583 928 00:38.7 38.667 578 00:24.1 24.083
...

4. 在Python中使用

在Python中使用PySceneDetect主要用到下面几个类:

  • VideoManager:用于加载视频并提供搜索;
  • SceneManager:用于协调SceneDetector,VideoManager和可选的StatsManager对象的高级管理器;
  • FrameTimecode:用于存储时间码以及对时间码值进行算术运算(加/减/比较),并具有帧级的精确度;
  • StatsManager:用于存储/缓存帧指标,以加快在同一视频上后续场景检测的运行速度,并可以保存到CSV文件或从CSV中加载缓存;
  • SceneDetector:用于实现检测算法的基类,如ContentDetector,ThresholdDetector等。

官方的示例代码如下:

from __future__ import print_function
import osimport scenedetect
from scenedetect.video_manager import VideoManager
from scenedetect.scene_manager import SceneManager
from scenedetect.frame_timecode import FrameTimecode
from scenedetect.stats_manager import StatsManager
from scenedetect.detectors import ContentDetectorSTATS_FILE_PATH = 'testvideo.stats.csv'def main():# Create a video_manager point to video file testvideo.mp4. Note that multiple# videos can be appended by simply specifying more file paths in the list# passed to the VideoManager constructor. Note that appending multiple videos# requires that they all have the same frame size, and optionally, framerate.video_manager = VideoManager(['testvideo.mp4'])stats_manager = StatsManager()scene_manager = SceneManager(stats_manager)# Add ContentDetector algorithm (constructor takes detector options like threshold).scene_manager.add_detector(ContentDetector())base_timecode = video_manager.get_base_timecode()try:# If stats file exists, load it.if os.path.exists(STATS_FILE_PATH):# Read stats from CSV file opened in read mode:with open(STATS_FILE_PATH, 'r') as stats_file:stats_manager.load_from_csv(stats_file, base_timecode)start_time = base_timecode + 20     # 00:00:00.667end_time = base_timecode + 20.0     # 00:00:20.000# Set video_manager duration to read frames from 00:00:00 to 00:00:20.video_manager.set_duration(start_time=start_time, end_time=end_time)# Set downscale factor to improve processing speed.video_manager.set_downscale_factor()# Start video_manager.video_manager.start()# Perform scene detection on video_manager.scene_manager.detect_scenes(frame_source=video_manager)# Obtain list of detected scenes.scene_list = scene_manager.get_scene_list(base_timecode)# Like FrameTimecodes, each scene in the scene_list can be sorted if the# list of scenes becomes unsorted.print('List of scenes obtained:')for i, scene in enumerate(scene_list):print('    Scene %2d: Start %s / Frame %d, End %s / Frame %d' % (i+1,scene[0].get_timecode(), scene[0].get_frames(),scene[1].get_timecode(), scene[1].get_frames(),))# We only write to the stats file if a save is required:if stats_manager.is_save_required():with open(STATS_FILE_PATH, 'w') as stats_file:stats_manager.save_to_csv(stats_file, base_timecode)finally:video_manager.release()if __name__ == "__main__":main()
Python Interface & Integration With Other Applications​pyscenedetect.readthedocs.io

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lvm 扩展根目录_转://如何增加linux根目录的磁盘空间(基于LVM)?

问题引出:在测试过程中替换so文件,报磁盘空间不足的错误。▲问题分析:由于当时系统部署架构的考虑,把软件和数据库部署在了同一台机器上,并且给了30G的磁盘空间。系统上占用磁盘空间的有2部分,一是软件本身…

图形基本变换c语言代码,图形变换-C语言课程设计.doc

学号《》课程设计报告图形变换网络工程班级:16(3)姓名:指导教师:成绩:计算机学院2017 年 5月 10日目录- 1 -1 设计要求- 2 -2 程序功能- 2 -3 核心算法- 2 -4 程序代码- 2 -5 运行结果- 2 -6 程序创新说明- 3 -参考文献- 3 -C语言…

stm32 isp下载官方软件android_OpenCanvas免费版下载_OpenCanvas绘图软件官方版下载7.0.25...

OpenCanvas 是一款小巧的CG手绘软件,让用户在使用数位板在电脑上绘图时,就像是在纸上手绘一样,可以画出极为细致的图像。OpenCanvas功能简捷、体积小巧、运行速度快,大家可以很快上手,非常适合入门级手绘爱好者使用。对…

centos7限制cpu使用_CentOS7 CPU隔离配置

1. 修改grubCentOS7中grub存放位置在:/etc/default/grub初始内容如下:1 [rootdellserver default]# catgrub2 GRUB_TIMEOUT53 GRUB_DISTRIBUTOR"$(sed s, release .*$,,g /etc/system-release)"4 GRUB_DEFAULTsaved5 GRUB_DISABLE_SUBMENUtrue…

c语言solaris中图形库,成功弄出simics下的CDE登录界面,与大家分享

simics下的cde可以在安装的时候,就启动图形console进行安装,让installer自动配置图形console,也可以先用默认的text console进行安装,之后再进行配置。我用的方法是先用text console安装,安装完成后再启动图形console。…

【转】图文详解YUV420数据格式

YUV格式有两大类:planar和packed。 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。 YUV,分为三个分…

python安装pip_在MAC下安装pip,并关联到相应的python版本

在MAC下安装pip,并关联到相应的python版本 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 不多说了,说就是电脑重…

java台球游戏设计原理_台球游戏的核心算法和AI(1)

前言:08年的时候, 写过一个台球游戏, 用的是java, 不过代码真的是用传说中的神器notepad写的(你信吗? 其实是用GVIM写的, ^_^), 很多类都在同一java文件中编写. 可见当时的JAVA水平真的不咋地, 时过进迁, 还是一样的不咋地.这边是当时的CSDN下载链接: java(台球游戏), 实现比较…

murmurhash

http://www.oschina.net/translate/state-of-hash-functions http://calvin1978.blogcn.com/articles/murmur.html https://zh.wikipedia.org/wiki/Murmur%E5%93%88%E5%B8%8C http://www.trueeyu.com/?p1325转载于:https://www.cnblogs.com/LyonLys/p/murmurhash.html

cat命令详解_好程序员Python培训之详解eval好与坏

好程序员Python培训之详解eval好与坏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们一起来看一下吧。eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的…

对代理商的评价怎么写_简历中的自我评价怎么写才能更吸引人?

有统计报告显示:HR每天看到的职位简历至少1000,每封简历的停留时间不过10秒。在这么短的时间内,让hr印象深刻,自我评价的价值就出现啦!不少人认为自我评价要幽默风趣,例如:“您都看到这儿了&…

thinkphp小技巧

thinkphp小技巧 if(IS_POST) _404("页面不存在",U("index")) //如果不是POST提交,则跳转到index。debug模式中不跳转,显示string。 if(IS_POST) halt("页面不存在") //更详…

android ui状态栏高度,Android--状态栏高度,导航栏高度,Window高度,DecorView高度,heightPixels...

1:DecorView的高度DecorView的高度代表的是: 整个装饰窗口的高度, 这个高度包括:状态烂的高度和导航栏的高度.(状态栏和导航栏通常叫做装饰窗口, 而ActionBar不属于装饰窗口)这个高度, 可以代表着整个玻璃屏幕的高度.2.Window的RootView的高度RootView的获取方式:getWindow().f…

sdk是什么_人脸识别在美颜SDK中存在什么意义?

在得益于短视频、直播平台的飞速发展下,美颜SDK也得到了很大的发展,变得越来越受欢迎。美颜SDK现在已经融入到我们的生活,是社交中必不可少的工具。现在人们对于美颜的要求越来越高,这就意味着美颜SDK的质量也要越来越好。而人脸识…

检查mysql的replication_MySQL Replication需要注意的问题

MySQL Replication 大家都非常熟悉了,我也不会写怎么搭建以及复制的原理,网上相关文章非常多,大家可以自己去搜寻。我在这里就是想总结一下mysql主从复制需要注意的地方。有人说主从复制很简单嘛,就是master,slave的se…

socket工具android,Android通过socket长连接实现推送

工具:Android studio软件方法及协议:socket、protobuf实现原理:通过本地建立一个socket,绑定服务器IP和port,然后connect,再开启另外线程定时心跳(注意这里的心跳不是自定义发送数据,而是采用so…

一行代码为UITextField添加收键盘功能

iOS开发中收键盘是十分常用的功能,只需一行代码即可为ViewController添加工具条收键盘功能 更重要的是使用catogory,无代码污染。 代码 // UITextFieldkeyboard.h // TextFieldKeyBord // // Created by luo.h on 15/10/8. // Copyright © 2015…

excel一列求和_【excel每日提升】Excel周日不排班!

【新朋友】点击标题下面蓝色字“王俊东“关注。 【老朋友】点击右上角,转发或分享本页面内容。excel系列课程excel特效系列课程!第1节:Excel有公式的单元格标记颜色,很简单!第2节:Excel删除空行&#xff0…

ubuntu没有指纹登录_ubuntu安装指纹识别驱动

无聊时在用lsusb突然发现笔记本的指纹识别被列了出来,就想着怎么装上一个指纹识别的软件,找一了一下,找到了解决的办法,添加下面的源,安装fingerprint-gui就可以了。sudo add-apt-repository ppa:fingerprint/fingerpr…

android 减速动画,Android View Animation

概述可译为视图动画&#xff0c;分为缩放动画平移动画渐变动画旋转动画Android系统中定义了一个抽象类Animation来定义这种视图动画&#xff0c;它的具体子类如下表&#xff1a;动画名称对应的子类xml中标签描述缩放动画ScaleAnimation< scale />S平移动画TranslateAnima…