首页 > 编程语言 >python智能切分视频画面

python智能切分视频画面

时间:2023-09-27 20:11:36浏览次数:29  
标签:视频 shijian python list 切分 video print path line

#pip install scenedetect opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

from scenedetect.video_manager import VideoManager
from scenedetect.scene_manager import SceneManager
from scenedetect.stats_manager import StatsManager
from scenedetect.detectors.content_detector import ContentDetector
from moviepy.editor import *


# 获取所有文件
def getAllFiles(fire_dir):
    filepath_list = []
    for root,folder_names,file_names in os.walk(fire_dir):
        for file_name in file_names:
            file_path = root+os.sep+file_name
            filepath_list.append(file_path)
            print(file_path)
    print(filepath_list)
    return filepath_list


#获取智能画面分割的时间或者秒数
def find_scenes(video_path):
    video_manager = VideoManager([video_path])
    stats_manager = StatsManager()
    scene_manager = SceneManager(stats_manager)

    # 使用contect-detector
    scene_manager.add_detector(ContentDetector())

    shijian_list = []

    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("scene_list:")
        print(scene_list)



        print('List of scenes obtained:')
        for i, scene in enumerate(scene_list):
            shijian_list.append([scene[0].get_timecode(),scene[1].get_timecode()])
            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()

    return shijian_list

#将时间字符转为毫秒数
#字符形式:00:00:06.867
def zifuToHaoMiaoStart(zifu):
    line = zifu.split(".")
    print("line_list")
    print(line)
    haomiao = int(line[1])
    line = line[0].split(":")
    seconds = int(line[0]) * 3600 + int(line[1]) * 60 + int(line[2])
    zuizong_miao = (seconds*1000+haomiao)/1000
    print(zuizong_miao)
    return zuizong_miao

#将时间字符转为毫秒数
#字符形式:00:00:06.867
def zifuToHaoMiaoEnd(zifu):
    line = zifu.split(".")
    print("line_list")
    print(line)
    haomiao = int(line[1])
    line = line[0].split(":")
    seconds = int(line[0]) * 3600 + int(line[1]) * 60 + int(line[2])
    zuizong_miao = (seconds*1000+haomiao-1)/1000
    print(zuizong_miao)
    return zuizong_miao

#切分一个画面
def getOneHuaMian(start_time_str,end_time_str,yuan_video_path,num):
    # 剪辑'00:00:00.000' - '00:00:06.867'
    start_time_str = start_time_str
    start_sec = zifuToHaoMiaoStart(zifu=start_time_str)
    end_time_str = end_time_str
    end_sec = zifuToHaoMiaoEnd(zifu=end_time_str)
    video_path = yuan_video_path
    video = CompositeVideoClip([VideoFileClip(video_path).subclip(start_sec, end_sec)])
    #获取文件后缀
    wenjianming = os.path.splitext(video_path)[0]
    createDir(wenjianming)  #创建一个和视频同名的文件夹
    houzuo = os.path.splitext(video_path)[-1]
    print("文件名:")
    print(wenjianming)
    print("文件后缀")
    print(houzuo)
    danchumingzi = wenjianming.split("\\")[-1]
    print("单纯文件名字:")
    print(danchumingzi)


    video.write_videofile("%s//%s_%s.mp4" % (wenjianming,danchumingzi,str(num)))

#如果不存在就创建
def createDir(file_dir):
    # 如果不存在文件夹,就创建
    if not os.path.isdir(file_dir):
        os.mkdir(file_dir)

#切分一个视频
def clipOneVideo(video_path):
    shijian_list = find_scenes(video_path) #多组时间列表
    print(shijian_list)
    shijian_list_len = len(shijian_list)
    # duozu_shijian_list = []   #多组时间列表
    # if shijian_list_len>1:
    #     for i in range(0,shijian_list_len-1):
    #         yizu_shijian_list = []   #一组时间列表
    #         yizu_shijian_list.append(shijian_list[i])
    #         yizu_shijian_list.append(shijian_list[i+1])
    #         duozu_shijian_list.append(yizu_shijian_list)
    # print("duozu_shijian_list:")
    # print(duozu_shijian_list)
    #
    # duozu_shijian_list_len = len(duozu_shijian_list)
    print("总共有%s个场景" % str(shijian_list_len))
    for i in range(0,shijian_list_len):
        start_time_str = shijian_list[i][0]
        end_time_str = shijian_list[i][1]
        getOneHuaMian(start_time_str, end_time_str, yuan_video_path=video_path, num=i+1)
        print("第%s个镜头剪切完成" % str(i+1))
        print("总共有%s个场景,第%s个镜头剪切完成" % (str(shijian_list_len),str(i+1)))


#循环处理一个文件夹下所有的视频文件
def getAllVideo(gen_dir):
    all_file_list = getAllFiles(gen_dir)
    for file_name in all_file_list:
        if ".mp4".lower() in file_name.lower():
            clipOneVideo(file_name)


if __name__ == '__main__':
    gen_dir = r"F:\存储盘\古风美女素材下载\筛选出的可用的视频"
    getAllVideo(gen_dir)
    # video_path = r'D:\PycharmProjects\cigenpic\视频切割\2023091911502.mp4'
    # clipOneVideo(video_path)

直接可运行,提示没有相应的模块的,可以pip install 安装一下即可

标签:视频,shijian,python,list,切分,video,print,path,line
From: https://www.cnblogs.com/jingzaixin/p/17734225.html

相关文章

  • 水果识别系统Python+TensorFlow+卷积神经网络算法【图像识别】
    引言随着科技的发展,我们生活中的各种便利工具日益增加。例如,你有没有想过,当你在超市里看到一个陌生的水果,却不知道它是什么名字时,有一个工具可以帮你识别出来?今天,我要为大家介绍一种基于Python的水果识别系统。这个系统不仅识别准确,还具有友好的用户界面。下面,让我们一起探索这个......
  • python+unittest跳过测试和预期失败
    在运行测试时,有时需要直接跳过某些测试用例,或者当测试用例符合某个条件时跳过测试,又或者直接将测试用例设置为失败。、importunittestfromleap_yearimportLeapYearclassTestLeapYear(unittest.TestCase):@unittest.skip("直接跳过测试")deftest_2000(self......
  • 4G5G智能安全帽_视频监测定位气体检测智能安全帽头盔
    智能安全帽产品是一款集成了先进技术的智能穿戴设备,以改善现场操作人员的工作体验,提高工作效率和安全保障。该产品采用工业级高清晰度摄像头和5G/4G/WIFI网络,以及摄像头、语音、定位、通信主板等模块,实现了高清视频采集、语音通讯、对讲、GPS定位、电子围栏、安全预警等多种功能的......
  • 安防视频平台EasyCVR视频调阅全屏播放显示异常是什么原因?
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的能......
  • Python中super()的运作机制
    Python中super()的运作机制:super()的定义:defsuper(cls,instance):mro=inst.__class__.mro()returnmro[mro.index(cls)+1]mro(Methodresolutionorder)是python在多继承类中查找目标函数的策略,其采用的是广度优先算法,可通过类的mro方法查看。如下方代码:cla......
  • pipreqs:Python导出项目依赖包
    许多教程使用的是pipfreeze>requirements.txt指令,但是这个指令只能检索当前虚拟环境中安装的包。要想自动检索项目文件中的依赖包要使用pipreqs,使用方法如下:首先安装pipreqspipinstallpipreqs使用在项目根目录下执行命令pipreqs./#生成requirements.txtpip......
  • 基于AI算法+视频监控技术的智慧幼儿园解决方案
    在当今社会,为了孩子的健康启蒙教育,很多家长都会选择将孩子托付给幼儿园管理,但是,幼儿有着年龄小、难控制、易发生突发情况等特点,那么,如何能最大限度的保障幼儿在学校的安全呢?TSINGSEE青犀视频融合平台给出了方案。1、安全监控在校园部署监控摄像头并覆盖幼儿园的重要区域,如入口、......
  • 赛事星平台的作答脚本Python实现(适用于刷时间)
    灵感来源:白嫖某文理的一次答题竞赛,前一百名有奖品正好缺个蓝牙耳机索性就刷个时间白嫖一波吧.咳咳,正式开始分享咯.准备工作:谷歌浏览器以及自带开发者工具页面分析:由于此次白嫖活动已经结束,就采用其他竞赛URL进行分析,原理相同.URL:https://saishi.cnki.net/MatchInde......
  • python基础:模块和包
    一模块和包我们常常编辑保存的py文件就是一个个模块,模块名就是文件名不要后缀.py包是模块的集合,也可以将包看作一个目录,但该目录必须包含文件__init__.py(该文件可为空或有其它内容),python才会将该目录当作包来处理二模块和包的导入1模块的导入(1)导入形式1importmodule......
  • AI智能视频监控技术如何助力美好乡村建设?
    随着城市化发展,很多乡村设施也在逐渐完善,智能监控也成了乡村发展必不可少的一环,智能视频监控应该在乡村建设里如何发挥作用呢?1、有效提升安全意识通过在乡村重要区域、公共场所、道路等设置智能视频监控设备,可以有效监控和防范潜在的安全威胁,如盗窃、破坏等。这一举措将提高居民......