关于 claude-video-audio
claude-video-audio 是面向音视频处理工作流的音频处理技能,提供基于 FFmpeg 等命令行工具的操作示例。涵盖响度、降噪、静音、格式与混音等常见任务。
主要功能
- 01EBU R128 两遍响度归一化
- 02FFT 与非局部均值降噪
- 03静音检测与移除
- 04音频提取、替换与混音
- 05音效、声道及格式转换
- 06语音触发的音乐闪避
适用场景
- 01将音频调整到平台响度目标
- 02清理录音中的背景噪声
- 03从视频提取或替换音轨
- 04为旁白自动降低背景音乐音量
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ agricidaniel/ claude-video --skill claude-video-audio安装后在 Claude Code 中输入/claude-video-audio确认已加载。
详细介绍
claude-video-audio — 音频处理
预检
- 运行
bash scripts/preflight.sh "$INPUT" "$OUTPUT" - 分析音频流:
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 dBTP | YouTube 只会降低响度,不会提高 |
| Spotify | -14 LUFS | -1.0 dBTP | “Loud”模式 = -11 LUFS |
| Apple Music | -16 LUFS | -1.0 dBTP | Sound 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 编码器 | 推荐比特率 | 用途 |
|---|---|---|---|
| AAC | aac | 128-256k | 视频、流媒体 |
| MP3 | libmp3lame | 192-320k | 通用播放 |
| Opus | libopus | 96-160k | 效率最佳,WebM |
| FLAC | flac | 无损 | 归档、编辑 |
| WAV | pcm_s16le | 未压缩 | 编辑、处理 |
| AC3 | ac3 | 384-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"
参数指南:
| 参数 | 默认值 | 用途 |
|---|---|---|
| threshold | 0.015 | 触发闪避的人声音量(数值越低,灵敏度越高) |
| ratio | 6 | 音乐的降低幅度(数值越高,降低幅度越大) |
| attack | 200ms | 音乐音量降低的速度 |
| release | 1000ms | 语音停止后音乐恢复的速度 |
| weights | 1 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