如何用单条SoX命令裁剪拼接音频并避免生成中间文件?
正确的SoX命令实现方案
要完成你需要的操作——截取input1.aif前0.5秒、拼接完整的input2.aif、末尾添加1秒静音,单条SoX命令就能实现,无需生成中间文件,推荐两种写法:
# 通用写法,兼容多数Shell环境 sox --combine concatenate "|sox input1.aif -p trim 0 0.5" input2.aif output.aif pad 0 1
# Bash/Zsh专属写法,语法更直观 sox <(sox input1.aif -p trim 0 0.5) input2.aif output.aif pad 0 1
命令说明
sox input1.aif -p trim 0 0.5:单独处理input1.aif,截取前0.5秒,结果通过管道(-p表示管道输入/输出)直接传递给主命令,不生成临时文件--combine concatenate:指定SoX将处理后的input1片段与完整的input2按顺序拼接(用进程替换的写法可省略该参数,SoX默认对多输入文件执行拼接)pad 0 1:给最终拼接好的音频末尾添加1秒静音(参数格式为pad <前置静音时长> <后置静音时长>,这里不需要前置静音,所以填0)
你之前尝试的命令问题分析
- 直接在多输入后加
trim 0 0.5:这个trim会作用于所有输入拼接后的完整音频,导致只保留前0.5秒,input2被完全截断 - 使用
:分隔效果::用于给单个输入文件叠加多个效果,但你未明确指定效果对应的输入对象,导致效果作用范围混乱,要么没正确处理input1,要么误截断了input2 sox input1.aif trim 0 0.5 : input2.aif output.aif pad 0 1:语法错误,链语法中输出文件必须放在最后,且:不能用于分隔独立的输入文件
内容的提问来源于stack exchange,提问作者Dan Weaver
相关产品推荐
相关产品推荐

