audio-trimmer について
audio-trimmerは、音声ファイルを編集するPythonツールとコマンドラインプログラムです。時間を指定した切り出しに加え、フェード、速度変更、エフェクト、無音処理、ファイル結合に対応します。
主な機能
- 01時刻またはミリ秒で切り出し
- 02フェードとクロスフェードの適用
- 03再生速度の変更
- 04音声の反転・ループ・重ね合わせ
- 05ゲイン調整と音量の正規化
- 06無音の追加と除去
活用シーン
- 01ポッドキャストからハイライトを切り出す
- 02曲から着信音を作る
- 03講義録音を速く再生する
- 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 | フェードインの長さ(ms) | - |
--fade-out | フェードアウトの長さ(ms) | - |
--speed | 速度の倍率 | 1.0 |
--gain | 音量調整(dB) | 0 |
--reverse | オーディオを逆再生 | False |
--normalize | dBFS レベルに正規化 | - |
--concat | 結合するファイル | - |
--crossfade | 結合時のクロスフェードの長さ(ms) | 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")
BGM を追加する
# 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:SS | 05:30 | 5 分 30 秒 |
HH:MM:SS | 01:30:00 | 1 時間 30 分 |
SS | 90 | 90 秒 |
SS.ms | 90.500 | 90.5 秒 |
依存関係
pydub>=0.25.0
注:システムに FFmpeg がインストールされている必要があります。
制限事項
- 速度を調整するとピッチが変化する場合があります(ピッチは保持されません)
- 非常に大きなファイルは大量のメモリを消費する場合があります
- クロスフェードは、音量レベルが近いオーディオ同士で最も効果的です
コメント
Markdown 対応