PyQt+moviepy音视频剪辑实战1:多个音视频合成顺序播放或同屏播放的视频文件实现详解

PyQt6系列(3)——设计实战:简易串口助手与打包 PyQt6系列(3)手把手教你复刻 设计实战 代码开源 注释丰富易于理解 PyQt6与Qt-Designer设计并打包一款简易的Windows桌面串口助手工具 阅读详情

一、引言

在《moviepy音视频剪辑:音视频的加载和输出》、《moviepy音视频剪辑:多个视频合成一个视频》、《moviepy音视频剪辑:使用VideoFileClip、AudioFileClip和write_videofile、write_audiofile进行音视频的加载和输出》和《moviepy音视频剪辑:使用concatenate_videoclips和clips_array将多个视频合成一个顺序播放或同屏播放的视频》介绍了音视频文件加载和输出以及多视频合成一个视频的方法,本节将使用PyQt和moviepy结合开发一个音视频合成的GUI应用。

二、功能及界面设计

2.1、主界面

在这里插入图片描述
以mainwindow为基础设计窗口主界面,包含一个菜单和对应工具条,用于选择要合成的文件、去除选中的文件、合成参数配置和执行合成操作等功能。

本次对该界面的信号处理没有使用UI界面来定义信号和槽的关联,因为线条太多会不好修改,相关信号和槽的连接主要通过代码实现。

2.2、参数配置界面

在这里插入图片描述
根据选择的不同合成类型,可选配置不同的参数,也可以不配置,关于这些参数的说明请参考引言中提到的博文介绍。

2.3、输出信息窗

老猿为准备开发的视频工具提供了一个统一的输出信息窗,moviepy本身的输出信息将全部被接管到该输出信息窗显示。界面设计如图:
在这里插入图片描述

关于输出信息截获请参考《在Python实现print标准输出sys.stdout、stderr重定向及捕获的简单办法》以及《PyQt(Python+Qt)学习随笔:print标准输出sys.stdout以及stderr重定向QTextBrowser等图形界面对象》。

三、代码实现

3.1、主界面构造方法
class mainWin(QtWidgets.QMainWindow,ui_mixClips.Ui_ui_mainWin):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.initValues() #完成初始化成员变量
        self.initSignalAndSlots() #完成信号和槽的连接
        self.initPublicFrame()  #完成公共框架相关变量初始化

上面代码调用很简单,相关方法都好理解,只有initPublicFrame方法比较特殊,这是因为为了支持工具的开发只关注工具本身的功能,老猿单独开发了几个单独的模块用于所有工具都能使用,这些功能包括显示About窗口信息、截获标准输出、显示或关闭信息输出窗、信息输出窗与应用本身的QMainWindow对象关联(作为一个QDockWidget对象,关于QDockWidget请参考《第三十一章、containers容器类部件QDockWidget停靠窗功能介绍》或参考免费专栏《PyQt入门知识目录》相关章节的介绍)等功能,在此就不详细介绍了。

3.2、界面输入内容校验方法
    def validateAllInput(self,isOutputMessage=False):
        #效验所有文件是否都存在
        ret = True
        fileList = self.videoFileListModel.stringList()
        if fileList:
            count = len(fileList)
            if  count<2:
                self.actionProcessVideos.setEnabled(False)

                if isOutputMessage:print(f"输入视频文件数为{count},必须至少2个文件")
                ret = False
            else:
                for fileName in  fileList:
                    if len(fileName)==0:continue
                    if not os.path.exists(fileName):
                        if isOutputMessage:print(f"文件{fileName}不存在,请修订后再进行合成处理!")
                        ret = False
                if ret:
                    if not self.outputFileNameManuChanged:
                        filePre =  self.lastFileDir +"\\video_"+self.configW.composeType
                        self.outputFileName =  filePre + time.strftime("%Y%m%d%H%M%S", time.localtime()) + ".mp4"
                        self.input_outputFile.setText(self.outputFileName)
                        self.outputDir = self.lastFileDir
        else:
            ret = False
            if isOutputMessage:print(f"没有输入视频文件,必须至少2个文件")
            #print(self.videoFileListModel.stringList())

        if not self.outputDir:
            ret = False
            if isOutputMessage:print("输出文件没有指定")
        elif not os.path.exists(self.outputDir):
            ret = False
            if isOutputMessage:print(f"输出文件对应目录:{self.outputDir} 不存在")
        #self.btn_processVideoFiles.setEnabled(ret)
        self.actionProcessVideos.setEnabled(ret)
        if ret:
            if isOutputMessage:print("所有输入数据检测正常!")
        if self.configW.composeType!='stack' and self.configW.transitionFileName and len(self.configW.transitionFileName):
            if not os.path.exists(self.configW.transitionFileName):
                if isOutputMessage:print(f"转场文件{self.configW.transitionFileName}不存在,请修订后再进行合成处理!")
                ret = False
        return ret

该方法在所有界面内容输入发送变化后触发,用于检测输入内容是否完整、合法,如果返回False,则视频合成操作不能进行。该方法带的参数用于控制是否输出检测到的异常信息,当各组件正在输入时不应输出以免干扰,而最后要执行合成前会再校验一次,此次校验的异常则会输出。检测内容请见相关输出信息。

3.3、合成处理方法

该方法包含了三种合成方式处理的完整代码,有点长。

    def processFiles(self):
        print("\n\n合成处理开始......")

        if self.loadWin: self.loadWin.openCaptureWin() #打开输出信息窗口
        if not self.validateAllInput(True):return #检测有异常则终止合成
        tmpClip = [] #用于保存所有需要参与合成视频文件的剪辑对象
        try:
            fileList = self.videoFileListModel.stringList()  #取合成输入视频文件名列表
            fileCount = len(fileList)  
            for fileName in fileList:
                print(f"准备加载视频文件:{fileName} ")

                clip = mpe.VideoFileClip(fileName,verbose=True)
                print(f"加载视频文件:{fileName} 完成,时长为{clip.duration}秒,视频分辨率大小为:{clip.size} ")
                tmpClip.append(clip)
                print(f"视频文件:{fileName} 已经加载并缓存")

            transitionClip = None
            if self.configW.composeType != 'stack':#视频拼接可能需要转场文件
                if self.configW.transitionFileName and len(self.configW.transitionFileName):
                    print(f"准备加载转场文件:{self.configW.transitionFileName}")
                    transitionClip = mpe.VideoFileClip(self.configW.transitionFileName)
                    print(f"转场文件加载成功,时长为{transitionClip.duration}")


            print("进行内存视频合成...")
            padding = 0
            if   self.configW.composeType=='compose': #将所有输入剪辑全部统一分辨率方式合成则获取对应参数配置
                method = 'compose'
                bgcolor =  self.configW.bgColor
                padding = self.configW.input_padding.value()
                if padding==0.00:
                    padding = 0
                print("padding=", padding, 'bgcolor=', bgcolor, 'method=', method)
                destClip = mpe.concatenate_videoclips(tmpClip, method=method, padding=padding, bg_color=bgcolor,transition=transitionClip) #执行顺序拼接,统一分辨率

            elif self.configW.composeType=='chain': #保持所有输入视频分辨率不变进行视频拼接则获取对应参数配置
                padding = 0
                bgcolor = None
                method = 'chain'
                print("padding=", padding, 'bgcolor=', bgcolor, 'method=', method)
                destClip = mpe.concatenate_videoclips(tmpClip, method=method, padding=padding, bg_color=bgcolor,transition=transitionClip)#执行顺序拼接
            elif self.configW.composeType=='stack':#进行同屏播放合成则获取对应参数配置
                bgcolor = self.configW.bgColor
                #下面代码用于设置屏幕上视频的行数和列数
                if fileCount<=3: 
                    lines = 1
                    columns = fileCount
                elif fileCount<=10:
                    lines = 2
                    columns = int((fileCount+1)/2)
                else:
                    lines = 3
                    columns = int((fileCount+2)/3)

                print(f"视频将排列成{lines}行{columns}列")
                clipArrays = []
                tmpClipArray = []
                lines = column= 0
                for clip in tmpClip:#按行列将视频排列
                    tmpClipArray.append(clip)
                    column += 1
                    if column == columns:
                        clipArrays.append(tmpClipArray)
                        column = 0
                        tmpClipArray = []

                destClip = mpe.clips_array(clipArrays) #进行同屏播放合成

            print(f"内存视频合成完成,准备输出到文件:{self.outputFileName}.")
            destClip.write_videofile(self.outputFileName) 
            print(f"输出到文件:{self.outputFileName} 成功!")

        except Exception as e:
            print(f"进行视频处理合成失败,请参考上面输出信息确认处理存在问题的文件,异常原因:\n{e}")
            strinfo = str(e)
            if strinfo.find("codec can't decode"):
                print("该问题是由于视频文件解码导致的错误,请尝试将文件名或目录名改成纯ASCII字符集再尝试一下")

四、运行界面截图

4.1、加入合成文件后的主界面

在这里插入图片描述
可以看到支持重复加入视频,本案例就是将《笑看风云》这个视频重复四次进行合成。如果是拼接就是四个接连播放,如果是同屏播放则一个界面上播放四个视频。

4.2、设置为统一分辨率拼接合成

由于padding这个参数不能用于chain模式的拼接,因此为了展示效果,设置了padding参数为-1,表示前后两段视频有1秒的重叠。参数设置界面如下:

在这里插入图片描述
执行合成处理,下图为合成处理过程的一个截图:
在这里插入图片描述
合成处理挺快,但输出比较耗时间。
播放就是顺序播放,截图不能体现什么,但可以与同屏播放合成对比一下:
在这里插入图片描述
不好意思免费做广告了。

4.3、设置为同屏播放方式合成

主界面和运行界面与拼接没有什么区别,参数配置界面如下:
在这里插入图片描述
合成后的视频截图:

在这里插入图片描述

五、打包成exe

使用《PyQt(Python+Qt)学习随笔:windows下使用pyinstaller将PyQt文件打包成exe可执行文件》介绍的方法进行打包。

老猿在win7上最终打包的可执行程序包已经上传到百度云,大家可以下载下来长期免费使用。具体下载地址为百度网盘。

链接:https://pan.baidu.com/s/1UNaA2UqQBoxx-v8rCIPDhA

提取码:yh2d

选择该链接下的:视频合成工具.rar 即可。

更多moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《moviepy音视频开发专栏》。

关于收费专栏

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

收费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》,本文收费专栏对应文章为《PyQt+moviepy音视频剪辑实战1:多视频合成顺序播放或同屏播放的视频文件》。

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

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

跟老猿学Python、学5G!

【完全指南】从零开始:创建您自己的视频分割Python GUI应用 本文详细介绍了如何使用Python和Tkinter库创建一个视频分割GUI应用。从设置开发环境、探索MoviePy进行视频处理,到编写和测试核心分割功能,再到设计用户友好的图形界面。我们还涵盖了如何增强用户交互、完善应用程序,以及错误处理和用户提示的重要性。此外,文章还讨论了应用的测试、打包和分发策略,并提供了进一步学习的资源。这篇指南旨在鼓励读者将理论知识付诸实践,深入探索Python编程和GUI开发的世界。 阅读详情

相关推荐

PyQt+moviepy音视频剪辑实战1:多视频合成顺序播放或同屏播放的视频文件

专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一、引言 在《moviepy音视频剪辑:音视频的加载和输出》、《moviepy音视频剪辑:多个视频合成一个视频》、《moviepy音视频剪辑:使用VideoFileClip、AudioFileClip和write_videofile、write_audiofile进行音视频的加载和输出》和《moviepy音视频剪辑:使用concatenate_videoc.

老猿Python 2415

python实现视频音频同步

Python实现视频播放

qq_46273065的博客 6991

PyQt与moviepy实现音视频剪辑:多个音视频合成顺序播放或同屏播放的视频文件实现详解 Python

在构造函数中,我们设置了窗口的标题、大小,并创建了用于预览视频的QLabel、用于控制视频进度的QSlider、播放按钮和合并按钮。通过运行这段代码,我们将获得一个具有图形界面的视频剪辑器,可以导入多个音视频文件,并实现它们的顺序播放或同屏播放。我们添加了一个打开文件对话框的槽函数open_file_dialog(),当用户点击菜单栏中的"文件"->"导入"时,会触发该函数。在本文中,我们将介绍如何使用PyQt和moviepy库来实现音视频剪辑,包括多个音视频文件的合成、顺序播放和同屏播放。

TechNovaX的博客 292

【亲测免费】 探索SyncNet Python:一款高效音频-视频同步工具

是一个基于深度学习的开源项目,旨在帮助开发者和研究人员解决音频与视频之间的同步问题。通过利用卷积神经网络(CNN),该项目能够精确地识别和调整音视频中的时间差异,确保两者在播放时完美对齐。 ## 技术分析 SyncNet Python 的核心在于其采用的 SyncNet 模型,这是一个端到端的深度学习模型,最初由[这篇2016年的研究论文](https://arxiv.org/abs/1607...

gitblog_00057的博客 1234

PyQt+moviepy音视频剪辑实战2:实现一个剪裁视频文件精华内容留存工具

一、引言 最近网上会议很多,网上会议工具大多提供了录播的功能,有些会议内容比较精彩,但中间穿插有些无用的内容,或者有些只有几段精彩,大部分内容可以去除。这就需要对该录播文件进行剪辑,取其精华留存,这样可以节约后续重温或者给其他人共享的时间。本文介绍的开发方法就是要实现 ...

老猿Python 1570

Moviepy音视频开发:开发视频转gif动画或jpg图片exe图形化工具的案例

本文详细介绍了使用Moviepy将视频转为动画或图片的方法以及详细开发过程,针对这些过程提供了关键部分的源代码,相信大家通过这些介绍可以掌握视频转动画或图片工具的开发。 同时老猿还提供了一个图形化界面的视频转动画或图片的win7和win10下运行的工具,大家免费下载该工具后可以选择要转换的视频、设置相关控住参数后即可免费长期使用该工具进行视频转动画或图片。

老猿Python 1578

PyQt6实例_批量下载pdf工具_主线程启用线程池

1 本系列将以 “PyQt6实例_批量下载pdf工具”开头,放在 【PyQt6实例】 专栏2 本系列涉及到的PyQt6知识点:线程池:QThreadPool,QRunnable;信号与槽:pyqtSignal,pyqtSlot;界面:QTextEdit,QLabel,QLineText,QPushButton,QMainWindow,QWidget;布局:QHBoxLayout,QVBoxLayout;弹框:QFileDialog,QMessageBox。

m0_37967652的博客 605

PyQt6实战派 配套代码

PyQt6实战派 配套代码

pyqt 槽任意参数_PyQt+moviepy音视频剪辑实战1:多个音视频合成顺序播放或同屏播放的视频文件实现详解...

- 专栏:Python基础教程目录 - 专栏:使用PyQt开发图形界面Python应用 - 专栏:PyQt+moviepy音视频剪辑实战 - 专栏:PyQt入门学习 - 老猿Python博文目录- 老猿学5G博文目录## 一、引言在《moviepy音视频剪辑:音视频的加载和输出》、《moviepy音视频剪辑:多个视频合成一个视频》、《moviepy音视频剪辑:使用VideoFileClip、Au...

weixin_39805883的博客 256

VideoEditor:简短的python.exe,用于通过moviepy和tkinter GUI编辑视频

视频编辑 简短的python.exe,用于通过moviepy和tkinter GUI编辑视频 当前唯一的活动文件是gui_basics.py 打开一个窗口,所有按钮都执行某些功能,其中一些功能当前会打印到终端上 视频帧都是相同的,因为它们仅引用正在重用的一张图片。 要被更新 子片段列表要添加到首页 子剪辑窗口上的“关闭”将关闭整个应用程序,而不仅仅是该窗口。

国密(3)- 预主密钥/主密钥计算和Finished消息的加解密

国密的ECC-SM3-SM4-CBC模式下的预主密钥和主密钥的生成过程介绍,以及Finished消息的加解密介绍

weixin_43408952的博客 6511

PyQt+moviepy音视频剪辑实战文章目录

本专栏为moviepy音视频开发的免费专栏,基于老猿阅读moviepy1.03版本的源代码以及大量测试验证的基础上,介绍moviepy主要音视频剪辑相关类的方法、以及一些音视频剪辑合成处理的场景化支撑能力和部分剪辑合成实现的案例或工具开发。

老猿Python 7330

Zynq7000混合启动方案:QSPI Flash引导与eMMC ext4文件系统部署实战

本文详细介绍了Zynq7000平台的混合启动方案,结合QSPI Flash引导与eMMC ext4文件系统部署,解决嵌入式Linux系统启动可靠性与大容量存储需求。通过硬件连接配置、分区规划、Petalinux工程配置及实战部署步骤,帮助开发者高效实现系统优化,提升启动速度和文件系统性能。

weixin_29190169的博客 447

PyQt+moviepy音视频剪辑实战2:一个剪裁视频文件精华内容留存工具的实现

专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 PyQt+moviepy音视频剪辑实战 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一、引言 最近网上会议很多,网上会议工具大多提供了录播的功能,有些会议内容比较精彩,但中间穿插有些无用的内容,或者有些只有几段精彩,大部分内容可以去除。这就需要对该录播文件进行剪辑,取其精华留存,这样可以节约后续重温或者给其他人共享的时间。本文介绍的开发方法就是要实现这样的一个工具。 二、背景知识介绍 2.1、视频的.

老猿Python 2097

CAN-do-paser:Java开发的CAN总线数据帧解析库

CAN总线数据帧使用DBC文件信息解析为物理量,基于Java开发的数据解析工具。

佳瑞的博客 1133

modbus

从机地址 功能码 起始地址高位 起始地址低位 数量高位 数量低位 字节数 0001H高位 0001H低位 0002H高位 0002H低位 CRC高位 CRC低位。每个输入寄存器的长度为2个字节。其中,CDH对应线圈0013H到001AH的内容,01H对应线圈001B到001CH的内容,未使用位用0填充。从机地址 功能码 起始地址高位 起始地址低位 寄存器数量高位 寄存器数量低位 CRC高位 CRC低位。从机地址 功能码 起始地址高位 起始地址低位 寄存器数量高位 寄存器数量低位 CRC高位 CRC低位。

lunhuicnm的博客 9750

Moviepy音视频开发:视频转gif动画或jpg图片exe图形化工具开发案例

本文详细介绍了使用Moviepy将视频转为动画或图片的方法以及详细开发过程,针对这些过程提供了关键部分的源代码,相信大家通过这些介绍可以掌握视频转动画或图片工具的开发。 同时老猿还提供了一个图形化界面的视频转动画或图片的win7和win10下运行的工具,大家免费下载该工具后可以选择要转换的视频、设置相关控住参数后即可免费长期使用该工具进行视频转动画或图片。

老猿Python 1907

【系统架构设计师-2026上半年真题】综合知识-参考答案及详解(75题完全回忆版)

【系统架构设计师-2026上半年真题】综合知识-参考答案及详解(75题完全回忆版)

数据知道的博客 3102

pyqt tablewidget 设置一行的背景_PyQt+moviepy音视频剪辑实战2:一个剪裁视频文件精华内容留存工具的实现...

一、引言最近网上会议很多,网上会议工具大多提供了录播的功能,有些会议内容比较精彩,但中间穿插有些无用的内容,或者有些只有几段精彩,大部分内容可以去除。这就需要对该录播文件进行剪辑,取其精华留存,这样可以节约后续重温或者给其他人共享的时间。本文介绍的开发方法就是要实现这样的一个工具。二、背景知识介绍2.1、视频的读取和输出保存本部分知识请参考《moviepy音视频剪辑:音视频的加载和输出》或专栏《P...

weixin_39717692的博客 255

核心组件大换血:Backbone与Neck魔改篇:YOLO26魔改Neck:引入BiFPN(双向特征金字塔),多尺度融合能力飙升

本文深入解析了YOLO26目标检测模型中Neck部分的优化策略,重点探讨了BiFPN(双向特征金字塔网络)的原理与实现。文章首先指出YOLO26原生FPN+PAN结构在多尺度特征融合上的局限性,特别是在小目标检测和边缘部署场景中的性能瓶颈。随后系统梳理了Neck网络的演进历程,从FPN、PANet到BiFPN和ASFF,详细对比了各架构的特点。核心部分展示了如何将BiFPN引入YOLO26,包括可学习权重融合、双向跨尺度连接等关键技术实现,并提供了PyTorch代码示例。本文为需要提升小目标检测性能或优化边

ZDQ58818的博客 246

大唐杯5G考前冲刺篇(回顾全文重点必看)

大唐杯习题复习指南

nimo观察者 1万+

gif提取 python_视频转gif动画或jpg图片的工具开发案例

一、引言老猿之所以学习和研究Moviepy的使用,是因为需要一个将视频转成动画的工具,当时在网上到处搜索查找免费使用工具,结果找了很多自称免费的工具,但转完GIF后都会在动画中打上对应工具的显著广告或Logo,根本没法将转换后的动画发布。如是想到了万能的Python,就找到了moviepy,没费多少时间就搞定了,因此萌发了学习和研究Moviepy的兴趣。本文利用前面介绍的知识来开发一个window...

weixin_29825861的博客 330

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Python音视频开发:消除抖音短视频Logo的图形化工具实现

一、引言 在《Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解》节介绍了怎么通过Python+Moviepy+OpenCV实现消除视频Logo的四种方法,并提供了详细的实现思路和实现代码,但这种原生态的应用不适合开发人员以外的其他人员使用,提供一个图形界面的工具程序是比较好的解决方案,本文就介绍实现这样一个图形化工具的步骤。 本节的背景知识都在《Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解》介绍了,在此就不重复介绍了。 二、图形界面设计 本程序...

pythonlaodi的博客 238

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

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

基于AI语音合成与音视频处理的动画配音自动化实践

语音合成技术作为人工智能领域的重要分支,其核心原理是通过深度学习模型将文本转换为自然流畅的语音信号。这项技术通过模拟人类发声机制,实现了从文本到语音的高质量转换,在提升内容创作效率、降低制作成本方面展现出巨大技术价值。在数字媒体、在线教育、游戏开发等应用场景中,自动化配音需求日益增长。本文聚焦于动画配音自动化流程,结合开源项目animated-voiceover的实践,详细解析如何通过语音合成引擎与音视频处理库的集成,实现从脚本解析、语音生成到音画同步的全流程自动化解决方案,为个人创作者和小型团队提供高效的

weixin_34178244的博客 475

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: PyQt+moviepy音视频剪辑实战1:多视频合成顺序播放或同屏播放的视频文件
下一篇: PyQt+moviepy音视频剪辑实战2:实现一个剪裁视频文件精华内容留存工具
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、付费专栏及课程。

余额充值