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

拉长视频时长的两种方法

系统导入错误“ImportError:无法导入名称‘Moviepy.editor’“的解决办法

方法一:

from moviepy.editor import VideoFileClip
import osdef slow_down_video(input_path, output_path, target_duration):"""通过放慢视频速度将视频调整到指定时长参数:input_path: 输入视频路径output_path: 输出视频路径target_duration: 目标时长(秒)"""# 读取视频with VideoFileClip(input_path) as video:original_duration = video.durationprint(f"原视频时长: {original_duration:.2f}秒")print(f"目标时长: {target_duration:.2f}秒")# 检查目标时长是否小于原时长if target_duration <= original_duration:raise ValueError(f"目标时长({target_duration}秒)必须大于原视频时长({original_duration:.2f}秒)")# 计算速度因子:原时长/目标时长,值小于1表示放慢speed_factor = original_duration / target_durationprint(f"计算得到的速度因子: {speed_factor:.4f}")# 确保速度因子有效(大于0小于1)if speed_factor <= 0 or speed_factor >= 1:raise ValueError(f"无效的速度因子: {speed_factor:.4f},必须在0-1之间")# 放慢视频速度adjusted_video = video.speedx(factor=speed_factor)print(f"调整后视频的计算时长: {original_duration / speed_factor:.2f}秒")# 保存调整后的视频adjusted_video.write_videofile(output_path,codec="libx264",audio_codec="aac",fps=video.fps)print(f"视频处理完成,保存至: {output_path}")print(f"实际输出视频时长应约为: {target_duration:.2f}秒")if __name__ == "__main__":# 示例用法input_video = r"D:\Desktop\test_folder\jianying_materials_2\videos\3.mp4"output_video = r"D:\Desktop\test_folder\jianying_materials_2\videos\3_slow.mp4"target_time = 10  # 目标时长(秒),确保大于原视频时长if not os.path.exists(input_video):print(f"错误: 找不到输入文件 {input_video}")else:try:slow_down_video(input_video, output_video, target_time)except Exception as e:print(f"处理失败: {str(e)}")

方法二:

from moviepy.editor import VideoFileClip
import subprocess
import osdef slow_down_video_with_ffmpeg(input_path, output_path, target_duration):"""使用FFmpeg通过放慢视频速度将视频调整到指定时长参数:input_path: 输入视频路径output_path: 输出视频路径target_duration: 目标时长(秒)"""with VideoFileClip(input_path) as video:original_duration = video.durationif target_duration <= original_duration:raise ValueError("目标时长必须大于原视频时长")speed_factor = original_duration / target_duration# FFmpeg命令,通过设置setpts参数来改变视频的pts(显示时间戳)实现放慢速度ffmpeg_command = ['ffmpeg','-i', input_path,'-vf', f'setpts={1 / speed_factor}*PTS','-af', f'atempo={speed_factor}','-y',output_path]try:subprocess.run(ffmpeg_command, check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)print(f"视频已通过FFmpeg调整为 {target_duration} 秒,保存至: {output_path}")except subprocess.CalledProcessError as e:print(f"FFmpeg处理视频失败: {e}")input_path = r'D:\Desktop\test_folder\jianying_materials_2\videos\3.mp4'
output_path = r'D:\Desktop\test_folder\jianying_materials_2\videos\3_slow.mp4'slow_down_video_with_ffmpeg(input_path, output_path, 10)
http://www.xdnf.cn/news/19294.html

相关文章:

  • SCARA 机器人工具标定方法
  • VMware虚拟机网盘下载与安装指南(附安装包)
  • Ubuntu24.04(Jazzy)从零开始实现环境配置和Gmapping建图
  • Redis的Java客户端
  • MyBatis-动态sql
  • 【自记】 Python 中函数参数前加 *(单星号)的解包可迭代对象写法说明
  • 基于三维反投影矫正拼接视频
  • TJA1445学习笔记(二)
  • 咨询进阶——解读 目标管理实务:知识概述、管理概述和实施【附全文阅读】
  • 计算机视觉(四):二值化
  • MySQL面试集合
  • 【C++ 】STL详解(六)—手撸一个属于你的 list!
  • 力扣热题100:合并区间详解(Java实现)(56)
  • 在SAP系统中,如何查询已经被打上了删除标记的生产订单?
  • 数据结构(04)—— 栈和队列
  • [每周一更]-(第158期):构建高性能数据库:MySQL 与 PostgreSQL 系统化问题管理与优化指南
  • 【lua】元表、元方法 详解及应用
  • 【LeetCode_27】移除元素
  • Ubuntu中通过SSH克隆Windows的远程Git仓库(局域网中挺有用)
  • 对于牛客网—语言学习篇—编程初学者入门训练—复合类型:二维数组较简单题目的解析
  • Unity核心概念①
  • 准备机试--图【y总版】[重要]【最短路】
  • 三重积分的对称性
  • shell编程-核心变量知识
  • 面试专栏
  • Agent实战教程:LangGraph结构化输出详解,让智能体返回格式化数据
  • 第N个丑数
  • 文件夹和文件一键加密,保护你的隐私
  • CRM、ERP、HRP系统有啥区别?
  • 本地运行 Ollama 与 DeepSeek R1 1.5B,并结合 Open WebUI 测试