moviepy音视频剪辑:与time时间线相关的变换函数freeze_region、make_loopable、speedx、time_mirror、time_symmetrize介绍

深入了解Arduino的loop()函数 在Arduino中,loop() 函数是一个特殊的函数,通常用于执行主要的代码逻辑,该函数在Arduino开发板上无限循环运行。。但是,由于Arduino的内存和处理能力有限,通常不建议在loop() 函数中编写过多的代码,因为可能会导致内存溢出或程序响应时间过长。然而,如果你确实需要在loop() 函数中编写很多代码,可以采取一些优化措施,例如将代码模块化,使用函数和条件语句来管理程序流程,以减少代码的复杂性。Arduino Uno的内存只有2KB,不够容纳如此庞大的loop()函数。 阅读详情
☞ ░ 前往老猿Python博文目录 ░

一、引言

在《moviepy音视频剪辑:moviepy中的剪辑基类Clip详解》介绍了剪辑基类的fl、fl_time、fx方法,在《moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解》介绍了fl_image和subfx方法,在《Python+moviepy音视频剪辑:视频帧数据的本质、Clip的fl方法进行变换处理的原理以及滚屏案例》及《moviepy音视频剪辑:使用fl_time进行诸如快播、慢播、倒序播放等时间特效处理的原理和可能遇到的坑》分别介绍了fl和fl_time进行视频剪辑变换的原理及使用方法。

实际上moviepy所有视频变换的方法都是以Clip的fl方法为基础衍生出来的,最后都会调用到fl方法实施真正的变换,只是变换处理的逻辑由上面方法提供,如fl_time就是针对剪辑的时间线进行变换、fl_image就是针对剪辑的内容进行变换,开发者也可以根据自己的需要实现自己的变换方法。

为了支持一些常规的变换处理,moviepy提供了一系列常用的变换函数,开发者可以直接使用这些方法进行变换,这些函数都在moviepy.video.fx包下,基本上一个函数就是一个文件,在moviepy.editor通过import moviepy.video.fx.all as vfx中将这些函数都加载到了vfx模块下,可以直接通过vfx.函数名方式调用,也可以通过VideoClip类+函数名直接调用,这是因为在moviepy.editor执行录入如下语句:

for method in [
    "afx.audio_fadein",
    "afx.audio_fadeout",
    "afx.audio_normalize",
    "afx.volumex",
    "transfx.crossfadein",
    "transfx.crossfadeout",
    "vfx.crop",
    "vfx.fadein",
    "vfx.fadeout",
    "vfx.invert_colors",
    "vfx.loop",
    "vfx.margin",
    "vfx.mask_and",
    "vfx.mask_or",
    "vfx.resize",
    "vfx.rotate",
    "vfx.speedx",
]:

    exec("VideoClip.%s = %s" % (method.split(".")[1], method))

将这些函数动态赋值给了VideoClip的同名实例变量,但这些实例变量是在moviepy.editor中定义的,因此在VideoClip的派生子类中不能这样使用。

这些函数的调用可以通过Clip的fx方法和VideoClip的subfx方法进行调用,具体调用语法请参考上面介绍的博文内容。

由于变换函数比较多,老猿将其以自己的标准分为了大小变换、时间变换、颜色变换、内容变换四个部分分别介绍,这种分法不一定非常对,比如有些部分的变换可能既和时间相关又和内容相关,两个归类都可以,大家就不必深究了。

本文主要介绍和剪辑时间线相关的变换函数。

二、freeze函数

freeze函数用于将指定时刻位置的帧延时显示freeze_duration秒,剪辑的整体时长也增加了freeze_duration秒。

调用语法:

freeze(clip, t=0, freeze_duration=None, total_duration=None, padding_end=0)

参数说明:
  • t、padding_end:t为剪辑冻结位置的时间位置,一般为浮点数,单位为秒,但如果t的值为字符串‘end’,则t=剪辑的时长-padding_end-1
  • freeze_duration:该帧持续显示的时间,浮点数,单位秒
  • total_duration:为新剪辑的duration,实际冻结时间freeze_duration=total_duration-原剪辑的duration

三、freeze_region函数

功能说明:

freeze_region函数主要用于将剪辑中指定屏幕范围内容固定为参数指定的某个时刻的内容,它包括三种形式的设定:

  • 将剪辑中参数矩形指定的范围固定为指定时刻该剪辑的帧在该矩形内的范围
  • 将剪辑中除了参数矩形指定的范围是正常播放外,其他部分固定为指定时刻的内容
  • 将剪辑中参数指定时刻的帧加遮罩后与正常剪辑剪辑叠加
调用语法:freeze_region(clip, t=0, region=None, outside_region=None, mask=None)
参数说明:
  • t:t为在剪辑中要固定显示内容对应在剪辑中的时刻,即freeze_region函数是将剪辑中t时刻对应的屏幕显示中参数指定区域的内容固定显示在剪辑所有时刻的对应屏幕位置
  • region:取t时刻region对应矩形的屏幕内容作为固定显示内容,矩形是一个四元组 (x1, y1, x2, y2),分别指定矩形的左上角和右下角
  • outside_region:取t时刻outside_region对应矩形外的屏幕内容作为固定显示内容,矩形是一个四元组 (x1, y1, x2, y2),分别指定矩形的左上角和右下角,即正常播放内容是outside_region指定区域的内容,其他区域固定为t时刻的内容
  • mask:将t时刻对应屏幕的内容构建一个固定画面的剪辑后,将该剪辑的mask设置为参数mask指定的遮罩后,将该剪辑与原剪辑合成叠加播放
  • 参数region、outside_region、mask是有优先级的,三者中前面的如果出现了后面的不起作用

四、loop函数

loop函数将当前剪辑重复n次或无限循环。

调用语法:loop(self, n=None, duration=None)
说明:
  • 如果n有值则重复n次
  • 如果n和duration都有值,则剪辑重复n次后的时长被设置为duration
  • 如果n为None,duration有值,则剪辑的时长被强制值为duration,如果duration比原剪辑duration大,则会重复原剪辑的内容
  • 如果n和duration都为None,则剪辑无限制循环。

五、make_loopable函数

make_loopable使剪辑在它自己的末端逐渐淡入,这样它就可以使用loop进行循环处理时过渡比较好。

调用语法:make_loopable(clip, cross)

参数cross是淡入的持续时间(秒)。

处理逻辑说明:

具体处理时,将剪辑clip的拷贝从duration-cross时开始进行淡入处理得到的新剪辑与原剪辑在duration-cross时叠加,最后剪辑的时长保留为原剪辑的时长。

上述处理后,原剪辑从duration-cross开始会淡入到剪辑的开头。

示例代码:
if __name__=='__main__':
    threads = 8
    clip = VideoFileClip(r"F:\video\WinBasedWorkHard_src.mp4").subclip(0, 10)

    newclip = clip.fx(vfx.make_loopable, 3).set_fps(clip.fps)
    newclip.write_videofile(r"F:\video\WinBasedWorkHard_loopable.mp4", threads=threads)

六、speedx函数

speedx函数返回的剪辑的播放速度是原剪辑的n倍,n为相关参数指定或计算得出。

调用语法:speedx(clip, factor=None, final_duration=None)

speedx函数很简单,就三个参数,clip为原剪辑,factor为需要达到的倍数,final_duration为新剪辑的最终播放时长。factor和final_duration只要有一个存在有效值就可以,如果二者都存在或者仅final_duration存在有效值,则factor值被置为原剪辑的时长除以final_duration的值。如果原剪辑的duration存在有效值,新剪辑的时长设置为clip.duration/factor。

案例:
if __name__=='__main__':
    clip = VideoFileClip(r"F:\video\WinBasedWorkHard_src.mp4", audio=False).crop(0, 300, 540, 840).subclip(0, 10)
    newclip = clip.speedx(2)
    newclip.write_videofile(r"F:\video\WinBasedWorkHard_speedx.mp4", threads=8)

以上代码输出的视频的播放速度是原剪辑的2倍。

七、time_mirror函数

time_mirror函数返回原剪辑的一个倒序播放剪辑,该函数只带一个clip参数。

案例:
if __name__=='__main__':
    clip = VideoFileClip(r"F:\video\WinBasedWorkHard_src.mp4", audio=False).fx(vfx.crop,0, 300, 540, 840).subclip(0, 10)
    newclip = clip.fx(vfx.time_mirror)
    newclip.write_videofile(r"F:\video\WinBasedWorkHard_time_mirror.mp4", threads=8)
注意:
  1. 该函数会同时对剪辑的遮罩和音频生效;
  2. 经老猿验证测试,moviepy 1.03版本中该函数处理效率大大低于moviepy 2.0.0Dev1版本,但moviepy 2.0.0Dev1版本在处理到最后时存在BUG,老猿已经在GitHub的moviepy项目中上报,应该会很快解决。

八、time_symmetrize函数

time_symmetrize函数将当前调用剪辑进行处理后,返回一个调用剪辑和调用剪辑倒序播放的剪辑的拼接剪辑,该剪辑前半部分为调用剪辑的内容,后半部分为调用剪辑的倒序播放的剪辑。这种处理方法能使得剪辑能构成循环播放,在制作动画时非常有用。该函数同步作用于剪辑的遮罩和音频。该函数只带一个clip参数。

案例:
if __name__=='__main__':
    clip = VideoFileClip(r"F:\video\WinBasedWorkHard_src.mp4", audio=False).fx(vfx.crop,0, 300, 540, 840).subclip(0,10)
    newclip = clip.fx(vfx.time_symmetrize)
    newclip.write_videofile(r"F:\video\WinBasedWorkHard_time_symmetrize.mp4", threads=8)

九、小结

本节详细介绍了moviepy提供的与时间线相关的变换函数,这些函数本质上是调用fl_time函数完成变换的,只是提供了一些更典型场景的时间线变换处理函数,有了这些经典时间线变换场景支持的函数,开发者可以更快的实现诸如倍速、倒序、循环播放等基本的时间特效。

更多moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《专栏:使用PyQt开发图形界面Python应用》。

关于收费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。

收费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》,本文收费专栏对应文章为《moviepy音视频剪辑:与time时间线相关的变换函数freeze_region、make_loopable、speedx、time_mirror、time_symmetrize详解及使用案例》。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎现在购买付费专栏。

跟老猿学Python、学5G!

☞ ░ 前往老猿Python博文目录 ░
Python中利用moviepy对视频进行剪辑以及拼接 moviepy是一个用于视频编辑的Python模块,它可被用于一些基本操作(如剪切、拼接、插入标题)、视频合成(即非线性编辑)、视频处理和创建高级特效。它可对大多数常见视频格式进行读写,包括GIF。...... 阅读详情

相关推荐

Moviepy时间变换time_mirror再遇‘OSError: MoviePy error: failed to read the first frame

为了解决这个问题,我们可以尝试使用不同的视频编解码器进行视频文件的读取。我们可以尝试使用其他的编解码器,如ImageMagick或OpenCV。请注意,本文提供的示例代码和解决方法仅供参考,并不能保证适用于所有情况。如果问题仍然存在,可能需要进一步检查视频文件的格式、路径等问题,并确保相关依赖库已正确安装。在使用Moviepy库进行视频处理时,有时候我们需要对视频进行时间变换,比如将视频镜像翻转。通过修改编解码器的设置,我们可以尝试使用不同的工具进行视频文件的读取,以解决。函数可以帮助我们实现这一功能。

code88888的博客 463

loop() 函数

在setup()函数中初始化和定义了变量之后,loop()函数,顾名思义,不停的循环,根据程序中的内容,根据一些反馈,响应改变执行情况。我们就用loop中的代码控制Arduino板子。 例子: int buttonPin = 10;   // setup中初始化串口和按键针脚.  void setup() {   beginSerial(9600);   pi

Amir‘s IT tec 1万+

使用Moviepy进行音视频剪辑

使用Moviepy进行音视频剪辑Moviepy是一个基于Python语言的影视处理库,它提供了多种对音视频文件进行剪辑、合并、转换、添加文字、音乐以及图片等操作的函数和类。

带你成为别人眼中的大佬! 668

Python学习笔记(五)—LOOP 循环

个人认为Python基础学习直到LOOP才算真正开始。 循环有While, do-while, 和for() 比如while 我们要输出100条“you are my sunshine ”可以表达如下: count = 0 while count< 10: print("you are my sunshine "), count = count + 1 输出结果如下:

yang6464158的专栏 2万+

Moviepy时间变换time_mirror再遇‘OSError: MoviePy error: failed to read the first frame of video file‘解决示例代码

一、引言 在《https://blog.youkuaiyun.com/LaoYuanPython/article/details/106478711 moviepy音视频剪辑:使用fl_time报错OSError: MoviePy error: failed to read the first frame of video file》老猿介绍了使用fl_time进行时间变换遇到的OSError报错,并给出了解决办法,在付费专栏文章《https://blog.youkuaiyun.com/LaoYuanPython/article/

老猿Python 1862

moviepy音视频剪辑:与time时间线相关的变换函数freeze_region、make_loopable、speedx、time_mirror、time_symmetrize详解及使用案例

本节详细介绍了moviepy提供的与时间线相关的变换函数,这些函数本质上是调用fl_time函数完成变换的,只是提供了一些更典型场景的时间线变换处理函数,有了这些经典时间线变换场景支持的函数,开发者可以更快的实现诸如倍速、倒序、循环播放等基本的时间特效。

老猿Python 1754

Arduion

面包板 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何

qq_57196464的博客 1708

matlab 三维绘图 抛光,瓷砖抛光过程建模与仿真

:瓷砖抛 光过程 建模与仿真朱 成 就(广 东工业大学 机 电工程 学院, 广东广州 )摘要 :瓷砖的抛磨影响 因素众 多 ,实际磨削加工时容易出现漏抛 、返抛现象 。对陶瓷抛光机磨头进行运动学分析 ,并基于不 同粒度号 的磨 粒在一定压力下的加工深度模型 ,探讨抛光机磨 头转 速 、横梁摆动频率 、传送速度对瓷砖抛光加工表 面均匀性 的影响,然 后结合 磨削机理使 用 对陶瓷抛光过程进行仿真 ...

weixin_36331058的博客 747

Arduino基础函数

@[语言:使用Setup和loop这个两个函数:Arduino软件结构包括两个主要函数:Setup()函数 初始化变量,管脚模式,调用库函数等Loop()函数 连续循环执行loop函数内的程序(可以理解成while(1);)在Arduino控制器通电或复位后,,程序启动时会调用 setup()函数。setup函数只能在Arduino板的每次上电或复位后运行一次。loop() 让你的程序循环地被执行。使用它来运转Arduino。这部份的程式会一直重复的被执行,直到Arduino 板子被关闭。HIGH | LO

weixin_67189637的博客 5156

RAG——从0到1快速搭建RAG应用

本文介绍了基于LangChain框架构建RAG(检索增强生成)应用的技术方案,涵盖核心模块选型与实现流程。技术栈包括:LangChain应用框架、pypdf文档解析、RecursiveCharacterTextSplitter文本分块、bge-small-zh-v1.5向量模型、Faiss向量库和通义千问大模型。文章详细说明了开发环境配置步骤,包括虚拟环境创建、依赖库安装和模型下载。核心代码分为索引、检索、生成三大流程,索引流程完成PDF文档解析、分块和向量化存储;检索流程实现查询向量化和相似度匹配;生成流

小志的博客 591

实测对比:纳芯微NSD1624在光伏逆变器中的性能表现(含温度测试数据)

本文详细评测了纳芯微NSD1624非隔离驱动芯片在光伏逆变器中的性能表现,包括动态效率、高温稳定性及抗干扰能力。实测数据显示,该芯片在800V母线电压下效率峰值达99.03%,高温环境下结温稳定在102.7℃,且传播延迟一致性优异。与竞品相比,NSD1624在总损耗和热阻方面具有显著优势,是光伏逆变器驱动方案的理想选择。

weixin_29297127的博客 363

Arduino中Loop函数的意义

Arduino中没有loop函数时,会报莫名其妙的错误是怎么回事

VictorTsing的博客 1万+

2025.06.20【pacbio】|PB甲基化分析结果的统计与可视化介绍

本文介绍了PacBio甲基化数据的统计分析与可视化方法。主要内容包括:1) 分析甲基化位点分布、比例及染色体分布;2) 修饰基序(Motif)的统计与热图展示;3) 全基因组和局部区域测序深度可视化;4) 使用IGV查看单个reads修饰情况。文章提供了R代码示例,涵盖柱状图、分布图、热图等多种可视化形式,并建议了差异甲基化分析等进阶方法,帮助科研人员深入挖掘甲基化数据。

2066

使用Python+moviepy调整播放视频的速度

使用Python+moviepy调整播放视频的速度

limengshi138392的博客 1103

基于FFT的阵列方向图快速计算公式推导

因为自己毕设涉及到阵列方向图综合相关知识,最近阅读了关于方向图综合的相关文献,就其中关于使用FFT计算阵列方向图的方法进行了公式推导。 简介: 自从1965年Colley-Tukey发表快速傅里叶变换[1]论文以来,FFT在许多科学技术领域获得了广泛和成功的应用。在阵列信号处理与雷达信号处理领域,随着科技的发展,对于电尺寸较大的相控阵天线,使用公式按照级数求和计算天线阵列方向图的方法效率甚低,...

qq_38151438的博客 4290

【100%通过率】华为od机试C卷【出差 / 员工派遣】Java&Go 实现

某公司部门需要派遣员工去国外做项目。现在,代号为 x 的国家和代号为 y 的国家分别需要 cntx 名和 cnty 名员工部门每个员工有一个员工号 (1,2,3,......),工号连续,从 1开始。部长派遣员工的规则:

MISAYAONE的博客 2640

【python代码实现改变视频播放速度】

Abstract 短视频做demo太快没感脚?视频太短效果出不来??? 使用python代码更改一下视频流的播放速度,简单易用,美滋滋呀 代码实现 需要用到 cv2 、 python3 库,可以指定FPS( FramesPerSecond ,为画面每秒传输帧数)或者scale播放速度 # 代码描述:改变视频流的播放速度 # # 创建时间: 2020-04-09 # 创建人: 小武问道 # 修改时间: # 版本: import cv2 from cv2 import VideoWrite

是小武呀 4421

OpenHarmony 显示Display驱动全栈解析:DisplayLayer + Gralloc + Gfx 三位一体,打造高性能图形底座

OpenHarmony Display显示驱动模块是系统图形渲染和显示功能的基础组件,负责管理显示设备、图层渲染、内存分配等核心功能。该模块采用HDI(Hardware Driver Interface)设计架构,为上层图形服务提供统一的显示能力接口,实现了显示设备的初始化、图层管理、内存分配与映射、硬件加速等关键功能。DisplayLayer:负责显示图层的管理, 包括图层创建、显示属性设置、图层填充及刷新等操作;

m0_67505153的博客 315

MoviePy - 中文文档2-快速上手-MoviePy-Clips变换与特效

回到目录 下面是MoviePy中的几种对clip的修改: 非常常见的修改clip属性的方法有:clip.set_duration, clip.set_audio, clip.set_mask, clip.set_start 等. 已经实现的特效.clip.subclip(t1,t2):截取t1到t2时间段内的片段;还有一些高级效果,loop:让clip循环播放、time_mirror:让cl...

ucsheep-You see sheep! 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Lumos学习python第四课:循环(Loop)

②如果数组的末尾有若干个“9”,例如 [1,2,9,9][1,2,3,9,9],那么我们只需要找出从末尾开始的第一个不为 9 的元素,将该元素加1,得到 [1,3,9,9][1,2,4,9,9]。官方解释:循环可以用来取出列表中的元素,其原理其实就是根据索引自增的方式来一次进行列表中元素的取值,不仅仅是列表,包括字符串、字典、元组等序列都是可以通过循环来进行元素取值,这个过程称为。③如果数组的所有元素都是9,例如 [9,9,9,9,9],那么答案为[1,0,0,0,0,0]。我们本道题就采取了嵌套循环,

Sunshine_XX的博客 1571

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Arduino-为什么只有setup和loop函数?

Arduino程序main函数结构分析   如何让loop只执行一次? loop函数最后执行死循环while(1): int ledPin = 7; int buzzer = 8; int ledbz(int i);// void setup() { pinMode(ledPin, OUTPUT); pinMode(buzzer,OUTPUT); } ...

Naiva的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

moviepy基本参数用法大全

MoviePy 是一个用于视频编辑的 Python 库,使用户能够处理、编辑和操作视频文件。这个库允许你剪辑视频、添加文本、合并视频剪辑,以及应用各种效果和转换。它建立在 NumPy、imageio 和 Decorator 等库的基础上,使得在处理视频时能够更加高效。MoviePy 允许你从现有视频中选择特定的片段,然后将它们合并成一个新的视频文件。你可以在视频中添加文本、图形和其他元素,以创建字幕、水印或其他视觉效果。

小小明-代码实体的专栏 5362

如何用Python调整视频的播放速度(90)

final_duration:指定视频的目标时长,函数会自动计算相应的参数。如果目标时长小于原时长,则播放变快。如果该系数大于0小于1,那么播放速度变慢。如果该系数大于1,那么播放速度变快。第1行代码,从Movi块的子模块editor中导入VideoFileClip类。调整视频的播放速度,比如1.25倍速、1.5倍速、2倍速、0.5倍速等。如果你对此文章感兴趣的话,可以看看之前的几篇文章。第2行代码,读取要处理裁剪的视频。第3行代码,设置视频以2倍速播放。第4代码,保存新制作的视频文件。

parasoft的专栏 874

Arduino之程序结构(setup与loop函数)

不需要太多的语言基础 /* Blink Turns an LED on for one second, then off for one second, repeatedly. Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to

Systemcall名屋 2万+

python+moviepy音视频处理(三):视频特效方法-vfx模块

python+moviepy音视频处理(三):视频特效方法-vfx模块。

北冥有鱼的博客 6258
上一篇: moviepy音视频剪辑:与time时间线相关的变换函数freeze_region、make_loopable、speedx、time_mirror、time_symmetrize详解及使用案例
下一篇: 使用PyQt进行Python图形界面程序开发文章目录
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值