目前,我们在 shell 脚本中使用此命令来消除音频文件中的静音:
ffmpeg -i $INFILE -af silenceremove=0:0:0:-1:1:${NOISE_TOLERANCE}dB -ac 1 $SILENCED_FILE -y
Run Code Online (Sandbox Code Playgroud)
这很好用,只是它消除了所有的静音,导致剩余的音频被挤压在一起。
在每段音频之间留出两到三秒的时间,如何做到这一点?
该解决方案需要非常高效,因为我们将处理大量音频,并且应该使用可以在 Linux 和 OSX 上轻松安装的工具,例如 ffmpeg 或 sox。
我正在编写一个脚本,使用 sox 来记录我的谈话。现在我需要 sox 在开始录音之前等待它检测到声音,我确实想通了。但是,一旦沉默至少 3 秒,我还需要袜子退出。就像现在一样,一旦我说完,我就必须手动杀死 sox,否则 sox 会再次等待,直到我再说话,附加到输出文件(这不是我想要的)。这是我现在使用的录制命令:
rec /tmp/recording.flac rate 32k silence 1 0.1 3% -1 3.0 3%
Run Code Online (Sandbox Code Playgroud)
再次声明,Sox 应该等到我开始说话,然后录音直到我停止说话,然后 sox 程序应该退出。
我已经这样做了:
me@riverbrain:~/sgf$ echo "test" | text2wave -otype raw -F 16000 >> test.raw
Run Code Online (Sandbox Code Playgroud)
这产生了一个无头的音频文件。这个文件的美妙之处在于它可以cat
与另一个原始音频文件连接(使用,如文本)。
当然,我有问题。问题是我还不能玩。
me@riverbrain:~/sgf$ play test.raw
play FAIL formats: bad input format for file `test.raw': sampling rate was not specified
Run Code Online (Sandbox Code Playgroud)
而且,在指定采样率时
me@riverbrain:~/sgf$ play -r 16000 test.raw
play FAIL formats: bad input format for file `test.raw': data encoding was not specified
Run Code Online (Sandbox Code Playgroud)
当我查找一些“编码”信息时,我觉得这与您的处理器架构有很大关系,但也许我错了。无论如何,我找不到任何关于如何“询问”计算机原始音频文件的数据编码是什么的文档。而且我也知道采样率是多少,因为我是自己设置的,但这是我所能得到的。
我喜欢 sox 能够在静音状态下拆分音频文件。我遇到的问题是,偶尔我的音轨以淡出结束,或者音符衰减为混响(袜子会误认为是静音的微妙声音)。我正在尝试调整 sox 命令以在静音时分割曲目,但在每次分割后都保持一点静音。我无法弄清楚如何做到这一点。这是我到目前为止的命令:
sox in.wav out.wav silence 1 2 0.5% 1 4.0 0.9% : newfile : restart
Run Code Online (Sandbox Code Playgroud)
对此的任何帮助将不胜感激!
我有一个test.wav
文件。我需要使用此文件来处理具有以下属性的应用程序
i) 单声道 ii) 16khz 采样率 iii) 16 位
现在,我使用以下命令来获得这些属性。
sox disturbence.wav -r 16000 disturbence_16000.wav
sox disturbence_16000.wav -c 1 disturbence_1600_mono.wav
sox disturbence_1600_mono.wav -s -b 16 disturbence_1600_mono_16bit.wav
Run Code Online (Sandbox Code Playgroud)
此处获取单个文件涉及 3 个步骤并创建 2 个临时文件。这是一个耗时的过程。
我想写一个脚本来完成这些过程,但我认为这是最后的选择。
在单个命令中,我可以将.wav
文件转换为所需的格式吗?
我有多个存储在大型 mp3 中的有声读物。我正在尝试将这些大型 mp3 拆分为多个较小的文件。
我找到了一种工具,可以检测音频文件中的静音并根据此“分隔符”拆分音频文件。
下面是一个例子:
sox -V3 audiobook.mp3 audiobook_part_.mp3 \
silence 1 0.5 0.1% 1 0.5 0.1% : newfile : restart
Run Code Online (Sandbox Code Playgroud)
这将基本上分裂audiobook.mp3
成audiobook_part_001.mp3
,audiobook_part_002.mp3
,...其中沉默> = 0.5秒。
现在的问题是,这个命令不仅会拆分文件,还会消除静音。
因此,当您在播放列表中播放新文件时,曲目/段落听起来会挤在一起。
那么你如何告诉sox
只拆分文件但保持静音(在每个轨道的末尾)?
你好,这是交易,我用过:
$ yum install sox
Run Code Online (Sandbox Code Playgroud)
在 CentOS 6 中安装它。之后我做了一个快速测试:
$ sox test.mp3 test.amr
Run Code Online (Sandbox Code Playgroud)
这就是它返回的内容:
$ sox formats: no handler for file extension `mp3'
Run Code Online (Sandbox Code Playgroud)
我需要用sox
not来完成这项工作,lame
因为我需要将它用于混合和其他lame
.
如何更慢或更快地播放声音?这对于仔细聆听一个音频段落或快速收听以找到具体段落很有用。
play sox 命令有什么可以做到这一点的吗?也欢迎其他简单的解决方案。
我有一堆音频文件,我想使用 Sox 为每个单独的文件创建频谱图。通常,对于单个文件,我这样做:
sox audiofile.flac -n spectrogram
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何将此方法扩展到多个文件。理想情况下,我希望我的输出.png
文件具有与其各自音频文件相关联的文件名;例如audiofile1.png
for audiofile1.flac
,audiofile2.png
foraudiofile2.flac
等等。
有人知道怎么做这个吗?
对于单个 .mp3,我可以使用将其转换为 wav
sox ./input/filename.mp3 ./output/filename.wav
Run Code Online (Sandbox Code Playgroud)
我试过:
#!/bin/bash
for i in $(ls *mp3)
do
sox -t wav $i waves/$(basename $i)
done
Run Code Online (Sandbox Code Playgroud)
但它抛出以下错误:
sox FAIL formats: can't open input file `filename.mp3': WAVE: RIFF header not found
Run Code Online (Sandbox Code Playgroud)
我将如何对输入文件夹中的所有 mp3 文件运行此 sox 转换并将生成的 wav 保存到输出文件夹?
PS:我不知道为什么它会显示包含在反引号 ( ` ) 和撇号之间的文件 '
`文件名.mp3'
我播放了所有的 mp3,它们完美地工作。
sox ×10
audio ×5
bash ×1
command ×1
command-line ×1
conversion ×1
ffmpeg ×1
mp3 ×1
scripting ×1
shell ×1
shell-script ×1