말하기 속도 계산 방법: 분당 단어 수(WPM) 구하기
말하기 속도는 말한 단어 수를 분 단위 발화 시간으로 나눈 값입니다. 음성 인식의 단어별 타임스탬프로 녹음 전체나 문장마다 두 값을 모두 잴 수 있습니다.

말하기 속도를 계산하려면 말한 단어 수를 분 단위 발화 시간으로 나누세요. 2분 30초 동안 390단어를 말했다면 390 ÷ 2.5 = 분당 156단어(WPM)입니다. 단어별 타임스탬프가 있으면 두 값을 모두 얻을 수 있습니다. 녹음을 전사하고, 단어 토큰을 세고, 첫 단어의 시작부터 마지막 단어의 끝까지 걸린 시간을 재면 됩니다. Sume STT 1.0은 항상 단어 타이밍을 반환합니다. 각 단어의 start와 end를 초 단위로 담은 words[] 배열입니다.
공식 자체는 단순한 산수입니다. 타이밍 필드는 Sume API 레퍼런스의 바탕이 되는 OpenAPI 문서에서 가져왔으며, API 레퍼런스 문서 페이지는 정확한 요청·응답 형태의 기준으로 이 문서를 안내합니다. 2026-09-27에 확인했습니다.
어떤 시간으로 나눠야 하나요?
쉼을 포함하느냐에 따라 달라집니다. 정의를 하나 고르고, 어떤 정의를 썼는지 밝히고, 비교하는 모든 녹음에 같은 정의를 적용하세요.
| 속도 | 단어 수를 나눌 시간 | 쉼 |
|---|---|---|
| 전체 속도 | 파일 전체 길이 | 포함. 첫 단어 앞과 마지막 단어 뒤의 무음까지 포함 |
| 발화 속도 | 첫 단어의 start부터 마지막 단어의 end까지 | 단어 사이의 쉼 포함 |
| 조음 속도 | 발화 구간에서 직접 정한 기준보다 긴 쉼을 뺀 시간 | 긴 쉼 제외 |
| 문장 속도 | 한 문장의 첫 단어 start부터 마지막 단어 end까지 | 그 문장 안의 쉼만 포함 |
녹음의 단어별 타임스탬프는 어떻게 얻나요?
단어 타이밍을 반환하는 음성 인식 API로 전사하세요. Sume STT 1.0은 POST /v1/stt-1.0/transcribe에서 녹음의 공개 HTTPS URL을 받고, 따로 켤 플래그 없이 항상 단어 타이밍을 반환합니다. 요청 방법은 단어별 타임스탬프를 주는 음성 인식 API에 나와 있습니다. 필요한 결과 필드는 다음과 같습니다.
words[]: 각 토큰의word,start,end입니다. 시간은 오디오 시작부터의 초 단위이며,start순으로 정렬됩니다.words[].type: 제공되는 경우 토큰의 종류로, 예를 들어word나spacing입니다.word토큰만 세세요.segments[]:text,start,end,duration_seconds가 담긴 문장들로,segmentation: { "mode": "sentence" }를 보내면 반환됩니다.- 요청 하나는 최대 10분 분량의 오디오(
duration_seconds1–600)를 처리하며, API 요금에 나온 오디오 분당 $0.01에 기본 5.5% 에이전트 수수료가 더해져 과금됩니다. 더 긴 녹음은 긴 오디오 파일 전사하기를 참고하세요.
타임스탬프로 분당 단어 수는 어떻게 계산하나요?
단어 토큰만 남긴 뒤 나누세요. 아래 예시 코드는 발화 속도와, 일 초보다 긴 쉼을 뺀 조음 속도를 계산합니다. 일 초라는 기준은 표준이 아니라 선택이므로, 속도를 보고할 때는 어떤 기준을 썼는지 밝히세요.
숫자, 축약형, 군말(filler)을 어떻게 셀지 정하고, 매번 같은 방식으로 세세요. 단어 사이를 띄어 쓰지 않는 언어에서는 대신 글자 수나 음절 수를 세세요.
// result = data.result from GET /v1/jobs/{id}/result
const words = result.words.filter((w) => (w.type ?? "word") === "word");
const first = words[0];
const last = words[words.length - 1];
const spanMinutes = (last.end - first.start) / 60;
const speakingWpm = words.length / spanMinutes;
// Articulation rate: leave out gaps longer than 1 second between words
let pauseSeconds = 0;
for (let i = 1; i < words.length; i++) {
const gap = words[i].start - words[i - 1].end;
if (gap > 1) pauseSeconds += gap;
}
const articulationWpm = words.length / (spanMinutes - pauseSeconds / 60);문장마다 속도는 어떻게 구하나요?
문장 구간을 요청하고, 구간마다 그 안에 있는 단어를 세세요. 각 구간의 end가 다음 구간의 start와 같아 구간 사이에 빈틈이 없으므로, 구간의 duration_seconds에는 문장 사이의 무음이 들어갈 수 있습니다. 문장 자체의 속도를 재려면 그 문장의 첫 단어 start부터 마지막 단어 end까지의 시간을 쓰세요.
const sentenceRates = result.segments.map((s) => {
const inside = words.filter((w) => w.start >= s.start && w.start < s.end);
if (inside.length < 2) return { text: s.text, wpm: null };
const minutes = (inside[inside.length - 1].end - inside[0].start) / 60;
return { text: s.text, wpm: inside.length / minutes };
});전사문 없이도 말하기 속도를 구할 수 있나요?
네, 대본을 쓰인 그대로 읽은 녹음이라면 가능합니다. 대본의 단어 수를 세고, 녹음에서 첫 단어부터 마지막 단어까지의 시간을 잰 뒤 나누세요. 화자가 애드리브를 하거나 줄을 건너뛰면 단어 수가 어긋나는데, 이때 전사문의 단어 타이밍이 도움이 됩니다.
반대로 녹음하기 전에 대본이 얼마나 길게 나올지 가늠하려면 60초에 들어가는 단어 수를 참고하세요.
출처
관련 글
미디어 도구 카테고리의 다른 글
- 영상 색보정 방법: 색 틀어짐과 색온도 바로잡기
Sume에서 FFmpeg 필터로 영상을 색보정합니다. colorbalance는 노란색이나 초록색으로 틀어진 색을 없애고, colortemperature는 색온도를, eq는 채도를 설정합니다.
- HEVC(H.265) 영상을 H.264로 변환하는 방법
HEVC(H.265)를 H.264로 바꾸려면 영상 스트림을 재인코딩하세요. Sume에서는 HDR이 아닌 클립 전체를 exact로 트림하면 H.264 MP4가 나옵니다.
- 화질 손실 없이 영상을 크롭하는 방법
일반적인 크롭은 프레임을 재인코딩하므로 손실을 최소로 줄여야 합니다. 원본에서 한 번만 크롭하고 다시 확대하지 마세요. Sume의 편집별 인코딩 방식도 다룹니다.
- Demand Gen 영상 규격: 크기, 길이, 4:5 버전
Demand Gen은 YouTube에 업로드한 5초 이상의 1:1, 16:9, 4:5 영상과 선택 사항인 9:16 영상을 받습니다. 4:5를 포함해 각 버전을 Sume로 만드는 방법입니다.
작성자 Sume