Tempo de execução de say
- Is there a way to calculate how long it will take to output any say command without actually executing it? How?
Não vejo como fazer isso usando os switches fornecidos pelo comando say .
- If not, how can I use grep to pull out the real line?
Para analisar a saída time , você pode fazer o seguinte:
$ ( time say -v Alex "Hello there. How long will this take?" ) |& grep real
real 0m2.987s
Alternativamente:
$ ( time say -v Alex "Hello there. How long will this take?" ) 2>&1 | grep real
real 0m2.987s
Acima, agrupamos o comando time ... em um subshell e, em seguida, redirecionamos o STDOUT & STDERROR ( |& ) para grep . O formulário 2>&1 faz o mesmo em situações em que |& não funciona para sua versão específica do Bash.
/ dev / null
Por acaso, se você usar o argumento -o <file> para say , poderá acelerar a conversão de texto para áudio. Aqui, como na verdade não queremos o arquivo de áudio, estamos direcionando para /dev/null :
$ ( time say -v Alex "Hello there. How long will this take?" -o /dev/null ) |& grep real
real 0m0.310s
Alternativamente:
$ ( time say -v Alex "Hello there. How long will this take?" -o /dev/null ) 2>&1 | grep real
real 0m0.283s
Observe o quanto é mais rápido quando não precisar utilizar os alto-falantes para fazer essa operação, esse é o atraso no uso da E / S de áudio. Ao direcionar para um arquivo, é muito mais eficiente.
Calculando a duração do áudio
Para determinar a duração do arquivo de áudio resultante de say , você pode fazer o seguinte:
$ say -v Alex "Hello there. How long will this take?" -o a.aiff && \
ffmpeg -i a.aiff 2>&1 | grep Duration && rm a.aiff
Duration: 00:00:02.85, start: 0.000000, bitrate: 364 kb/s
Aqui podemos ver que a duração do áudio resultante é de 2,85 segundos.
Melhorias adicionais?
Analisei a saída de say diretamente para ffmpeg , mas say aparentemente não pode fazer isso. Outros chegaram à mesma conclusão, conforme a Pergunta Q & A intitulada: Como canalizar a saída de 'say' para outro comando .