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 .