출력 기간을 계산하는 방법은 무엇입니까?

출력 기간을 계산하는 방법은 무엇입니까?

say내 목표는 이 명령을 사용할 때 텍스트를 오디오로 출력하는 데 걸리는 시간을 계산하는 것입니다 .

예를 들어 say실시간으로 말하려면 다음과 같이 하세요.

$ say -v Alex "Hello there"

그런 다음 실제 오디오 출력이 끝날 때까지 기다려야 하지만 결합하여 텍스트의 질문 say에 답할 수 있습니다.time

$ time say -v Alex "Hello there. How long will this take?"

real    0m2.993s
user    0m0.006s
sys     0m0.009s
  1. say실제로 명령을 실행하지 않고 명령을 출력하는 데 걸리는 시간을 계산하는 방법이 있습니까? 어떻게?
  2. 그렇지 않다면 어떻게 grep실제 실을 뽑아내는 데 사용할 수 있습니까?

나는 다음과 같은 것을 시도하고 있습니다 :

time say -v Alex "Hello there. How long will this take?" | grep "^real   .*$"

그러나 물론 아무것도 나오지 않았습니다.

출력이 에 전달되지 않거나 grep, grep이 여러 줄 출력에 대해 작동하지 않거나, 잘못된 패턴 일치를 사용하고 있습니까?

작동하지 않으면 grep어떻게 됩니까?

업데이트 #1

사실, 제가 정말로 찾고 있는 것은 결과 오디오 파일의 지속 시간이라고 생각합니다 say.

답변1

타이머 실행say

  1. say 명령을 실제로 실행하지 않고 출력하는 데 걸리는 시간을 계산할 수 있는 방법이 있나요? 어떻게?

say명령에서 제공하는 스위치를 사용하여 이 작업을 수행할 수 없다고 생각합니다 .

  1. 그렇지 않다면 어떻게 grep을 사용하여 실제 행을 가져올 수 있습니까?

time출력을 구문 분석하려면 다음을 수행할 수 있습니다.

$ ( time say -v Alex "Hello there. How long will this take?" ) |& grep real
real    0m2.987s

또는:

$ ( time say -v Alex "Hello there. How long will this take?" ) 2>&1 | grep real
real    0m2.987s

위에서는 time ...명령을 서브셸로 래핑한 다음 STDOUT 및 STDERROR( |&)를 로 리디렉션합니다 grep. 특정 버전의 Bash에서 작동하지 않는 경우 이 2>&1형식은 동일한 작업을 수행합니다.|&

/dev/비어 있음

그런데 -o <file>매개변수를 에 사용하면 say텍스트를 오디오로 번역하는 속도를 높일 수 있습니다. 실제로 오디오 파일이 필요하지 않으므로 /dev/null다음 사항을 지적하겠습니다.

$ ( time say -v Alex "Hello there. How long will this take?" -o /dev/null ) |& grep real
real    0m0.310s

또는:

$ ( time say -v Alex "Hello there. How long will this take?" -o /dev/null ) 2>&1 | grep real
real    0m0.283s

오디오 I/O를 사용할 때의 대기 시간과 같이 이 작업을 수행하기 위해 스피커를 사용할 필요가 없으면 훨씬 더 빠릅니다. 파일을 직접 가리키는 것이 더 효율적입니다.

오디오 지속 시간 계산

생성된 오디오 파일의 지속 시간을 확인하려면 say다음을 수행할 수 있습니다.

$ 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

여기서는 생성된 오디오의 지속 시간이 2.85초임을 알 수 있습니다.

추가 개선이 필요합니까?

say출력 을 직접 파이핑하는 방법을 살펴봤지만 그렇게 할 수 없는 것 같습니다 ffmpeg. say다른 사람들도 "Q&A에 물어보세요"라는 제목의 질문과 답변을 바탕으로 동일한 결론에 도달했습니다."say"의 출력을 다른 명령으로 파이프하는 방법.

인용하다

관련 정보