通过命令行创建一个无声的mp3文件

34

我正在尝试使用命令行创建一个(x)秒的无声/空白mp3文件。我认为这是一个相当简单的任务!

看起来LAME能够实现这样的功能,但我找不到任何可以实现这一点的东西。

有人能够做到类似这样的事情吗?


1
在理想的情况下,我可以直接使用ffmpeg来完成这个任务,而不需要使用其他库。 - Stephen
4个回答

72

您可以使用此命令。

ffmpeg -f lavfi -i anullsrc=r=44100:cl=mono -t <seconds> -q:a 9 -acodec libmp3lame out.mp3

<seconds>更改为表示所需静默时间的秒数(例如,60将创建一分钟)。


1
你知道怎样指定输出文件的比特率吗? - David Schumann
2
无需安装新软件,只需删除“-q:a 9”,然后添加“-b:a 192k”或您想要的任何比特率。 - David Schumann
非常好用。特别棒的是,可以在之前没有安装整个开发和部署工具(Xcode + Home-brew 和所有相关垃圾)的情况下安装 ffmpeg 命令行工具。 - Motti Shneor
由于某种原因,这导致了一个非常大的MP3文件。考虑到mp3的压缩方式,我本来期望10分钟的静音会很小,但实际上它有3.3MB大小。一分钟的大小是236K。 - jrochkind
ffmpeg -ar 48000 -t <duration> -f s16le -acodec pcm_s16le -ac 2 -i /dev/zero -acodec libmp3lame -aq 4 <filename> 对我来说速度明显更快。 - frumbert
显示剩余2条评论

11

免责声明: 这是一个针对Unix操作系统的方法 (虽然sox是跨平台的,并且在Windows上也可以完成任务)。

$ perl silence.pl 3 silence.wav

silence.pl非常简短,我在这里包含它,因为它是公共领域:

#!/usr/bin/perl

$seconds = $ARGV[0];
$file = $ARGV[1];
if ((!$seconds) || ($file eq "")) {
        die "Usage: silence seconds newfilename.wav\n";
}

open(OUT, ">/tmp/$$.dat");
print OUT "; SampleRate 8000\n";
$samples = $seconds * 8000;
for ($i = 0; ($i < $samples); $i++) {
        print OUT $i / 8000, "\t0\n";
}
close(OUT);

# Note: I threw away some arguments, which appear in the original
# script, and which did not worked (on OS X at least)
system("sox /tmp/$$.dat -c 2 -r 44100 -e signed-integer $file");
unlink("/tmp/$$.dat");

接着只需使用lame命令:

$ lame silence.wav silence.mp3

这是一个完美的解决方案。SoX看起来很有趣,但很可能不是我要找的。我成功地使用了http://sourceforge.net/projects/wavi-avi2wav/来获取静音。它有一个预先构建的silence.exe,更容易投入使用。 - Stephen
1
非常好,脚本甚至可以接受小数作为输入。根据我的需求,我需要一个非常短(几乎为空)的wav文件:silence.pl 0.1 silence.wav。 - Andre Miras
另一个答案更加简单明了。 - Jonas Sourlier

6

sox -n -r 44100 -c 2 silence.wav trim 0.0 3.0 - 这将创建一个持续3秒的立体声静音文件。

这里n表示空文件操作程序,r是采样率,c是通道数。

然后只需使用lame命令即可:

$ lame silence.wav silence.mp3


4
避免麻烦地创建Wav头文件,让Lame处理原始文件:
dd if=/dev/zero bs=1M count=? | lame -r - - > silence.mp3

设置 ?=2 可以生成一个11秒的文件(在标准44KhZ等参数下)。

注意:此方法已在Unix上测试通过;我知道Windows也有dd和lame。


3
将/dev/zero设备中的数据读取100个字节,使用lame工具将读取的数据转换成8kbps采样率、8位宽度、有符号、每秒8个比特的mp3文件,并命名为a.mp3。 - agsamek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接