【问题标题】:how to trim audio file with specific time from text file by using SoX in Mac terminal?如何在 Mac 终端中使用 SoX 从文本文件中修剪特定时间的音频文件?
【发布时间】:2018-01-04 17:24:52
【问题描述】:

我有一个像这样的文本文件 text file ,并且我想使用 sox 来根据文本文件中的时间修剪音频文件,这样我就可以拥有从 0.0 到 6.16、6.16 到 13.44、13.44 到 17.54 等不同的音频片段。

我了解 sox trim 的基本脚本是 *$ sox audio.wav newaudio.wav trim starttime duration*
但是如何从文本文件中获取持续时间并使用 sox 修剪音频?

【问题讨论】:

  • 请不要将代码或格式化数据添加到 cmets - 这是无法理解的。相反,请单击您的问题下方的edit 并更新它,使其准确反映您的问题。选择代码并使用{} 按钮对其进行格式化。谢谢。
  • 对不起,马克。这是我第一次在这里发帖。下次我会小心的..我现在正在改变它..
  • 没问题,不客气。祝您项目顺利,记住问题和答案是免费的 - 如果遇到困难,请回来询问更多信息。
  • 非常感谢马克!如果你有机会参观纽卡斯尔,请告诉我,我欠你一品脱!

标签: macos terminal sox


【解决方案1】:

更新答案

我认为下面的代码可能更接近:

#!/bin/bash
index=0
while read this; do
   if [ $index -gt 0 ]; then
      d=$(bc <<< "$this - $start")
      echo sox audio.wav new-$index.wav trim \"$start\" \"$d\"
   fi
   ((index+=1))
   start=$this
done < times.txt

我不使用 sox,但这是该方法的要点 - 它假设您的时间在一个名为 times.txt 的文件中:

#!/bin/bash
index=0
while read this; do
   if [ $index -gt 0 ]; then
      echo sox audio.wav new-$index.wav trim $start $this
   fi
   ((index+=1))
   start=$this
done < times.txt

样本输出

sox audio.wav new-1.wav trim 0.0 6.16
sox audio.wav new-2.wav trim 6.16 13.44
sox audio.wav new-3.wav trim 13.44 17.54
sox audio.wav new-4.wav trim 17.54 23.3
sox audio.wav new-5.wav trim 23.3 26.5

因此,您可以将所有代码保存在名为 $HOME/trimmer 的文件中,然后启动 Terminal 并运行以下命令以使脚本可执行 - 只需一次即可:

chmod +x $HOME/trimmer

然后将目录更改为您的音频文件所在的位置,例如:

cd path/to/audio/files

然后运行脚本:

$HOME/trimmer

如果您喜欢它的外观,请从脚本中删除单词echo 并再次运行它。如果您不熟悉脚本,请先备份。

【讨论】:

  • 非常感谢马克!但我希望我的示例输出看起来像这样,{sox audio.wav new-1.wav trim "0.0" "6.16" sox audio.wav new-2.wav trim "6.16" "7.28 (13.44 minus 6.16)" sox audio.wav new-3.wav trim "13.44" "4.1" sox audio.wav new4.wav trim "17.54" "5.76"}。所以第二次在 sox trim 中实际上是你想要的剪辑的持续时间,而不是第二次。我刚刚将 {$this} 更改为 {$this - $start}。
  • 哦,好吧,英国时间晚了,所以我明天有空去看看。
猜你喜欢
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多