mcpField
A
audio-trimmer

audio-trimmer

github.com/dkyazzentwatwa创意与媒体12463 次安装29 周前更新
代码仓库

关于 audio-trimmer

audio-trimmer 是用于音频编辑的 Python 工具和命令行程序,可按时间精确截取片段,并支持淡入淡出、变速、效果处理、静音操作和拼接。

主要功能

  1. 01按时间戳或毫秒裁剪
  2. 02添加淡入淡出和交叉淡化
  3. 03调整播放速度
  4. 04反转、循环或叠加音频
  5. 05调整增益并标准化音量
  6. 06添加或移除静音

适用场景

  1. 01截取播客精彩片段
  2. 02从歌曲制作铃声
  3. 03加快讲座录音播放
  4. 04用交叉淡化拼接节目片段

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dkyazzentwatwa/chatgpt-skills --skill audio-trimmer

安装后在 Claude Code 中输入/audio-trimmer确认已加载。

附带文件scripts/audio_trimmer.pyscripts/requirements.txt

详细介绍

音频剪辑器

通过精准剪切、修剪和添加效果来编辑音频文件。提取片段、添加淡入淡出、调整速度、拼接剪辑,并进行基本的音频处理。

快速开始

from scripts.audio_trimmer import AudioTrimmer

# Trim to segment
trimmer = AudioTrimmer("podcast.mp3")
trimmer.trim(start="00:05:30", end="00:10:00")
trimmer.save("segment.mp3")

# Add fades and save
trimmer = AudioTrimmer("song.mp3")
trimmer.fade_in(3000).fade_out(5000).save("song_faded.mp3")

# Concatenate multiple files
AudioTrimmer.concatenate(["intro.mp3", "main.mp3", "outro.mp3"], "full_episode.mp3")

功能

  • 精准修剪:按时间戳或毫秒剪切片段
  • 淡入淡出效果:设置可自定义时长的淡入和淡出
  • 速度控制:加快或减慢音频
  • 拼接:合并多个音频文件
  • 基本效果:反转、循环、叠加
  • 静音操作:添加静音、移除静音
  • 音量调整:增益控制、标准化

API 参考

初始化
trimmer = AudioTrimmer("audio.mp3")
修剪
# By timestamp (HH:MM:SS or MM:SS)
trimmer.trim(start="01:30", end="05:00")

# By milliseconds
trimmer.trim(start_ms=90000, end_ms=300000)

# From start to timestamp
trimmer.trim(end="02:00")

# From timestamp to end
trimmer.trim(start="10:00")
淡入淡出效果
# Fade in at start (milliseconds)
trimmer.fade_in(3000)  # 3 second fade in

# Fade out at end
trimmer.fade_out(5000)  # 5 second fade out

# Crossfade (for concatenation)
AudioTrimmer.concatenate_with_crossfade(files, output, crossfade_ms=2000)
速度控制
# Speed up (1.5x)
trimmer.speed(1.5)

# Slow down (0.75x)
trimmer.speed(0.75)
效果
# Reverse audio
trimmer.reverse()

# Loop audio N times
trimmer.loop(3)

# Overlay another audio
trimmer.overlay("background.mp3", position_ms=0, volume=-6)
音量
# Adjust volume (dB)
trimmer.gain(6)   # Increase by 6 dB
trimmer.gain(-3)  # Decrease by 3 dB

# Normalize to target level
trimmer.normalize(-3)  # Normalize to -3 dBFS
静音操作
# Add silence at start
trimmer.add_silence_start(2000)  # 2 seconds

# Add silence at end
trimmer.add_silence_end(1000)

# Strip leading/trailing silence
trimmer.strip_silence(threshold=-50)  # dBFS threshold
拼接
# Simple concatenation
AudioTrimmer.concatenate(
    ["file1.mp3", "file2.mp3", "file3.mp3"],
    "output.mp3"
)

# With crossfade
AudioTrimmer.concatenate_with_crossfade(
    ["intro.mp3", "main.mp3", "outro.mp3"],
    "output.mp3",
    crossfade_ms=2000
)
保存
# Save to file (format from extension)
trimmer.save("output.mp3")

# Explicit format and quality
trimmer.save("output.mp3", format="mp3", bitrate=320)

CLI 用法

# Trim segment
python audio_trimmer.py --input podcast.mp3 --output segment.mp3 --start 05:30 --end 10:00

# Add fades
python audio_trimmer.py --input song.mp3 --output faded.mp3 --fade-in 3000 --fade-out 5000

# Speed up
python audio_trimmer.py --input lecture.mp3 --output fast.mp3 --speed 1.5

# Concatenate files
python audio_trimmer.py --concat file1.mp3 file2.mp3 file3.mp3 --output merged.mp3

# Extract multiple segments
python audio_trimmer.py --input podcast.mp3 --segments "00:00-05:00,10:00-15:00,20:00-25:00" --output-dir ./clips/
CLI 参数
参数描述默认值
--input输入音频文件必填
--output输出文件路径必填
--start开始时间戳(HH:MM:SS 或 MM:SS)-
--end结束时间戳-
--fade-in淡入时长(毫秒)-
--fade-out淡出时长(毫秒)-
--speed速度倍率1.0
--gain音量调整(dB)0
--reverse反转音频False
--normalize标准化至 dBFS 电平-
--concat要拼接的文件-
--crossfade拼接时的交叉淡化时长(毫秒)0
--segments要提取的多个片段-

示例

提取播客片段
trimmer = AudioTrimmer("episode_42.mp3")
trimmer.trim(start="15:30", end="22:45")
trimmer.fade_in(1000)
trimmer.fade_out(2000)
trimmer.save("highlight_clip.mp3")
创建铃声
trimmer = AudioTrimmer("song.mp3")
trimmer.trim(start="01:15", end="01:45")  # 30-second segment
trimmer.fade_in(500)
trimmer.fade_out(1000)
trimmer.normalize(-3)
trimmer.save("ringtone.mp3", bitrate=192)
加快讲座音频
trimmer = AudioTrimmer("lecture.mp3")
trimmer.speed(1.25)  # 25% faster
trimmer.normalize(-16)  # Podcast-friendly level
trimmer.save("lecture_fast.mp3")
用片段构建节目
# With crossfades between segments
AudioTrimmer.concatenate_with_crossfade(
    files=[
        "intro_music.mp3",
        "sponsor_read.mp3",
        "main_content.mp3",
        "outro_music.mp3"
    ],
    output="full_episode.mp3",
    crossfade_ms=1500
)
提取多个精彩片段
# Extract several segments from a long recording
trimmer = AudioTrimmer("meeting_recording.mp3")

segments = [
    ("00:05:00", "00:08:30", "intro"),
    ("00:25:00", "00:32:00", "discussion"),
    ("01:15:00", "01:20:00", "conclusion")
]

for start, end, name in segments:
    t = AudioTrimmer("meeting_recording.mp3")
    t.trim(start=start, end=end)
    t.fade_in(500)
    t.fade_out(500)
    t.save(f"{name}.mp3")
添加背景音乐
# Overlay quiet background music
trimmer = AudioTrimmer("podcast.mp3")
trimmer.overlay(
    "ambient_music.mp3",
    position_ms=0,
    volume=-15,  # 15 dB quieter
    loop=True    # Loop to fill duration
)
trimmer.save("podcast_with_music.mp3")

时间格式参考

剪辑器接受以下时间戳格式:

格式示例含义
MM:SS05:305 分 30 秒
HH:MM:SS01:30:001 小时 30 分钟
SS9090 秒
SS.ms90.50090.5 秒

依赖项

pydub>=0.25.0

注意:需要在系统上安装 FFmpeg。

限制

  • 调整速度可能会影响音高(不会保留音高)
  • 超大文件可能会占用大量内存
  • 交叉淡化在音量相近的音频之间效果最佳

评论

支持 Markdown