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

拉长视频时长的两种方法

系统导入错误“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.dtcms.com/a/359682.html

相关文章:

  • 2023年IEEE IOTJ SCI1区TOP,动态环境下无人机目标覆盖任务路径规划,深度解析+性能实测
  • 腾讯浑元最新技术:具有表征对齐的多模态扩散,用于高保真拟音音频生成
  • 免税商品优选购物商城系统|java技术开发
  • 计算机网络总览
  • join怎么用
  • 性能测试工具-Slow Query Log
  • C/C++ 高阶数据结构 —— 二叉搜索树(二叉排序树)
  • 安装Android Studio
  • DVWA靶场通关笔记-SQL Injection (Impossible级别)
  • 【LeetCode - 每日1题】解数独
  • Tomcat 中部署 Web 应用
  • [灵动微电子 MM32BIN560CN MM32SPIN0280]读懂电机MCU 模拟输入运放放大
  • LangChain Prompt管理核心:PromptTemplate与ChatPromptTemplate全解析
  • 旦旦的农场打卡计划
  • 合约服务架构-OOP 方式
  • Linux系统比较两个​​已排序文件​​的实用工具之comm
  • R3:适用于 .NET 的新一代响应式扩展库,事件订阅流
  • HarmonyOS 应用开发:基于API 12及以上的新特性与实践
  • 视觉大模型与多模态理解
  • MySQL直接启动命令mysqld详解:从参数说明到故障排查
  • 容器seccomp配置文件在云服务器安全策略中的实施规范
  • 基于单片机老人防丢失防摔倒系统/老人健康状态检测系统
  • 神州数码VRRP 原理与配置篇
  • 【lua】二进制数据打包和解析
  • 使用 Python 自动化检查矢量面数据的拓扑错误(含导出/删除选项)
  • 【C++ 】STL详解(六)—手撸一个属于你的 list!
  • Lua基础知识精炼
  • vscode+EIDE+Clangd环境导入keil C51以及MDK工程
  • PortSwigger靶场之Stored XSS into HTML context with nothing encoded通关秘籍
  • AG32 Nano开发板的烧录与调试工具(二)