使用Python和FFmpeg批量转换视频为GIF

server/2025/1/17 5:55:58/

使用Python和FFmpeg批量转换视频为GIF

我们来继续昨天的项目,但是昨天所说的是单个视频转pdf,要实现批量转化,还需进行参数的调整

批量转换视频为GIF的示例代码

下面是一个Python脚本示例,展示了如何遍历一个目录中的所有视频文件,并将它们批量转换为GIF。

python">import subprocess
import osdef convert_video_to_gif(input_video_path, output_gif_path, start_time, duration):# FFmpeg命令command = ['ffmpeg','-ss', str(start_time),  # 指定开始时间'-t', str(duration),      # 指定持续时间'-i', input_video_path,   # 输入视频路径'-vf', 'fps=10,scale=320:-1:flags=lanczos',  # 处理视频帧率和尺寸'-c:v', 'gif',           # 输出格式为gifoutput_gif_path          # 输出GIF路径]# 执行命令subprocess.run(command)print(f"成功将视频 {input_video_path} 转换为GIF {output_gif_path}!")def batch_convert_videos(input_directory, output_directory, start_time, duration):# 确保输出目录存在os.makedirs(output_directory, exist_ok=True)# 遍历输入目录中的所有文件for filename in os.listdir(input_directory):if filename.endswith(('.mp4', '.avi', '.mov', '.mkv')):  # 支持的视频格式input_video_path = os.path.join(input_directory, filename)output_gif_path = os.path.join(output_directory, f"{os.path.splitext(filename)[0]}.gif")  # 输出GIF文件名# 确保输入文件存在if os.path.exists(input_video_path):convert_video_to_gif(input_video_path, output_gif_path, start_time, duration)else:print(f"输入视频文件 {input_video_path} 不存在,请检查路径。")# 使用示例
input_directory = 'videos'  # 输入视频文件所在目录
output_directory = 'gifs'    # 输出GIF文件所在目录
start_time = 5               # 从视频的第5秒开始
duration = 2                 # 持续时间为2秒batch_convert_videos(input_directory, output_directory, start_time, duration)

代码解析

  • 批量处理函数batch_convert_videos函数接受输入目录、输出目录、开始时间和持续时间作为参数。
  • 遍历目录:使用os.listdir遍历输入目录中的所有文件,检查文件扩展名以确定是否为支持的视频格式(如.mp4.avi.mov.mkv)。
  • 生成输出路径:使用os.path.splitext获取文件名(不带扩展名),并生成输出GIF的路径。
  • 确保输出目录存在:使用os.makedirs创建输出目录(如果不存在的话)。
  • 调用转换函数:对每个视频文件调用convert_video_to_gif函数进行转换。

运行脚本

  1. 将你要转换的视频文件放在指定的输入目录(例如videos)。
  2. 运行上述Python脚本,生成的GIF文件将保存在指定的输出目录(例如gifs)中。

http://www.ppmy.cn/server/159011.html

相关文章

《鸿蒙Next旅游应用:人工智能赋能个性化与智能导览新体验》

随着鸿蒙Next的推出,旅游应用迎来了全新的发展机遇,借助人工智能技术能为用户带来更出色的个性化推荐和智能导览服务。 鸿蒙Next与人工智能融合优势 鸿蒙Next拥有强大的分布式能力和原生智能体验。其能打破设备界限,实现多设备协同&#xf…

2024年第十二期 | CCF ODC《开源战略动态月报》

点击蓝字 关注我们 CCF Opensource Development Committee 导 读 2024年第十一期CCF ODC《开源战略动态月报》共摘选45篇文章,分为8个版块:ODC专栏、开源政策、理论观点、产业动态、技术项目、开源组织与机构、开源报告通讯会议以及RISC-V专栏&#xff0…

【大数据】机器学习------决策树

一、基本流程 决策树是一种基于树结构的分类和回归方法,它通过对特征空间进行划分,每个内部节点表示一个特征测试,每个分支代表一个测试输出,每个叶节点代表一个类别或回归值。 特征选择:根据某种准则(如信…

HTTP 安全:HTTPS 原理与配置

一、引言 在当今数字化时代,网络安全至关重要。我们日常上网离不开 HTTP 协议,但它存在安全隐患。HTTP 以明文传输数据,信息易被窃取、篡改,身份也难以验证,像账号密码、交易信息等敏感内容在传输时毫无保障。 为解决…

英伟达在CES 2025上的技术发布与采访综述

目录 主题演讲与技术亮点 显卡市场的未来展望 Cosmos与自动驾驶的创新突破 开源战略与行业合作 人工智能与产业影响力 游戏行业的AI应用 通用机器人与市场前景 总结 在2025年拉斯维加斯CES展会上,英伟达首席执行官黄仁勋发表了一场令人瞩目的主题演讲&#…

GaussDB创建不同兼容模式的数据库

GaussDB创建不同兼容模式的数据库 创建Oracle兼容模式的数据库创建MySQL兼容模式的数据库创建GoldenDB兼容模式的数据库创建PostgreSQL兼容模式的数据库 使用UGO迁移工具时要考虑GaussDB数据库兼容性。 检查已创建数据库的兼容模式: gaussdb# select datname,datc…

深度解析 React 中 setState 的原理:同步与异步的交织

在 React 框架的核心机制里,setState是实现动态交互与数据驱动视图更新的关键枢纽。深入理解setState的工作原理,尤其是其同步与异步的特性,对于编写高效、稳定且可预测的 React 应用至关重要。 一、setState 的基础认知 在 React 组件中&a…

双端队列实战 实现滑动窗口 用LinkedList的基类双端队列Deque实现 洛谷[P1886]

集合 关系 介绍 Deque 是一个接口 LinkedList 是这个接口的实现类 题目 输入输出 滑动窗口 基于双端队列实现 Deque<Integer> deque new LinkedList<>(); 滑动窗口代码 public static List<Integer> maxSlidingWindow(int[] nums, int k) {List<Int…