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

【Python音视频技术】用moviepy实现图文成片功能

今天上班的时候看到有人群里问 图文成片怎么实现。 临时给我提供一点写作的灵感,趁着下班写一篇。这里用到 python的moviepy库, 之前文章介绍过。

大体思路:假定有4张图片,每张图片将在视频中展示2秒钟,并且图片会按照顺序循环播放,直到音频结束。

from moviepy.efrom moviepy.editor import ImageClip, AudioFileClip, concatenate_videoclips, CompositeVideoClip
from moviepy.audio.fx.all import audio_loop
from PIL import Image
import osdef resize_images(image_files, desired_size):resized_images = []for image_file in image_files:# 打开一张图片文件with Image.open(image_file) as img:# 调整图片大小到目标尺寸img = img.resize(desired_size, Image.ANTIALIAS)# 将调整后的图片保存到临时文件temp_file = f"temp_{os.path.basename(image_file)}"img.save(temp_file)resized_images.append(temp_file)return resized_imagesdef create_video_from_images(image_files, audio_file, output_file, fps=24, desired_size=(1280, 720)):# 将图片调整到目标尺寸resized_images = resize_images(image_files, desired_size)# 加载音频文件audio = AudioFileClip(audio_file)# 设置图片展示时长为2秒image_duration = 2# 创建单独的图片剪辑并设置展示时长clips = [ImageClip(img).set_duration(image_duration).set_fps(fps) for img in resized_images]# 将所有图片剪辑拼接成循环播放的一个视频剪辑video_clip = concatenate_videoclips(clips, method="compose").loop(duration=audio.duration)# 给视频剪辑设置音频final_video = video_clip.set_audio(audio)# 将结果写入输出文件final_video.write_videofile(output_file, codec="libx264", audio_codec="aac", fps=fps)# 清理临时文件for temp_file in resized_images:os.remove(temp_file)# demo:
image_files = ['image1.jpg', 'image2.jpg', 'image3.jpg', 'image4.jpg']  # 图片文件列表
audio_file = 'background_music.mp3'  # 音频文件
output_file = 'output_video.mp4'  # 输出视频文件create_video_from_images(image_files, audio_file, output_file)ditor import ImageClip, AudioFileClip, concatenate_videoclips, CompositeVideoClip
from moviepy.audio.fx.all import audio_loop
from PIL import Image
import osdef resize_images(image_files, desired_size):resized_images = []for image_file in image_files:# 打开一张图片文件with Image.open(image_file) as img:# 调整图片大小到目标尺寸img = img.resize(desired_size, Image.ANTIALIAS)# 将调整后的图片保存到临时文件temp_file = f"temp_{os.path.basename(image_file)}"img.save(temp_file)resized_images.append(temp_file)return resized_imagesdef create_video_from_images(image_files, audio_file, output_file, fps=24, desired_size=(1280, 720)):# 将图片调整到目标尺寸resized_images = resize_images(image_files, desired_size)# 加载音频文件audio = AudioFileClip(audio_file)# 设置图片展示时长为2秒image_duration = 2# 创建单独的图片剪辑并设置展示时长clips = [ImageClip(img).set_duration(image_duration).set_fps(fps) for img in resized_images]# 将所有图片剪辑拼接成循环播放的一个视频剪辑video_clip = concatenate_videoclips(clips, method="compose").loop(duration=audio.duration)# 给视频剪辑设置音频final_video = video_clip.set_audio(audio)# 将结果写入输出文件final_video.write_videofile(output_file, codec="libx264", audio_codec="aac", fps=fps)# 清理临时文件for temp_file in resized_images:os.remove(temp_file)# demo:
image_files = ['image1.jpg', 'image2.jpg', 'image3.jpg', 'image4.jpg']  # 图片文件列表
audio_file = 'background_music.mp3'  # 音频文件
output_file = 'output_video.mp4'  # 输出视频文件create_video_from_images(image_files, audio_file, output_file)

这里的图片素材采用腾讯智影生成, 音频采用suno生成。最后的效果

相关文章:

【Python音视频技术】玩AI视频创作引发写Python音视频技术系列文章1—视频添加字幕

【Python音视频技术】Python音视频技术系列文章2—视频提取音频转换文字

【Python音视频技术】Python音视频技术系列文章3—音频转换文字技术方案

原文链接:【Python音视频技术】用moviepy实现图文成片功能

相关文章:

【Python音视频技术】用moviepy实现图文成片功能

今天上班的时候看到有人群里问 图文成片怎么实现。 临时给我提供一点写作的灵感,趁着下班写一篇。这里用到 python的moviepy库, 之前文章介绍过。 大体思路:假定有4张图片,每张图片将在视频中展示2秒钟,并且图片会按照…...

【Linux】权限的理解之权限掩码(umask)

目录 前言 一、利用八进制数值表示文件或目录的权限属性 二、系统默认的权限掩码和权限掩码的作用原理 三、分析权限掩码改变文件或目录的权限属性 前言 权限掩码是由4个数字组合而成的,默认的第一位数字是0;后三位数字分别由八进制位数字组成。权限…...

UVa1466/LA4849 String Phone

UVa1466/LA4849 String Phone 题目链接题意分析AC 代码 题目链接 本题是2010年icpc亚洲区域赛大田赛区的G题 题意 平面网格上有n(n≤3000)个单元格,各代表一个重要的建筑物。为了保证建筑物的安全,警察署给每个建筑物派了一名警察…...

使用Word表格数据快速创建图表

实例需求:Word的表格如下所示,标题行有合并单元格。 现在需要根据上述表格数据,在Word中创建如下柱图。如果数据在Excel之中,那么创建这个图并不复杂,但是Word中就没用那么简单了,虽然Word中可以插入图表&a…...

JAVA面试题大全(十三)

1、Mybatis 中 #{}和 ${}的区别是什么? 在 MyBatis 中,#{} 和 ${} 是两种用于参数绑定的方式,它们之间的主要区别在于数据处理的方式和 SQL 注入的风险。 #{}:预编译处理 #{} 用于预编译处理,MyBatis 会为其生成 Prep…...

搜维尔科技:第九届元宇宙数字人设计大赛入围作品名单

随着第九届元宇宙数字人设计大赛渐近尾声,各院校提交的数字人作品已陆续完成评分统计汇总工作!现将入围名单公布,请入围团队尽可能到场参加大赛颁奖典礼,具体获奖名次将在颁奖典礼中现场公布! 颁奖典礼时间、地点&…...

SMB工具横向移动

一. SMB工具介绍和使用 1.介绍 2013年的Defcon上,就引入了smbexec,后续 smbexec 被 Impacket 进一步完善了。在Impacket中支持明文认证,NTLM认证,Aeskey认证等方式! 2. 使用方法 命令: smbexec.exe 用户…...

cesuim

new Cesium.Color(255,255,0,1), //颜色 Math.PI/2color: Cesium.Color.fromCssColorString("#f40"), //16进制颜色初始化地球 import * as Cesium from "cesium";import { onMounted } from "vue"; onMounted(() > {Cesium.Ion.defaultAcc…...

2023、2024国赛web复现wp

2023 Unzip 类型&#xff1a;任意文件上传漏洞 主要知识点&#xff1a;软链接 随便上传一个一句话木马文件&#xff0c;得到一串php代码 根据代码上传zip文件发现进入后还是此页面 代码审计&#xff1a; <?php error_reporting(0); highlight_file(__FILE__);$finfo fin…...

day34 贪心算法 455.分发饼干 376. 摆动序列

贪心算法理论基础 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪心一般解题步骤&#xff08;贪心无套路&#xff09;&#xff1a; 将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解 455.分发饼干 …...

养老院管理系统基于springboot的养老院管理系统java项目

文章目录 养老院管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目源码&#xff08;9.9&#xffe5;带走&#xff09; 养老院管理系统 一、项目演示 养老院管理系统 二、项目介绍 基于springboot的养老院管理系统 角色&#xff1a;超级…...

跳台阶扩展问题

题目链接 f(1) 1f(2) 1 1 2f(3) 1 2 1 4f(4) 1 2 4 1 8 所以 f(n) 2 n − 1 ^{n-1} n−1 import java.util.Scanner;public class Solution {public int jumpFloorII(int target) {return 1 << (target - 1);} }...

超清高帧,成像升级 | SWIR短波红外相机500万像素992芯片

博图光电5MP短波红外相机&#xff0c;搭载了索尼IMX992 SenSWIR传感器&#xff0c;支持5.2MP分辨率&#xff0c;适合探测波长在400nm-1700nm波段的可见光和短波红外光&#xff0c;有效面积和透光率得到提升&#xff0c;内置TEC制冷片&#xff0c;实现了像素尺寸和图像均匀性方面…...

攻击渗透思考题

1. windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff0c;密文存在哪个文件下&#xff0c;该文件是否可以打开&#xff0c;并且查看到密文 在Windows操作系统中&#xff0c;登录时输入的明文密码不会以明文形式存储在系统中。相反&#xff0c;Windows使用一种称为“…...

Flutter 中的 Opacity 小部件:全面指南

Flutter 中的 Opacity 小部件&#xff1a;全面指南 在Flutter中&#xff0c;动画和视觉效果是提升用户体验的重要手段。Opacity小部件允许你改变子组件的透明度&#xff0c;从而实现淡入、淡出或其它透明度相关的动画效果。本文将提供Opacity的全面指南&#xff0c;帮助你了解…...

【介绍下如何在SQL中添加数据】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…...

【Linux学习】深入了解Linux中进程状态及其转换

文章目录 进程状态进程排队进程的状态&#xff08;运行&#xff0c;阻塞&#xff0c;挂起&#xff09;进程的七个状态 孤儿进程 进程状态 进程 task_struct 可执行程序 进程不是一 直在运行的&#xff0c;可能在等待软硬件资源&#xff0c;比如scanf后&#xff0c;程序停止运…...

【Python设计模式11】建造者模式

建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它将一个复杂对象的构建过程分离出来&#xff0c;使得同样的构建过程可以创建不同的表示。建造者模式通过使用多个简单的对象一步一步构建成一个复杂的对象。 建造者模式的结构 建造者模式…...

coredump文件生成配置

1.打开coredump文件生成开关 查看开关是否打开&#xff1a;ulimit -a 如果core file size 为0&#xff0c;则为关闭。 执行&#xff1a;ulimit -c 10240 将其coredump文件大小设置。 2.coredump文件保存位置&#xff1a; /proc/sys/kernel/core_pattern文件可以控制core文…...

jmeter线程组(下篇)

线程组 线程组作为JMeter测试计划的核心组件之一&#xff0c;对于模拟并发用户的行为至关重要。线程组元件是整个测试计划的入口&#xff0c;所有的取样器和控制器必须放置在线程组下。 可以将线程组视为一个虚拟用户池&#xff0c;其中每个线程可被理解为一个虚拟用户&#x…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...