人类的时间码库。支持smpte非丢弃帧和丢弃帧以及许多其他时间码格式。

dayu-timecode的Python项目详细描述


dayu_timecode

Build Status

Timecode 的计算库。针对影视行业常见的各种timecode、frame 进行计算。有下面的特点:

  • 支持SMPTE NDF、SMPTE DF、DLP、SRT、FFMPEG、FCPX 多种格式的timecode
  • 目前支持到 fps=60 的高帧速率
  • 支持hour loop 和 负数时间
  • timecode、frame 之间自由转换
  • 支持和其他常用的数字类型进行运算,无需转换(int、float、Fraction)

如何安装

直接使用pip 即可安装

pip install -U dayu_timecode

DayuTimeCode 使用简介

fromdayu_timecodeimportDayuTimeCode# 针对各种输入,进行初始化smpte_ndf_tc=DayuTimeCode('01:02:03:12',fps=24.0)smpte_df_tc=DayuTimeCode('01:09:00;02',fps=29.97)srt_tc=DayuTimeCode('00:00:03,245',fps=25.0)dlp_tc=DayuTimeCode('01:12:22:136',fps=24.0)ffmpeg_tc=DayuTimeCode('00:02:12.24',fps=24.0)fcpx_tc=DayuTimeCode('1/24s',fps=24.0)frame_int_tc=DayuTimeCode(100,fps=25.0)frame_long_tc=DayuTimeCode(86400.2,fps=24.0)time_tc=DayuTimeCode([24,3],fps=24.0)# 时码、帧数转换assertsmpte_ndf_tc.timecode()=='01:02:03:12'assertsmpte_ndf_tc.frame()==89364.00# 得到时码中 小时、分钟、秒、帧数的分量assertsmpte_ndf_tc.hour==1assertsmpte_ndf_tc.minute==2assertsmpte_ndf_tc.second==3assertsmpte_ndf_tc.sub_frame==12a=DayuTimeCode('01:02:03:12',fps=24.0)b=DayuTimeCode(86400.2,fps=24.0)# 加法、减法、乘法、除法printa+b# <DayuTimeCode>(02:02:03:12, 175764.20, 24.00)printa-b# <DayuTimeCode>(00:02:03:12, 2963.80, 24.00)printa*3# <DayuTimeCode>(03:06:10:12, 268092.00, 24.00)printa/2# <DayuTimeCode>(00:31:01:18, 44682.00, 24.00)# 各种比较方式printa==bprinta>bprinta>=bprinta<bprinta<=bprinta!=b# 类型转换printfloat(a)printint(a)# 变速(指定一个起点,以及变速的速度)start_tc=DayuTimeCode(0)printa.retime(start_tc,2.0)# 表示从0 开始,两倍速播放后的timecode

DayuTimeRange 使用简介

DayuTimeRange 由两个DayuTimeCode 组成的一个时间区域。

# 初始化start=DayuTimeCode(0)end=DayuTimeCode(100)time_range=DayuTimeRange(start,end)# zero_length_range = DayuTimeRange(DayuTimeCode(10), DayuTimeCode(10))    # 会出错,因为start 和end 都是同一个时间# 访问属性printtime_range.start# 起点printtime_range.end# 终点printtime_range.duration.frame()# 获得 frame 长度printlen(time_range)# 获得 frame 长度的另一种方法# 加法、减法、乘法、除法printtime_range+10# 表示整个time_range 向右移动 10 frameprinttime_range-20# 表示整个time_range 向左移动 20 frameprinttime_range*2# 表示整个time_range 起点不动,长度变成原来的 2 倍printtime_range/3# 表示整个time_range 起点不动,长度变成原来的 三分之一# 处理handletime_range.handle(10,10)# 表示time_range 的start 向左增加 10 frame,end 向右增加 10 frame# 切镜头处理cut_point=DayuTimeCode(20)printtime_range.cut(cut_point)# 得到两个区域 (0 - 20), (20 - 100)# 判断timecode 或者一个time range 是否在当前timerange 的内部sample_tc=DayuTimeCode(20)sample_time_range=DayuTimeRange(DayuTimeCode(30),DayuTimeCode(70))assertsample_tcintime_rangeassertsample_time_rangeintime_range# 两个DayuTimeRange 之间的交集、并集、差异 运算a=DayuTimeRange(DayuTimeCode(0),DayuTimeCode(100))b=DayuTimeRange(DayuTimeCode(50),DayuTimeCode(150))printa&b# 二者之间交叠的部分 (50 - 100)printa|b# 二者的并集运算 (0 - 150)printa^b# 二者的差异运算  (0 - 50), (100 - 150)# 遍历time range 内的所有时码fortcintime_range:printtc# 会逐一打印 从 DayuTimeCode(0) ~ DayuTimeCode(99)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaAnt:如何减去两个属性(包含时间戳)?   java是否可以使用MockRestServiceServer在Android上测试RestTemplate?   不允许java IntentReceiver组件绑定到服务   typescript通过POST从Java调用Firebase函数   java如何在svg到png的转换中改变前景色?   继承最佳实践Java   JavaJahia6.6CMS编写自己的管理器   计算CSV文件中行数的java内置方法?   Eclipse插件开发:扩展默认Java编辑器/文本悬停   (Java)开发人员这么做有什么目的吗?   java为javaFx表视图中的每一行动态填充组合框列表   java泛型。创建两个对象并将其添加到另一个对象   设计模式Java重构几乎相同的方法   java Android相对布局并隐藏其他视图定义的位于其上方的子级   java如何在多个部分中解析和索引一个大文件,以便在inputstream中读取一个文件时消耗更少的内存?   java NumberFormat为某些地区的货币显示错误的十进制标记格式