Какая правильная команда для преобразования mp3 файла в требуемую версию кодека (MPEG версии 2) и скорость передачи (48 кбит/с) для Amazon Alexa SSML?

Я пытаюсь преобразовать mp3 файл в формат, ожидаемый звуковым тегом на языке разметки Amazon Alexa SSML, как описано здесь: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/speech-synthesis-markup-language-ssml-reference

В документации рекомендуется использовать https://www.ffmpeg.org/ffmpeg.html

Я пробовал эту команду, но не могу найти нужный кодек для использования: ffmpeg -y -i input.mp3 -ar 44100 -ab 48k -codec:a mpeg2 -ac 1 output.mp3

Я знаю, что мне нужно преобразовать файл, потому что Alexa терпит неудачу со следующей ошибкой: The audio is not of a supported MPEG version

Ответы

Ответ 1

Немного смущает, и, откровенно говоря, немного странно, что это требует амазонка. mp3 файлы могут быть mpeg1 или mpeg2 или mpeg-2.5 (не стандартные, но широко поддерживаемые). Для этой цели основными отличиями версий являются битрейт и частота дискретизации. Amazon требует 48 кбит/с (что поддерживается во всех версиях mpeg). Затем mpeg-2 поддерживает только частоты дискретизации 22050 Гц, 24000 Гц и 16000 Гц. Таким образом, передискретизация на одну из этих частот вынуждает ffmpeg к уровню MPEG-2 3.

ffmpeg -y -i input.mp3 -ar 16000 -ab 48k -codec:a libmp3lame -ac 1 output.mp3

больше информации здесь и здесь:

http://www.mp3-tech.org/programmer/frame_header.html

https://en.wikipedia.org/wiki/MP3

Ответ 2

Вот что я должен был сделать, чтобы заставить его работать:

ffmpeg -i input.mp3 -b:a 48k -ar 16000 output.mp3

Здесь вывод, когда я воспроизвожу его с помощью mpg123:

$ mpg123 output.mp3 
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
        version 1.22.4; written and copyright by Michael Hipp and others
        free software (LGPL) without any warranty but with best wishes

Playing MPEG stream 1 of 1: output.mp3 ...

MPEG 2.0 layer III, VBR, 16000 Hz joint-stereo

[0:02] Decoding of output.mp3 finished.

Ответ 3

Мы предлагаем услугу, чтобы сделать это как часть наших инструментов Bespoken. Дополнительная информация здесь:
http://docs.bespoken.tools/en/latest/api/classes/bstencode.html

Например, вы можете позвонить:

var bst = require("bespoken-tools");
var encoder = new bst.BSTEncode({ bucket: "S3Bucket" });
encoder.encodeURLAndPublish("https://s3.amazonaws.com/alexa-files/my-raw-file.wav");

Это займет URL-адрес, переданный в encodeURLAndPublish, и автоматически закодирует его и загрузит на S3, поэтому он доступен Alexa.

Вы также можете вызвать encodeFileAndPublish, который будет кодировать локальный файл и загрузить его на S3.