You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中捕获seewave调用sox输出的音频文件时长?

解决seewave调用sox无法捕获音频时长的问题

问题原因

seewave::sox()函数执行时,仅调用外部sox程序将时长打印到控制台,函数本身返回的是sox命令的退出状态码(0表示执行成功),而非音频时长。常规的sink()、capture.output()只能捕获R函数的返回值或R内部输出,无法捕获外部程序直接输出到控制台的内容。

解决方案:直接用base R的system2()捕获输出

绕过seewave的封装函数,直接调用system2()执行sox命令,通过stdout = TRUE参数捕获外部程序的输出:

# 替换为你的FLAC文件路径
flac <- "your/file/path.flac"
# 指定sox.exe的完整路径(注意要包含sox.exe,不是仅文件夹)
sox_exe <- "C:/Program Files (x86)/sox-14-4-2/sox.exe"

# 执行sox命令并捕获输出
duration_str <- system2(sox_exe, args = c("--i", "-D", flac), stdout = TRUE)
# 转换为数值类型
duration_sec <- as.numeric(duration_str)

# 查看结果
duration_sec

补充说明

  • 确保sox路径指向sox.exe可执行文件,而非仅安装文件夹,否则会报错找不到命令。
  • system2()的args参数需要将命令拆分为参数列表,避免字符串拼接可能带来的路径空格问题。

内容的提问来源于stack exchange,提问作者jmwiniarski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:19:52