mcpField
C
claude-video-audio

claude-video-audio

github.com/agricidaniel其他3141 次安装30 周前更新
代码仓库

关于 claude-video-audio

claude-video-audio 是面向音视频处理工作流的音频处理技能,提供基于 FFmpeg 等命令行工具的操作示例。涵盖响度、降噪、静音、格式与混音等常见任务。

主要功能

  1. 01EBU R128 两遍响度归一化
  2. 02FFT 与非局部均值降噪
  3. 03静音检测与移除
  4. 04音频提取、替换与混音
  5. 05音效、声道及格式转换
  6. 06语音触发的音乐闪避

适用场景

  1. 01将音频调整到平台响度目标
  2. 02清理录音中的背景噪声
  3. 03从视频提取或替换音轨
  4. 04为旁白自动降低背景音乐音量

安装

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

$npx skills add https://github.com/agricidaniel/claude-video --skill claude-video-audio

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

详细介绍

claude-video-audio — 音频处理

预检

  1. 运行 bash scripts/preflight.sh "$INPUT" "$OUTPUT"
  2. 分析音频流:ffprobe -v error -select_streams a -show_entries stream=codec_name,channels,sample_rate,bit_rate -of json "$INPUT"

响度标准化(EBU R128)

两遍工作流可实现准确的标准化:

# Pass 1: Measure current loudness
ffmpeg -i "$INPUT" -af loudnorm=I=-14:TP=-1.5:LRA=11:print_format=json -f null - 2>&1 | tail -12

从 JSON 输出中提取 measured_I、measured_TP、measured_LRA、measured_thresh 和 offset。

# Pass 2: Apply normalization with measured values
ffmpeg -n -i "$INPUT" -af "loudnorm=I=-14:TP=-1.5:LRA=11:\
measured_I=MEASURED_I:measured_TP=MEASURED_TP:measured_LRA=MEASURED_LRA:\
measured_thresh=MEASURED_THRESH:offset=MEASURED_OFFSET:linear=true" \
  -c:v copy "$OUTPUT"
各平台的目标响度
平台目标 LUFS真峰值备注
YouTube-14 LUFS-1.0 dBTPYouTube 只会降低响度,不会提高
Spotify-14 LUFS-1.0 dBTP“Loud”模式 = -11 LUFS
Apple Music-16 LUFS-1.0 dBTPSound Check
播客-16 LUFS-1.5 dBTP让对话清晰易懂
广播(EBU R128)-23 LUFS-1.0 dBTP欧洲标准
TikTok/Reels-14 LUFS-1.0 dBTP与 YouTube 保持一致

降噪

基于 FFT(适合稳定的背景噪声):

ffmpeg -n -i "$INPUT" -af "afftdn=nf=-25:nt=w" -c:v copy "$OUTPUT"

nf = 以 dB 为单位的噪声底限(数值越低,降噪越激进)。nt=w = 白噪声模型。

非局部均值(质量更好,但速度较慢):

ffmpeg -n -i "$INPUT" -af "anlmdn=s=7:p=0.002:r=0.002" -c:v copy "$OUTPUT"

高通/低通,去除隆隆声和嘶嘶声:

ffmpeg -n -i "$INPUT" -af "highpass=f=80,lowpass=f=12000" -c:v copy "$OUTPUT"

静音检测与移除

检测静音:

ffmpeg -i "$INPUT" -af "silencedetect=noise=-30dB:d=0.5" -f null - 2>&1 | grep silence

返回 silence_start 和 silence_end 时间戳。

移除静音(使用 Auto-Editor——简单得多):

auto-editor "$INPUT" --margin 0.3s -o "$OUTPUT"

使用 FFmpeg 手动移除静音:

ffmpeg -n -i "$INPUT" -af "silenceremove=start_periods=1:start_silence=0.5:start_threshold=-30dB:detection=rms" -c:v copy "$OUTPUT"

提取音频

# Extract as WAV (lossless)
ffmpeg -n -i "$INPUT" -vn -c:a pcm_s16le audio.wav

# Extract as AAC
ffmpeg -n -i "$INPUT" -vn -c:a aac -b:a 256k audio.m4a

# Extract as MP3
ffmpeg -n -i "$INPUT" -vn -c:a libmp3lame -b:a 320k audio.mp3

# Extract as Opus (most efficient)
ffmpeg -n -i "$INPUT" -vn -c:a libopus -b:a 128k audio.ogg

# Stream copy (fastest, keeps original codec)
ffmpeg -n -i "$INPUT" -vn -c:a copy audio.m4a

替换音频

# Replace audio track entirely
ffmpeg -n -i video.mp4 -i new_audio.wav -c:v copy -c:a aac -b:a 192k \
  -map 0:v:0 -map 1:a:0 "$OUTPUT"

# Mix original audio with new audio (e.g., background music)
ffmpeg -n -i video.mp4 -i music.mp3 -filter_complex \
  "[0:a]volume=1.0[orig];[1:a]volume=0.3[music];[orig][music]amix=inputs=2:duration=first" \
  -c:v copy "$OUTPUT"

音频效果

音量调整:

ffmpeg -n -i "$INPUT" -af "volume=1.5" -c:v copy "$OUTPUT"   # 1.5x louder
ffmpeg -n -i "$INPUT" -af "volume=-6dB" -c:v copy "$OUTPUT"   # 6dB quieter

均衡:

# Boost bass, cut muddy mids, add presence
ffmpeg -n -i "$INPUT" -af "equalizer=f=80:t=q:w=1:g=3,equalizer=f=300:t=q:w=2:g=-2,equalizer=f=4000:t=q:w=1:g=2" -c:v copy "$OUTPUT"

压缩(缩小动态范围):

ffmpeg -n -i "$INPUT" -af "acompressor=threshold=-20dB:ratio=4:attack=5:release=50" -c:v copy "$OUTPUT"

限制器(防止削波):

ffmpeg -n -i "$INPUT" -af "alimiter=limit=0.95:level=false" -c:v copy "$OUTPUT"

淡入/淡出:

ffmpeg -n -i "$INPUT" -af "afade=t=in:st=0:d=2,afade=t=out:st=OFFSET:d=2" -c:v copy "$OUTPUT"

增强低音:-af "bass=g=5:f=100:w=0.5" 增强高音:-af "treble=g=3:f=4000:w=0.5"

音频格式转换

编解码器FFmpeg 编码器推荐比特率用途
AACaac128-256k视频、流媒体
MP3libmp3lame192-320k通用播放
Opuslibopus96-160k效率最佳,WebM
FLACflac无损归档、编辑
WAVpcm_s16le未压缩编辑、处理
AC3ac3384-640k环绕声

声道布局

# Stereo to mono
ffmpeg -n -i "$INPUT" -ac 1 -c:v copy "$OUTPUT"

# Mono to stereo (duplicate)
ffmpeg -n -i "$INPUT" -ac 2 -c:v copy "$OUTPUT"

# Extract left channel only
ffmpeg -n -i "$INPUT" -af "pan=mono|c0=FL" -c:v copy "$OUTPUT"

修复音频同步

# Delay audio by 0.5 seconds
ffmpeg -n -i "$INPUT" -itsoffset 0.5 -i "$INPUT" -map 0:v -map 1:a -c copy "$OUTPUT"

# Advance audio by 0.5 seconds
ffmpeg -n -i "$INPUT" -itsoffset -0.5 -i "$INPUT" -map 0:v -map 1:a -c copy "$OUTPUT"

音频闪避(侧链压缩)

检测到语音时自动降低音乐音量。

基本闪避(人声轨道控制音乐轨道的闪避):

ffmpeg -n -i video_with_voice.mp4 -i music.mp3 -filter_complex \
  "[0:a]aformat=fltp:44100:stereo[voice];\
   [1:a]aformat=fltp:44100:stereo[music];\
   [music][voice]sidechaincompress=threshold=0.015:ratio=6:attack=200:release=1000:level_sc=1[ducked];\
   [voice][ducked]amix=inputs=2:duration=first:weights=1 0.4[out]" \
  -map 0:v -map "[out]" -c:v copy "$OUTPUT"

参数指南:

参数默认值用途
threshold0.015触发闪避的人声音量(数值越低,灵敏度越高)
ratio6音乐的降低幅度(数值越高,降低幅度越大)
attack200ms音乐音量降低的速度
release1000ms语音停止后音乐恢复的速度
weights1 0.4最终混音中的人声音量 : 音乐音量

对现有音频流进行闪避(视频中有语音,另有单独的音乐文件):

ffmpeg -n -i "$INPUT" -i music.mp3 -filter_complex \
  "[1:a][0:a]sidechaincompress=threshold=0.02:ratio=8:attack=100:release=800[ducked];\
   [0:a][ducked]amix=inputs=2:duration=first:weights=1 0.3[out]" \
  -map 0:v -map "[out]" -c:v copy "$OUTPUT"

提示:

  • 对较轻的语音,可调低 threshold(例如 0.01)
  • 要更强烈地闪避,可调高 ratio(例如 10-20)
  • 对口语播客,可缩短 attack(例如 50ms)
  • 要让音乐更平滑地恢复,可延长 release(例如 2000ms)
  • 调整 weights,控制人声与音乐的整体平衡

参考

加载 references/audio.md,查看更详细的 EBU R128 响度说明、高级滤镜链和特定格式的音频设置。

评论

支持 Markdown