news 2026/6/21 23:37:56

python_基于主视频删减片段并插入镜头视频

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python_基于主视频删减片段并插入镜头视频

python_基于主视频删减片段并插入镜头视频

importpyJianYingDraftasdraftfrompyJianYingDraftimporttrange,ClipSettings,tim def create_jianying_draft_from_clips(draft_name,main_video_path,delete_ranges,lens_info_dict,draft_folder_path):# 时间格式转换函数(处理00:00:01,640格式)def convert_time(time_str): h,m,s_ms=time_str.replace(',','.').split(':')returnf"{int(h)}h{int(m)}m{s_ms}s"# 1、创建草稿文件夹实例draft_folder=draft.DraftFolder(draft_folder_path)# 创建新草稿(使用主视频的分辨率)main_mat=draft.VideoMaterial(main_video_path)script=draft_folder.create_draft(draft_name,main_mat.width,main_mat.height,)# 2、计算出主视频的剩余目标区间并添加到草稿中def add_main_video_segments(): script.add_track(draft.TrackType.video,"video_track")# 创建视频轨道# 解析删除区间(转换为微秒,并按起始时间排序)parsed_deletes=[]forstart_str,end_strindelete_ranges:start=tim(convert_time(start_str))# 转换为微秒end=tim(convert_time(end_str))parsed_deletes.append((start,end))# 按起始时间排序,确保区间顺序正确(避免交叉区间导致计算错误)parsed_deletes.sort(key=lambda x: x[0])# 3. 获取视频总时长video_material=draft.VideoMaterial(main_video_path)total_duration=video_material.duration# 微秒# 4. 动态计算保留区间keep_ranges=[]prev_end=0# 上一个区间的结束位置fordelete_start,delete_endinparsed_deletes:# 若当前删除区间的起点 > 上一个区间的终点,说明中间有需要保留的部分ifdelete_start>prev_end: keep_ranges.append((prev_end,delete_start))# 更新上一个区间的终点为当前删除区间的终点prev_end=max(prev_end,delete_end)# 处理区间重叠的情况# 添加最后一个保留区间(从最后一个删除区间的终点到视频结束)ifprev_end<total_duration: keep_ranges.append((prev_end,total_duration))print("保留的视频片段时间区间",keep_ranges)# 5. 截取并拼接保留的片段current_start=0# 轨道上的起始位置(确保无缝拼接)forkeep_start,keep_endinkeep_ranges:ifkeep_start>=keep_end:continue# 跳过无效区间# 截取素材中[keep_start, keep_end)的片段segment=draft.VideoSegment(video_material,target_timerange=trange(current_start,keep_end-keep_start),# 轨道上的位置和时长source_timerange=trange(keep_start,keep_end-keep_start)# 素材中截取的区间)script.add_segment(segment,"video_track")current_start+=(keep_end-keep_start)# 更新下一段的起始位置# 3、添加镜头视频def add_lens_videos():forlens_name,lens_infoinlens_info_dict.items(): lens_video_path,lens_start_time=lens_info lens_video_material=draft.VideoMaterial(lens_video_path)start_time=tim(convert_time(lens_start_time))# 创建视频轨道script.add_track(draft.TrackType.video,track_name=lens_name,relative_index=1)# 创建镜头片段lens_segment=draft.VideoSegment(lens_video_material,trange(start_time,lens_video_material.duration),# 关键设置:强制缩放镜头视频以填充整个画布,确保完全覆盖clip_settings=ClipSettings(scale_x=main_mat.width/lens_video_material.width,# 按宽度比例缩放scale_y=main_mat.height/lens_video_material.height,# 按高度比例缩放))# 添加片段到对应轨道script.add_segment(lens_segment,lens_name)add_main_video_segments()add_lens_videos()script.save()draft_name="草稿名称4"main_video_path=r"C:\Users\Jordan\Downloads\【25-41格雷灰】【脚本_2】\【25-41格雷灰】【脚本_1】.mp4"delete_ranges=[("00:00:01,640","00:00:02,640"),("00:00:03,640","00:00:04,640")]lens_info_dict={"镜头A":[r"C:\Users\Jordan\Downloads\【25-41格雷灰】【脚本_2】\【25-41格雷灰】【镜头_拉链】.MP4","00:00:01,640"],"镜头B":[r"D:\Desktop\20251206223742_rec_.mp4","00:00:06,640"]} draft_folder_path=r"D:\download_software\JianyingPro Drafts"create_jianying_draft_from_clips(draft_name,main_video_path,delete_ranges,lens_info_dict,draft_folder_path)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 20:34:40

一起康康:SAP-WM无痛切WMS(下)

本人是入行SAP后勤5年的小卡拉米一枚&#xff0c;在男朋友的强烈建议下&#xff0c;把工作中遇到的案例和思考整理下来&#xff0c;通过CSDN和同行的大佬们交流学习~一、背景说明本小卡拉米所在的公司一直都是用SAP-WM&#xff0c;领导们终于下定决心明年搞WMS&#xff0c;那本…

作者头像 李华
网站建设 2026/6/20 15:50:15

19、Python文件处理与数据同步实用技巧

Python文件处理与数据同步实用技巧 1. 目录文件差异比较 在处理文件系统时,我们常常需要比较两个目录中的文件差异。可以通过将目录中的文件列表转换为集合,然后进行集合运算来实现。以下是一个示例代码: import osdirA = set(os.listdir("/tmp/dirA")) print…

作者头像 李华
网站建设 2026/6/20 21:46:22

23、跨平台系统管理与自动化脚本实践

跨平台系统管理与自动化脚本实践 1. 使用SSH密钥、NFS挂载源目录和跨平台Python管理系统 管理多样化的 nix 机器基础设施的一种有效方法是结合使用SSH密钥、共享的NFS挂载源目录和跨平台Python代码。以下是详细步骤: 1. 创建SSH公钥 *:在用于管理机器的系统上创建一个…

作者头像 李华
网站建设 2026/6/17 10:02:43

24、Python 在系统管理与云计算中的应用

Python 在系统管理与云计算中的应用 1. OS X 系统管理 在 OS X 系统中,我们可以通过 Python 进行一系列的系统管理操作。首先,可以获取系统中应用程序的进程名: processnames = sysevents.application_processes.name.get() processnames.sort(lambda x, y: cmp(x.lower…

作者头像 李华
网站建设 2026/6/21 5:19:01

PostgreSQL这么多优势,为什么还要使用MySQL

PostgreSQL&#xff08;简称 Postgres&#xff09;确实在许多方面表现出色&#xff1a;更严格的 SQL 标准遵守、更丰富的特性&#xff08;如 JSONB、GIS 支持、窗口函数、行级安全&#xff09;、更好的数据完整性和扩展性&#xff0c;以及近年来在开发者调查中&#xff08;如 S…

作者头像 李华
网站建设 2026/6/20 18:31:35

浅记线性同余方程(组)

线性同余方程就是形如 &#xfffd;&#xfffd;≡&#xfffd;(mod&#xfffd;)ax≡b(modm) 其中 &#xfffd;,&#xfffd;,&#xfffd;a,b,m 是给定的整数。解法#由同余的性质可知 &#xfffd;∣&#xfffd;&#xfffd;−&#xfffd;m∣ax−b 即 &#xfffd;&#x…

作者头像 李华