开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 1

skyqi/python_pika

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (2)
master
distribute
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (2)
master
distribute
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (2)
master
distribute
python_pika
/
server
/
SceneDetectx.py
python_pika
/
server
/
SceneDetectx.py
SceneDetectx.py 6.51 KB
一键复制 编辑 原始数据 按行查看 历史
skyqi035 提交于 2024年05月07日 10:21 +08:00 . 单用户处理
import datetime
import os
import random
import subprocess
import time
from scenedetect import VideoManager, SceneManager, ContentDetector
import common
# 场景检测
class SceneDetector:
def __init__(self, in_filename, create_at, callback):
if os.path.exists(in_filename) is None:
print(f"文件或目录 '{in_filename}' 不存在。")
# 检查是否是一个文件
if os.path.isfile(in_filename) is None:
print(f" '{in_filename}' 不是一个文件。")
self.in_filename = in_filename
self.config = common.readConfig()
self.api_key = self.config.get('chatgpt', 'zhipu_apikey')
out_directory = self.config.get('scene_out_directory', 'out_root_directory')
out_directory = out_directory + self.config.get('scene_out_directory', 'out_img_directory')
out_directory = out_directory + datetime.datetime.now().strftime("%Y%m%d")
common.create_directory(out_directory)
self.create_at = create_at
self.out_directory = out_directory
self.video_manager = VideoManager(in_filename)
self.scene_manager = SceneManager()
self.scene_manager.add_detector(ContentDetector())
self.rel_callback = callback
def get_scene(self):
self.video_manager.start()
self.scene_manager.detect_scenes(frame_source=self.video_manager)
scene_list = self.scene_manager.get_scene_list()
# print("38 >>>>>>")
# print(scene_list)
if scene_list == []:
print("没有检测到场景,取头帧")
return scene_list
# def get_scene2(self):
# ## 加入时间间隔
# self.video_manager.start()
# self.scene_manager.detect_scenes(frame_source=self.video_manager)
# scene_list = self.scene_manager.get_scene_list()
# time_format = "%H:%M:%S"
# filtered_time_series = []
# previous_time = None
# for i, scene in enumerate(scene_list):
# end_frame = str(scene[1])
# end_frame_str = end_frame.split('.')[0]
# if i == 0:
# current_time = datetime.datetime.strptime(end_frame_str, time_format)
# else:
# previous_time = datetime.datetime.strptime(end_frame_str, time_format)
#
# if previous_time is not None:
# time_delta = current_time - previous_time
# if abs(time_delta.total_seconds()) > 60:
# filtered_time_series.append(end_frame_str)
# current_time = previous_time
# else:
# previous_time = None
#
# self.video_manager.release()
# return filtered_time_series
def screenshot2(self, filtered_time_series):
_now = datetime.datetime.now().strftime("%H%M%S")
if (filtered_time_series is None or len(filtered_time_series) == 0):
# 未检测到场景点
print('line:79,未检测到场景点 >>>> ')
random_number = random.randint(100, 999)
out_filename = f'{self.out_directory}/scene_{_now}_{random_number}.jpg'
print(' screenshot 输入的文件:')
print(self.in_filename)
print(' screenshot 输出的文件:')
print(out_filename)
# 下面不能用了,报错
# ffmpeg_cmd = [
# 'ffmpeg',
# '-loglevel panic -i', self.in_filename,
# '-frames:v', '1',
# '-filter:v', 'scale=-1:360',
# '-q:v', '2',
# '-y',
# out_filename
# ]
# ffmpeg_cmd = f'ffmpeg -loglevel panic -i "{self.in_filename}" -frames:v 1 -filter:v "scale=-1:360" -q:v 2 -y {out_filename}'
# result = subprocess.run(ffmpeg_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
ffmpeg_cmd = f'ffmpeg -loglevel panic -i "{self.in_filename}" -frames:v 1 -filter:v "scale=-1:360" -q:v 2 -y {out_filename}'
subprocess.run(ffmpeg_cmd, shell=True, check=True)
# print("ffmpeg_cmd >>>>")
# print(ffmpeg_cmd)
self.rel_callback(out_filename, self.in_filename, self.create_at)
return
else:
for i, start_frame in enumerate(filtered_time_series):
out_filename = f'{self.out_directory}/scene_{_now}_{i:03d}.jpg'
# print("74 >>>>")
# print(self.in_filename)
# print("out_filename >>>>")
# print(out_filename)
# print("start_frame >>>>")
# print( str(start_frame))
ffmpeg_cmd = [
'ffmpeg',
'-loglevel panic -i', self.in_filename,
'-ss', str(start_frame),
'-frames:v', '1',
'-filter:v', 'scale=-1:360',
'-q:v', '2',
'-y',
out_filename
]
result = subprocess.run(ffmpeg_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
# print(result.stdout)
# 等1s
# subprocess.run(['sleep', '1'])
self.rel_callback(out_filename, self.in_filename, self.create_at)
return
def screenshot(self, filtered_time_series):
_now = datetime.datetime.now().strftime("%H%M%S")
# 不检测场景点
print('line:79,未检测到场景点 >>>> ')
random_number = random.randint(100, 999)
out_filename = f'{self.out_directory}/scene_{_now}_{random_number}.jpg'
print(' screenshot 输入的文件:')
print(self.in_filename)
print(' screenshot 输出的文件:')
print(out_filename)
ffmpeg_cmd = f'ffmpeg -loglevel panic -i "{self.in_filename}" -frames:v 1 -filter:v "scale=-1:360" -q:v 2 -y {out_filename}'
subprocess.run(ffmpeg_cmd, shell=True, check=True)
# print("ffmpeg_cmd >>>>")
# print(ffmpeg_cmd)
self.rel_callback(out_filename, self.in_filename, self.create_at)
return
def process_video(self):
filtered_time_series = self.get_scene()
self.screenshot(filtered_time_series)
print("== process_video end ==")
print(' [*] Waiting for messages. To exit press CTRL+C')
# Usage
# if __name__ == '__main__':
# in_filename = '../video/video.mp4'
# out_directory = './output'
# scene_detector = SceneDetector(in_filename, out_directory)
# scene_detector.process_video()
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

项目名称:视频场景提取与识别系统 本项目是一个基于Python的视频场景提取和识别系统,它通过RabbitMQ消息队列协调任务流程,使用PySceneDetect进行视频场景分析,并将提取的场景保存为PNG文件,最后通过AI大模型进行场景文字分析。
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/skyqi/python_pika.git
git@gitee.com:skyqi/python_pika.git
skyqi
python_pika
python_pika
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /