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

python 剪切音频

python 剪切音频


import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
from pydub import AudioSegment
import os

def cut_audio(input_file, start_time, end_time):
    """
    剪切音频文件
    :param input_file: 输入音频文件路径
    :param start_time: 开始时间(秒)
    :param end_time: 结束时间(秒)
    """
    try:
        # 检查文件是否存在
        if not os.path.exists(input_file):
            raise FileNotFoundError(f"找不到文件: {input_file}")

        # 加载音频文件
        print(f"正在加载音频文件: {input_file}")
        audio = AudioSegment.from_file(input_file)

        # 转换时间为毫秒
        start_ms = int(float(start_time) * 1000)
        end_ms = int(float(end_time) * 1000)

        # 验证时间范围
        if start_ms >= end_ms:
            raise ValueError("开始时间必须小于结束时间")
        
        if end_ms > len(audio):
            raise ValueError(f"结束时间超出音频长度 ({len(audio)/1000:.2f}秒)")

        # 执行剪切
        print(f"正在剪切音频: {start_time}秒 到 {end_time}秒")
        cut_audio = audio[start_ms:end_ms]

        # 生成输出文件名
        file_name = os.path.splitext(input_file)[0]
        output_file = f"{file_name}_cut_{start_time}-{end_time}.mp3"

        # 导出文件
        print(f"正在保存文件: {output_file}")
        cut_audio.export(output_file, format="mp3")
        
        print(f"剪切完成!输出文件: {output_file}")
        return True

    except Exception as e:
        print(f"错误: {str(e)}")
        return False

def main():
    # 检查参数数量
    if len(sys.argv) != 4:
        print("使用方法: python script.py <音频文件> <开始时间(秒)> <结束时间(秒)>")
        print("示例: python script.py input.mp3 10 30")
        return

    # 获取参数
    input_file = sys.argv[1]
    start_time = sys.argv[2]
    end_time = sys.argv[3]

    # 执行剪切
    cut_audio(input_file, start_time, end_time)

if __name__ == "__main__":
    # main()
    cut_audio("output.wav", 11, 15)

http://www.dtcms.com/a/38814.html

相关文章:

  • [特殊字符]️ ‌Selenium元素存在性判断的5种方法‌
  • 归纳总结一下Tensorflow、PaddlePaddle、Pytorch构建神经网络基本流程,以及使用NCNN推理的流程
  • 快速上手 Uniapp:从入门到精通的捷径
  • css 设置svg文字的对齐方式。右对齐
  • 五、Redis哨兵监控
  • Halcon 颜色分割算子、RGB和HSV之间的转换
  • 基于STM32的智能垃圾分类与回收系统
  • Go红队开发—并发编程
  • 数据结构:二叉树的数组结构以及堆的实现详解
  • C++之继承详解
  • pikachu
  • MySQL 时区参数 time_zone 详解
  • 边缘计算收益低的三大指标
  • 使用Modbus协议西门子 S7-200 SMART PLC 通信
  • 组件传递props校验
  • leetcode59------螺旋矩阵II
  • sqlilab 46 关(布尔、时间盲注)
  • 用数组实现树的存储遍历【复习笔记】
  • 3DUNet-Pytorch-master环境配置(3dunet)
  • (IDE接入DeepSeek)简单了解DeepSeek接入辅助开发与本地部署建议
  • 【前端基础】Day 2 CSS层叠样式表
  • 说一下 SpringMVC的运行流程?
  • 代码随想录算法【Day54】
  • 系统架构设计:软件测试需要掌握的常用方法
  • pytorch阶段性总结1
  • 前端模拟请求池-浏览器同时发起大量请求
  • mysql 拼接多行合并为一行
  • 入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】
  • 机试刷题_HJ106 字符逆序【python】
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.1.2典型应用场景:日志分析、实时搜索、推荐系统