Как сохранить вывод Powershell в файл, когда я создаю синтетический голосовой звук с помощью преобразования текста в речь с помощью командной строки

пожалуйста, научите меня, как заставить Powershell автоматически сохранять вывод tts в файл TEXT, так как я получаю только длинную строку, подобную этой:

{ "audioContent": "//NExAAQ4oIMABhEuDRESizqE7uehfMY8A...........

Мне нужно обработать более 1400 файлов :( что делать? Также есть ли способ загрузить текст длиной более 5000 символов? Также возможно ли автоматически создавать SSML из HTML?

Я сделал все, как описано в этом документе


person Дмитрий Чалый    schedule 17.02.2020    source источник
comment
Как указано в документе, на который вы ссылаетесь, здесь.audioContent в текстовый файл.   -  person Theo    schedule 17.02.2020
comment
Вы предлагаете сделать это вручную 1400 раз?   -  person Дмитрий Чалый    schedule 17.02.2020
comment
Покажите свой код, пожалуйста.   -  person f6a4    schedule 17.02.2020
comment
Подробности смотрите по ссылке Документ в моем первом сообщении. Там то же самое и отформатировано хорошо. последний шаг (запрос PowerShell): $cred = gcloud auth application-default print-access-token $headers = @{ Authorization = Bearer $cred } Invoke-WebRequest ` -Method POST ` -Headers $headers ` -ContentType: application/json ; charset=utf-8 ` -InFile request.json ` -Uri texttospeech.googleapis.com/v1/ текст: синтезировать | Выбрать-Объект-Развернуть содержимое   -  person Дмитрий Чалый    schedule 17.02.2020
comment
Итак, объект, который вы получаете, имеет свойство с именем audioContent, которое содержит base64, который вам нужно сохранить в текстовый файл. В чем проблема?   -  person Theo    schedule 17.02.2020
comment
поскольку у меня есть более 1400 текстовых файлов для преобразования, я хотел бы написать скрипт для powershell с уже встроенными текстами 1400+ для преобразования. вывод, audioContent должен быть автоматически сохранен в текстовом файле. НЕ ВРУЧНУЮ. Проблема, Тео, в том, что я не знаю, как это сделать.   -  person Дмитрий Чалый    schedule 17.02.2020


Ответы (1)


Я все еще не совсем понимаю, что вы имеете в виду. Вы хотите сказать, что у вас есть много текстовых файлов, которые теперь имеют содержимое { "audioContent": "//NExAAQ4oIMABhEuDRESizqE7uehfMY8A..........., и вам нужно заменить это содержимое только частью между фигурными скобками?

Если это так, вы можете сделать

Get-ChildItem -Path 'ThePathToLookForTheFiles' -File | ForEach-Object {
    $_ | Set-Content -Value (($_ | Get-Content -Raw) -replace '^\{\s*"audioContent":\s*"([^}]+)\}', '$1')
}

Для любого нового текстового файла измените код с Invoke-WebRequest и сохранив свойство audioContent в текстовый файл:

$cred = gcloud auth application-default print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

$params = @{
    Method      = 'POST'
    Headers     = $headers
    ContentType = "application/json; charset=utf-8"
    InFile      = 'request.json'
    Uri         = "https://texttospeech.googleapis.com/v1/text:synthesize"
}

$content = Invoke-WebRequest @params | Select-Object -Expand Content
# save the textfile with just the base64 string:
Set-Content -Path 'TheFullPathAndFileName' -Value $content.audioContent

надеюсь, это поможет

person Theo    schedule 18.02.2020
comment
Спасибо за помощь! К сожалению, у меня возникла ошибка Invoke-WebRequest: Удаленный сервер вернул ошибку: (403) Запрещено. строка: 1 символ: 12 + $content = Invoke-WebRequest @params | Select-Object -Expand Content + ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest ], WebExc eption + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand - person Дмитрий Чалый; 19.02.2020
comment
@ДмитрийЧалый, тогда, боюсь, что-то не так с вашими учетными данными.. - person Theo; 19.02.2020