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
say
실제로 명령을 실행하지 않고 명령을 출력하는 데 걸리는 시간을 계산하는 방법이 있습니까? 어떻게?- 그렇지 않다면 어떻게
grep
실제 실을 뽑아내는 데 사용할 수 있습니까?
나는 다음과 같은 것을 시도하고 있습니다 :
time say -v Alex "Hello there. How long will this take?" | grep "^real .*$"
그러나 물론 아무것도 나오지 않았습니다.
출력이 에 전달되지 않거나 grep
, grep
이 여러 줄 출력에 대해 작동하지 않거나, 잘못된 패턴 일치를 사용하고 있습니까?
작동하지 않으면 grep
어떻게 됩니까?
업데이트 #1
사실, 제가 정말로 찾고 있는 것은 결과 오디오 파일의 지속 시간이라고 생각합니다 say
.
답변1
타이머 실행say
- say 명령을 실제로 실행하지 않고 출력하는 데 걸리는 시간을 계산할 수 있는 방법이 있나요? 어떻게?
say
명령에서 제공하는 스위치를 사용하여 이 작업을 수행할 수 없다고 생각합니다 .
- 그렇지 않다면 어떻게 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"의 출력을 다른 명령으로 파이프하는 방법.