Google Speech API «Частота выборки в запросе не соответствует заголовку FLAC»

Я пытаюсь преобразовать видеоклип в формате mp4 в аудиофайл FLAC, а затем из речи Google выложить слова из видео, чтобы я мог определить, были ли произнесены конкретные слова.

У меня все работает, кроме того, что я получаю сообщение об ошибке из Speech API:

{
"error": {
"code": 400,
"message": "Sample rate in request does not match FLAC header.",
"status": "INVALID_ARGUMENT"}
}

Я использую FFMPEG для того, чтобы преобразовать mp4 в файл FLAC. Я указываю, что файл FLAC должен содержать 16 бит в команде, но когда я щелкаю правой кнопкой мыши по файлу FLAC, Windows сообщает мне, что это 302 кбит / с.

Вот мой PHP-код:

// convert mp4 video to 16 bit flac audio file
$cmd = 'C:/wamp/www/ffmpeg/bin/ffmpeg.exe -i C:/wamp/www/test.mp4 -c:a flac -sample_fmt s16 C:/wamp/www/test.flac';
exec($cmd, $output);

// convert flac to text so we can detect if certain words were said
$data = array(
"config" => array(
"encoding" => "FLAC",
"sampleRate" => 16000,
"languageCode" => "en-US"),
"audio" => array(
"content" => base64_encode(file_get_contents("test.flac")),
)
);

$json_data = json_encode($data);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://speech.googleapis.com/v1beta1/speech:syncrecognize?key=MY_API_KEY');
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$result = curl_exec($ch);

1

Решение

Исправил это, будучи очень конкретным в моей команде FFMPEG:

$cmd = 'C:/wamp/www/ffmpeg/bin/ffmpeg.exe -i C:/wamp/www/test.mp4 -acodec flac -bits_per_raw_sample 16 -ar 44100 -ac 1 C:/wamp/www/test.flac';
6

Другие решения

Ответ kjdion84 сработал хорошо, и я играл немного больше, чтобы выяснить причину.

Согласно этот ответь, все кодировки поддержка только 1 канал (моно) аудио

Я создавал файл FLAC с этой командой:

ffmpeg -i test.mp3 test.flac

Частота дискретизации в запросе не соответствует заголовку FLAC

Но добавив -ac 1 (установка количества аудиоканалов на 1) исправила эту проблему.

ffmpeg -i test.mp3 -ac 1 test.flac

Вот мой полный Node.js код

const Speech = require('@google-cloud/speech');
const projectId = 'EnterProjectIdGeneratedByGoogle';

const speechClient = Speech({
projectId: projectId
});

// The name of the audio file to transcribe
var fileName = '/home/user/Documents/test/test.flac';// The audio file's encoding and sample rate
const options = {
encoding: 'FLAC',
sampleRate: 44100
};

// Detects speech in the audio file
speechClient.recognize(fileName, options)
.then((results) => {
const transcription = results[0];
console.log(`Transcription: ${transcription}`);
}, function(err) {
console.log(err);
});

Частота дискретизации может составлять 16000 или 44100 или другие допустимые значения, а кодировка может быть FLAC или LINEAR16. Cloud Speech Docs

1

По вопросам рекламы [email protected]