Создать тихий mp3 из командной строки

Я пытаюсь создать тихий/пустой mp3-файл (x) секунд с помощью командной строки. Довольно простая задача, я думал!

Кажется, что LAME может сделать что-то подобное, но я не могу найти ничего, что привело бы к достижение этого.

Кто-нибудь смог сделать что-то подобное?


person Stephen    schedule 11.03.2011    source источник
comment
В идеальном мире я мог бы сделать это напрямую с помощью ffmpeg, и мне не нужно было бы использовать другую библиотеку.   -  person Stephen    schedule 11.03.2011


Ответы (4)


Отказ от ответственности: это подход, ориентированный на unix (хотя sox является кросс-платформенным и должен работать только в Windows).

  • Вам понадобится sox - "[кросс-платформенный] швейцарский армейский нож среди программ обработки звука".

  • Этот perl-скрипт-оболочка поможет вам создать любые секунды тишины: http://www.boutell.com/scripts/silence.html

    $ 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
person miku    schedule 11.03.2011
comment
Это идеальное решение. SoX выглядит интересно, но, скорее всего, это то, что я ищу. Мне удалось добиться тишины с помощью sourceforge.net/projects/wavi-avi2wav. Он имеет предварительно встроенный файл silent.exe, который будет проще использовать. - person Stephen; 11.03.2011
comment
Очень хорошо, скрипт может принимать даже десятичное значение в качестве входных данных. Для моего требования мне понадобился очень короткий (почти пустой) файл wav:silence.pl 0.1 тишина.wav - person Andre Miras; 22.11.2016
comment
Другой ответ гораздо проще. - person cheesus; 07.03.2021

Вы можете использовать эту команду.

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

Измените <seconds> на число, указывающее количество секунд тишины, которое вам требуется (например, 60 создаст минуту).

person nico_lab    schedule 23.05.2013
comment
Вы знаете, как указать битрейт выходного файла? - person David Schumann; 17.05.2018
comment
nvm, просто удалите -q:a 9 и добавьте -b:a 192k или любой другой битрейт, который вы хотите - person David Schumann; 17.05.2018
comment
Прекрасно работает. Особенно прекрасна возможность установить инструменты командной строки ffmpeg без предварительной установки всей массы инструментов разработки и развертывания (Xcode + Home-brew и всякое сопутствующее барахло). - person Motti Shneor; 10.01.2019
comment
@DavidSchumann, чтобы иметь постоянный битрейт (CBR), работает -b:a 64k (битрейт ›= 64000), но -b:a 32k не работает (он создает VBR). Я не понимаю, чего мне не хватает? - person Giorgio Robino; 09.11.2020
comment
По какой-то причине это приводит к очень большому MP3. С использованием сжатия mp3 я ожидаю, что 10 минут тишины будут довольно маленькими, но это 3,3 МБ. Одна минута 236к. - person jrochkind; 05.05.2021

Избегайте неприятностей с созданием заголовка wav и позвольте lame обрабатывать необработанный файл:

dd if=/dev/zero bs=1M count=? | lame -r - - > silence.mp3

установка ?=2 дает 11-секундный файл (@ стандартные параметры 44KhZ и т. д.).

Примечание: это было проверено на Unix; Я так понимаю для винды есть дд и ламе тоже.

person user495100    schedule 23.05.2013
comment
dd if=/dev/zero bs=1 count=100 | lame -s 8 -r --bitwidth 8 --signed -b 8 - a.mp3 - person agsamek; 09.10.2013

sox -n -r 44100 -c 2 silence.wav trim 0.0 3.0 - это создаст 3-секундный стереофонический файл тишины. Здесь n для обработчика нулевого файла, r — частота дискретизации, а c — количество каналов.

Тогда просто отстой:

$ lame silence.wav silence.mp3

person Anees Sadeek    schedule 09.04.2019