使用pyscenedetect进行视频场景切割

1. 简介

在视频剪辑有转场一词:一个视频场景转换到另一个视频场景,场景与场景之间的过渡或转换,就叫做转场。
本篇介绍一个强大的开源工具PySceneDetect,它是一款基于opencv的视频场景切换检测和分析工具,项目地址: https://github.com/Breakthrough/PySceneDetect

2. 创建使用环境

conda create -n pyscenedetect python=3.7
conda activate pyscenedetect
conda install ffmpeg -y
pip install scenedetect opencv-python

3. 命令行测试

pyscenedetect提供了一个命令行工具,可以通过-h参数来查看它的帮助信息

Usage: scenedetect [OPTIONS] COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]...For example:scenedetect -i video.mp4 -s video.stats.csv detect-content list-scenesNote that the following options represent [OPTIONS] above. To list theoptional [ARGS] for a particular COMMAND, type `scenedetect help COMMAND`.You can also combine commands (e.g. scenedetect [...] detect-content save-images --png split-video).Options:-i, --input VIDEO             [Required] Input video file. May be specifiedmultiple times to concatenate several videostogether. Also supports image sequences andURLs.-o, --output DIR              Output directory for all files (stats file,output videos, images, log files, etc...).-f, --framerate FPS           Force framerate, in frames/sec (e.g. -f29.97). Disables check to ensure that allinput videos have the same framerates.-d, --downscale N             Integer factor to downscale frames by (e.g. 2,3, 4...), where the frame is scaled to width/Nx height/N (thus -d 1 implies no downscaling).Each increment speeds up processing by afactor of 4 (e.g. -d 2 is 4 times quicker than-d 1). Higher values can be used for highdefinition content with minimal effect onaccuracy. [default: 2 for SD, 4 for 720p, 6for 1080p, 12 for 4k]-fs, --frame-skip N           Skips N frames during processing (-fs 1 skipsevery other frame, processing 50% of thevideo, -fs 2 processes 33% of the frames, -fs3 processes 25%, etc...). Reduces processingspeed at expense of accuracy.  [default: 0]-m, --min-scene-len TIMECODE  Minimum size/length of any scene. TIMECODE canbe specified as exact number of frames, a timein seconds followed by s, or a timecode in theformat HH:MM:SS or HH:MM:SS.nnn  [default:0.6s]--drop-short-scenes           Drop scenes shorter than `--min-scene-len`instead of combining them with neighbors-s, --stats CSV               Path to stats file (.csv) for writing framemetrics to. If the file exists, any metricswill be processed, otherwise a new file willbe created. Can be used to determine optimalvalues for various scene detector options, andto cache frame calculations in order to speedup multiple detection runs.-v, --verbosity LEVEL         Level of debug/info/error information to show.Setting to none will suppress all outputexcept that generated by actions (e.g.timecode list output). Can be overriden by`-q`/`--quiet`.-l, --logfile LOG             Path to log file for writing applicationlogging information, mainly for debugging.Make sure to set `-v debug` as well if you aresubmitting a bug report.-q, --quiet                   Suppresses all output of PySceneDetect exceptfor those from the specified commands.Equivalent to setting `--verbosity none`.Overrides the current verbosity level, even if`-v`/`--verbosity` is set.-h, --help                    Show this message and exit.Commands:about             Print license/copyright info.detect-content    Perform content detection algorithm on input video(s).detect-threshold  Perform threshold detection algorithm on input video(s).export-html       Exports scene list to a HTML file.help              Print help for command (help [command]).list-scenes       Prints scene list and outputs to a CSV file.save-images       Create images for each detected scene.split-video       Split input video(s) using ffmpeg or mkvmerge.time              Set start/end/duration of input video(s).version           Print version of PySceneDetect.

找个包含多场景切换的视频测试一下,执行命令

scenedetect -i lldq.mp4 detect-content split-video

脚本运行结束后,会在当前目录生成每个镜头的视频片段,每个视频片段只包含一个场景:
在这里插入图片描述

如果想从视频的某个时间点开始,可以使用参数time:

scenedetect -i lldq.mp4 time -s 5s detect-content split-video

还可以将检测后的场景图片保存下来,同时生成统计文件csv:

scenedetect.exe -i lldq.mp4 -o video_scenes detect-content save-images

4. 场景切割算法

pyscenedetect使用了2种场景切割的方法,它们是detect-content和detect-threshold,除此之外,它还支持自定义检测算法。

  • detect-content
    顾名思义,这种方法就是根据前后图像的内容来进行判断,与我们常识中所说的视频转场是一样的。算法会根据前后2帧的视频数据,计算出它们不同的区域大小,如果这个区域大于某个预先设定的值(默认是30,可以通过–threshold参数来指定),那么就认为场景已经切换了
  • detect-threshold
    这是比较传统的检测方法,有点像ffmpeg中的blackframe滤镜。它会用特定的值去跟数据帧的亮度比较进行,如果大于某个预先设定的值,就认为场景已经切换了。在pyscenedetect中,这个值是由视频帧的每个像素的RGB的平均值计算而来
  • 自定义检测算法
    所有的检测算法必须继承自SceneDetector这个类
from scenedetect.scene_detector import SceneDetectorclass CustomDetector(SceneDetector):"""CustomDetector class to implement a scene detection algorithm."""def __init__(self):passdef process_frame(self, frame_num, frame_img, frame_metrics, scene_list):"""Computes/stores metrics and detects any scene changes.Prototype method, no actual detection."""returndef post_process(self, scene_list):pass

类中主要有2个方法,process_frame负责处理所有的视频帧;post_process是可选的,它在process_frame结束后执行,主要用来做一些后期处理,比如场景切换数据的文件保存。

下面主要来看看process_frame方法,它有如下几个重要参数

更加实现细节方面,可以参考源码目录下的scenedetect/detectors/content_detector.py或scenedetect/detectors/threshold_detector.py

  • frame_num: 当前处理到的帧数
  • frame_img: 返回的帧数据,格式是numpy数组
  • frame_metrics: 保存检测算法计算结果的字典
  • scene_list: 视频中所有场景切换包含的帧数列表

5. Python API的使用

如果需要在自己的代码中去使用pyscenedetect,除了使用命令行调用的方式外,pyscenedetect还提供了基于python的API。

下面是一个简单的demo,程序读取视频文件,使用content-detector算法进行检测,最后将所有场景的开始时间、结束时间和总的帧数分别打印输出。

from scenedetect.video_manager import VideoManager
from scenedetect.scene_manager import SceneManager
from scenedetect.stats_manager import StatsManager
from scenedetect.detectors.content_detector import ContentDetectordef find_scenes(video_path):video_manager = VideoManager([video_path])stats_manager = StatsManager()scene_manager = SceneManager(stats_manager)# 使用contect-detectorscene_manager.add_detector(ContentDetector())try:video_manager.set_downscale_factor()video_manager.start()scene_manager.detect_scenes(frame_source=video_manager)scene_list = scene_manager.get_scene_list()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(),))finally:video_manager.release()if __name__ == '__main__':find_scenes('lldq.mp4')

运行输出如下:
在这里插入图片描述

6. 参考

https://github.com/Breakthrough/PySceneDetect
https://pyscenedetect.readthedocs.io/projects/Manual/en/latest/
https://blog.gdeltproject.org/using-ffmpegs-blackdetect-filter-to-identify-commercial-blocks/
https://blog.csdn.net/djstavaV/article/details/118215641
https://blog.csdn.net/daydayup858/article/details/128256460
http://scenedetect.com/projects/Manual/en/latest/

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

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

相关文章

龙迅#LT8311X3 USB中继器应用描述!

1. 概述 LT8311X3是一款USB 2.0高速信号中继器,用于补偿ISI引起的高速信号衰减。通过外部下拉电阻器选择的编程补偿增益有助于提高 USB 2.0 高速信号质量并通过 CTS 测试。 2. 特点 • 兼容 USB 2.0、OTG 2.0 和 BC 1.2• 支持 HS、FS、LS 信令 • 自动检测和补偿 U…

界面控件DevExpress WPF导航组件,助力升级应用程序用户体验!(上)

DevExpress WPF的Side Navigation(侧边导航)、TreeView、导航面板组件能帮助开发者在WPF项目中添加Windows样式的资源管理器栏或Outlook NavBar(导航栏),DevExpress WPF NavBar和Accordion控件包含了许多开发人员友好的…

Python OS模块常用方法整理

os模块包含了普遍的操作系统和文件目录方法 引入类库 首先需要引入类库 import os 常用方法 OS模块方法 获取操作系统类型 nt->window:Microsoft Windows NT posix->Linux/Mac OS: Portable Operating System Interface of UNIX(可移植操作系统接口&…

深入理解Java核心技术:Java工程师的实用干货笔记

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 在Java工程师的职业生涯中,深入理解…

K8S部署nginx并且使用NFS存储数据

安装NFS 在master安装NFS systemctl start nfs-server修改配置 /etc/exports /data *(rw,no_root_squash,no_all_squash,sync)目录为 /data 允许所有地址访问 验证下 [rootmaster nginx]# showmount -e 192.168.57.61 Export list for 192.168.57.61: /data *共享可以正常…

基于 springboot + vue 健身房管理系统 毕业设计-附源码

qq(2829419543)获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:springboot 前端:采用vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件&#xf…

使用 husky 和 lint-staged 配置代码检查工作流

提交代码前做代码检查 如果我们不做代码检查,有时候有代码错误,我们不能及时发现,只有打开代码块才知道,这样在提交仓库时也会忽略,很危险。 1、初始化 git仓库,执行 git init 即可 2、初始化 husky 工具配…

12月5日作业

以下是一个简单的比喻,将多态概念与生活中的实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在,动物园里有一位讲解员&…

面向注解编程—Spring 注解看这一篇就够了(2)

面向注解编程—Spring注解大全(AOP篇) AOP英文全称:Aspect Oriented Programming(面向切面编程、面向方面编程),其实说白 了,面向切面编程就是面向特定方法编程。 AOP的作用:在程序…

排序的概念及其运用

1.排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序…

⭐ Unity里 用Shader 去做实时动态绿幕抠图

1.先看一下效果 a.这是背景图片 b.抠完图之后(这里用的是扣去白色的) 2.shader代码如下 Shader "UniversalChromaKey" {Properties{_MainTex("Base (RGB)", 2D) "white" {}_Sens("Sensibilidad", Range(0,.9)) .3_Cutoff("R…

java:slf4j、log4j、log4j2、logback日志框架的区别与示例

文章目录 背景SLF4J - 简单日志门面:Log4j - 强大而古老的日志框架:Log4j2 - Log4j的升级版:Logback - Log4j的继任者:比较Springboot集成slf4j、log4j2参考 背景 在Java开发中,日志记录是一个不可或缺的组成部分。为了满足不同的需求,Java社区涌现出多…

selenium python 实现基本自动化测试的示例代码

安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回…

nodejs+vue+elementui校园演出赞助艺术资源管理系统

系统主要分为系统管理员和学生、校外人员三个部分,系统管理员主要功能包括:首页、个人中心、学生管理、校外人员管理、社团信息管理、校内演出管理、校外商演管理、系统管理;基本上实现了整个基于vue的校园艺术资源管理系统的设计与实现信息管…

$sformat在仿真中打印文本名的使用

在仿真中,定义队列,使用任务进行函数传递,并传递文件名,传递队列,进行打印 $sformat(filename, “./data_log/%0d_%0d_%0d_0.txt”, f_num, lane_num,dt); 使用此函数可以自定义字符串,在仿真的时候进行文件…

EA电源维修EA-PS 9750-60直流电源维修Elektro-Autοmαtik

德国EA Elektro-Autοmαtik全系列电源维修EA-PS 80003U系列 这些μ-处理器控制和可编程重型的实验室电源提供了一个灵活的“自动量程”无论是高电压或高电流在额定功率输出,允许使用。配件包括数字编码器可用于设置电压,电流和功率,完整的4…

nodejs+vue+ElementUi小区社区公寓宿舍智能访客预约系统

该系统将采用B/S结构模式,前端部分主要使用html、css、JavaScript等技术,使用Vue和ElementUI框架搭建前端页面,后端部分将使用Nodejs来搭建服务器,并使用MySQL建立后台数据系统,通过axios完成前后端的交互,…

绘制纹理C++

用数学和C绘制一些纹理 sin(x * x y * y) int main() {int width 400; // 宽度int height 400; // 高度Mat texture Mat::zeros(height, width, CV_8UC1);for (int y 0; y < height; y) {for (int x 0; x < width; x) {int value static_cast<int>(255 * …

基于go文件同步工具的升级迭代

介绍 同样&#xff0c;该工具适用于多个项目不同版本的维护&#xff0c;文件更新和新增的同步(自动创建目录)&#xff0c;支持自动提交svn。 升级迭代 之前的文件同步工具&#xff0c;依赖chrome和http包&#xff0c;有时候js加载页面不太稳定&#xff0c;所以有空闲就升级迭…

什么是TDR(威胁检测与响应)

网络安全是被动和主动方法的混合体。过去&#xff0c;企业往往局限于被动的方法&#xff0c;随着合规性和安全策略越来越受到重视&#xff0c;主动方法也越来越受到关注。与其他行业相比&#xff0c;网络安全是高度动态的&#xff0c;网络安全团队采用任何可以帮助他们优化的新…