当前位置: 首页 > 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实现图文成片功能

相关文章:

  • 【活动】开源与闭源大模型:探索未来趋势的双轨道路
  • 安装WordPress
  • 【Python爬虫】图片验证码的处理
  • DNS 解析过程
  • SpringBoot 微服务中怎么获取用户信息 token
  • 《web应用技术》第9次课后作业
  • Dropbear SSH服务器的安装和优化
  • 视频集中存储LntonCVS视频监控汇聚平台智慧园区应用方案
  • 案例研究|MeterSphere助力万物云构建高效自动化测试平台
  • QA测试开发工程师面试题满分问答25: JVM瓶颈分析,举例说明
  • 读人工智能时代与人类未来笔记17_人类未来
  • 逻辑分析仪的调试使用
  • 【放球问题】920. 播放列表的数量
  • MongoDB CRUD操作:投影Project详解
  • os模块概述及常用方法
  • 【技术性】Search知识
  • classpath对获取配置文件的影响
  • Java到底能干嘛?
  • java小心机(3)| 浅析finalize()
  • laravel 用artisan创建自己的模板
  • Linux CTF 逆向入门
  • Linux快速复制或删除大量小文件
  • MySQL用户中的%到底包不包括localhost?
  • python3 使用 asyncio 代替线程
  • Python语法速览与机器学习开发环境搭建
  • Spring Boot快速入门(一):Hello Spring Boot
  • vue 个人积累(使用工具,组件)
  • Webpack 4x 之路 ( 四 )
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 给初学者:JavaScript 中数组操作注意点
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 区块链共识机制优缺点对比都是什么
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • -- 数据结构 顺序表 --Java
  • 微信公众号开发小记——5.python微信红包
  • 小李飞刀:SQL题目刷起来!
  • 正则表达式
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​linux启动进程的方式
  • #mysql 8.0 踩坑日记
  • $refs 、$nextTic、动态组件、name的使用
  • (C++)八皇后问题
  • (Java入门)学生管理系统
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (一)为什么要选择C++
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)Sql Server 保留几位小数的两种做法
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .Net(C#)常用转换byte转uint32、byte转float等