当前位置: 首页 > news >正文

python moviepy 自动化音视频处理实践

MoviePy是一个用于视频编辑的Python库。它提供了一种简单且直观的方式来处理视频文件,包括剪辑、合并、裁剪、添加文本、添加音频等操作。使用MoviePy,你可以通过编写Python代码来创建和编辑视频,而无需使用复杂的视频编辑软件。

MoviePy建立在另一个库Pygame和软件MoviePy Editor的基础上,它使用了众多其他功能强大的库,如Numpy和ImageMagick。它支持多种视频格式,并且可以与其他Python库(如Pillow和OpenCV)进行集成,以进一步扩展其功能。

MoviePy的主要特点包括:

  • 基本的视频剪辑操作,如剪切、拼接、裁剪、旋转等。
  • 添加文本、标题和字幕到视频中。
  • 添加音频轨道、合并音频和视频。
  • 对视频进行转码和压缩。
  • 支持多种视频格式,如MP4、AVI、GIF等。
  • 可以在Jupyter Notebook中进行交互式视频编辑。

总之,MoviePy是一个功能强大且易于使用的Python库,适用于处理和编辑视频文件。你可以使用它来创建自定义的视频编辑工具,制作动画,添加效果以及进行各种视频处理操作。


环境安装

brew install imagemagick
brew install ffmpeg

中文支持

安装下载中文字体

https://github.com/StellarCN/scp_zh/blob/master/fonts/SimHei.ttf

在使用MoviePy库的TextClip类创建文本剪辑时,如果要支持中文,需要确保以下两点:

1. 字体文件:选择一个包含中文字体的字体文件(.ttf格式),并将其下载到本地。可以从互联网上找到一些免费的中文字体,例如"SimHei.ttf"、"SimSun.ttf"等。

2. 字体设置:在创建TextClip对象时,通过font参数指定所选中文字体的路径,并设置合适的字体大小、颜色等属性。

下面是一个示例代码,演示如何使用TextClip创建支持中文的文本剪辑:

from moviepy.editor import *# 设置中文字体路径
font_path = "/path/to/your/font/SimHei.ttf"# 创建文本剪辑
text = "你好,世界!"
text_clip = TextClip(text, fontsize=50, color='white', font=font_path)# 设置视频参数
duration = 5  # 视频时长(秒)
fps = 25  # 帧率# 创建视频剪辑
video = CompositeVideoClip([text_clip], size=(1920, 1080)).set_duration(duration)# 保存视频
video.write_videofile("output.mp4", fps=fps)

在上述代码中,需要将`font_path`变量替换为你下载的中文字体文件的实际路径。然后,通过设置`fontsize`、`color`等参数来自定义文本剪辑的样式。

请注意,为了确保中文字符正确显示,字体文件的路径应使用绝对路径,并且需要将字体文件的格式设置为.ttf。此外,还可以根据需要调整视频的大小、时长和帧率等参数。

通过以上步骤,你应该能够创建一个支持中文的文本剪辑。

API

  • Clip 剪辑
    • clip 剪辑
  • Classes of Video Clips 视频剪辑的类型
    • VideoClip 视频剪辑
      • VideoFileClip 视频文件剪辑
      • ImageClip 图片剪辑
      • ColorClip 颜色剪辑
      • TextClip 文字剪辑
      • CompositeVideoClip 合成视频剪辑
  • AudioClip 音频剪辑
    • AudioClip 音频剪辑
    • AudioFileClip 音频文件剪辑
    • CompositeAudioClip 合成视频剪辑

生成视频

from moviepy.editor import *# 1. 创建一个空白的视频片段
duration = 5  # 视频时长(秒)
width, height = 640, 480  # 视频分辨率
fps = 30  # 帧率
background_color = (255, 255, 255)  # 背景颜色(RGB)
video = ColorClip((width, height), background_color, duration=duration)# 2. 添加文字
text = TextClip("Hello, World!", fontsize=50, color='black', size=(width, height))
text = text.set_position(('center', 'center')).set_duration(duration)# 3. 添加图片
image = ImageClip("path/to/image.jpg")
image = image.set_position(('center', 'center')).set_duration(duration)
video = CompositeVideoClip([video, image, text])# 4. 设置视频参数
video = video.set_fps(fps)# 5. 保存视频
output_path = "output.mp4"
video.write_videofile(output_path, codec='libx264')

上述代码的步骤如下:

  1. 创建一个空白的视频片段,指定时长、分辨率和背景颜色。
  2. 创建一个文字片段,设置文字内容、字体大小、颜色和位置,并指定持续时间。
  3. 创建一个图片片段,加载指定的图片文件,设置位置和持续时间。
  4. 设置视频的帧率。
  5. 将文字片段和图片片段合成到空白视频片段中。
  6. 保存合成后的视频到指定路径。

请确保将代码中的"path/to/image.jpg"替换为你要使用的图片的实际路径,并指定输出视频的路径。

运行代码后,将生成一个包含文字和图片的视频文件,并保存在指定的输出路径output.mp4中。你可以根据需要调整视频的时长、分辨率、文字内容、字体样式、图片位置等参数。

提取音频

def fetch_audio():video = VideoFileClip("/Users/youfu/Movies/output1.mp4")audio = video.audio  # 取出聲音audio.write_audiofile("output1.mp3")         # 輸出聲音為 mp3

更多优秀文章和工具请移步个人博客

无心插柳 - 三尺微命,一介书生。而浮生若梦,为欢几何?

相关文章:

python moviepy 自动化音视频处理实践

MoviePy是一个用于视频编辑的Python库。它提供了一种简单且直观的方式来处理视频文件,包括剪辑、合并、裁剪、添加文本、添加音频等操作。使用MoviePy,你可以通过编写Python代码来创建和编辑视频,而无需使用复杂的视频编辑软件。 MoviePy建立…...

聊聊混合动力汽车和纯电骑车的优势和劣势

混合动力汽车和纯电动骑车是两种不同的交通工具,它们都有各自的优势和劣势。本文将分别探讨混合动力汽车和纯电动骑车的优势和劣势,并为文章提供三个备选的好听的标题。 混合动力汽车是一种结合了内燃机和电动机的汽车,它可以同时利用燃油和电…...

算法训练Day39|62.不同路径 ● 63. 不同路径 II

LeetCode:62.不同路径 62. 不同路径 - 力扣(LeetCode) 1.思路 想象成矩阵填格子,两个关键点,初始化和递推公式。 初始化除点(0,0)第一行第一列均为1,递推公式推导dp[i][j] dp[i …...

react中hooks分享

一. HOOKS是什么 在计算机程序设计中,钩子一词涵盖了一系列技术,这些技术用来通过拦截函数调用、消息或在软件组件之间传递的事件来改变或增加操作系统、应用程序或其他软件组件的行为。处理这些被截获的函数调用、事件或消息的代码称为“hook”。 在r…...

LeetCode1207. 独一无二的出现次数

题干 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。 示例1: 输入:arr [1,2,2,1,1,3] 输出:true 解释:在该…...

【maven】构建项目前clean和不clean的区别

其实很简单,但是百度搜了一下,还是没人能简单说明白。 搬用之前做C项目时总结结论: 所以自己在IDE里一遍遍测试程序能否跑通的时候,不需要clean,因为反正还要改嘛。 但是这个项目测试好了,你要打成jar包给…...

Stable Diffusion 硬核生存指南:WebUI 中的 CodeFormer

本篇文章聊聊 Stable Diffusion WebUI 中的核心组件,强壮的人脸图像面部画面修复模型 CodeFormer 相关的事情。 写在前面 在 Stable Diffusion WebUI 项目中,源码 modules 目录中,有一个有趣的目录叫做 CodeFormer,它就是本文的…...

从零开始理解Linux中断架构(24)软中断核心函数__do_softirq

1)概要 __do_softirq函数处理是总是尽可能的执行所有未决软中断。 (1)关闭软中断:在preempt_count设置软中断标志:SOFTIRQ_OFFSET 让in_interrupt检查条件为真,进入软中断处理临界区,后面进来的处理请求,需要检查in_interrupt(),从而达到禁止本cpu上的软中断嵌套的目…...

【云原生】Kubernetes中deployment是什么?

目录 Deployments 更新 Deployment 回滚 Deployment 缩放 Deployment Deployment 状态 清理策略 金丝雀部署 编写 Deployment 规约 Deployments 一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力。 你负责描述 Deployment 中的 目标状态,而 De…...

sk_buff操作函数学习

一. 前言 内核提供了大量实用的操作sk_buff的函数,在开发网络设备驱动程序和修改网络协议栈代码时需要用到。这些函数从功能上可以分为三类:创建,释放和复制socket buffer;操作sk_buff结构中的参数和指针;管理socket b…...

conda create时候出现JSONDecoderError解决方法

起因是我的conda出现了JSONDecoderError,这个我搜了一下是因为某些配置文件错误,所以让我update conda,于是我先用了下面的指令: conda update conda 但是在执行过程中依然会出现 JSONDecoderError的问题,后来参考了这…...

Electron 工具进程utilityProcess 使用中遇到的坑点汇集

简介 这是基于 node.js 中的子进程的概念推出来的,可参考链接:utilityProcess | Electron 官网有一句话非常重要,它提供一个相当于 Node.js 的 child_process.fork API,但使用 Chromium 的 Services API 代替来执行子进程。这句话…...

JdbcTemplate

目录 1、简介 2、开发步骤 2.1、导入坐标 2.2、创建表和类 2.3、创建JdbcTemplate对象 2.4、执行数据库操作 3、解耦 4、增删改查 ⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹…...

PROFINET转TCP/IP网关profinet网线接头接法

大家好,今天要和大家分享一款自主研发的通讯网关,捷米JM-PN-TCPIP。这款网关可是集多种功能于一身,PROFINET从站功能,让它在通讯领域独领风骚。想知道这款网关如何实现PROFINET和TCP/IP网络的连接吗?一起来看看吧&…...

【FPGA IP系列】FIFO的通俗理解

FPGA厂商提供了丰富的IP核,基础性IP核都是可以直接免费调用的,比如FIFO、RAM等等。 本文主要介绍FIFO的一些基础知识,帮助大家能够理解FIFO的基础概念。 一、FIFO介绍 FIFO全称是First In First Out,即先进先出。 FIFO是一个数…...

Kylin v10基于cephadm工具离线部署ceph分布式存储

1. 环境: ceph:octopus OS:Kylin-Server-V10_U1-Release-Build02-20210824-GFB-x86_64、CentOS Linux release 7.9.2009 2. ceph和cephadm 2.1 ceph简介 Ceph可用于向云平台提供对象存储、块设备服务和文件系统。所有Ceph存储集群部署都从…...

框架的前置学习-反射

运行java代码要经历的三个阶段 反射,程序框架设计的灵魂,将类的各个组成部分封装成其他对象,这就是反射机制。 框架:半成品的软件,在框架的基础上进行开发,可以简化编码 反射的好处: 可以在…...

【使用bat脚本实现批量创建文件夹、批量复制文件至对应文件夹中】

使用bat脚本实现批量创建文件夹、批量复制文件至对应文件夹中 常用cmd命令 场景一:在指定位置批量创建文件夹 在桌面创建一个txt文件编写创建目录代码 //在桌面"五保户结算单"的文件夹下创建名称为"1张三"的文件夹 md E:\桌面\五保户结算单\…...

面向视频会议场景的 H.266/VVC 码率控制算法研究

文章目录 面向视频会议场景的 H.266/VVC 码率控制算法研究个人总结摘要为什么要码率控制码率控制的关键会议类视频码率控制研究背景视频会议系统研究现状目前基于 R-λ模型的码率控制算法的问题文章主要两大优化算法优化算法1:基于视频内容相关特征值的码率控制算法…...

【网络基础实战之路】设计网络划分的实战详解

系列文章传送门: 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 PS:本要求基于…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes&#xff0…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...