음성을 텍스트로 변환하는 캡션

이 가이드에서는 음성 텍스트 변환을 사용하는 캡션을 만드는 방법을 알아봅니다. 캡션은 텔레비전 방송, 웹캐스트, 영화, 비디오, 라이브 이벤트 또는 기타 프로덕션의 오디오 콘텐츠를 텍스트로 변환한 다음, 화면, 모니터 또는 기타 시각적 표시 시스템에 텍스트를 표시하는 프로세스입니다.

개념에는 캡션을 입력 오디오와 동기화하고, 욕설 필터를 적용하고, 부분 결과를 얻고, 사용자 지정을 적용하고, 다국어 시나리오에 대해 음성 언어를 식별하는 방법이 포함됩니다. 이 가이드는 음성 캡션을 다루지만 스피커 ID 또는 벨 울림과 같은 음향 효과는 포함하지 않습니다.

다음은 몇 가지 일반적인 캡션 시나리오입니다.

  • 온라인 코스 및 교육용 동영상
  • 스포츠 이벤트
  • 음성 및 영상 통화

다음은 캡션을 사용할 때 고려해야 할 측면입니다.

  • 캡션은 자동화된 서비스에 의해 생성된다는 것을 청중에게 알리세요.
  • 크고 눈에 띄는 글꼴로 화면 중앙에 캡션을 수평으로 배치합니다.
  • 부분 결과를 사용할지 여부, 캡션 표시를 시작할 시기 및 한 번에 표시할 단어 수를 고려합니다.
  • SMPTE-TT와 같은 자막 프로토콜에 대해 알아봅니다.
  • SRT(SubRip 텍스트) 및 WebVTT(웹 동영상 텍스트 트랙)와 같은 출력 형식을 고려합니다. 이들은 VLC와 같은 대부분의 동영상 플레이어에 로드되어 자동으로 동영상에 캡션을 추가할 수 있습니다.

Speech Studio를 사용해 보고, 샘플 비디오 클립을 선택하여 실시간 또는 오프라인으로 처리된 캡션 결과를 확인합니다.

업로드한 동영상의 캡션을 얻는 방법에 대한 데모로 Azure AI Video Indexer를 사용해 보세요.

자막은 실시간 또는 사전 녹음된 연설과 함께 제공될 수 있습니다. 자막을 실시간으로 표시하든 녹음과 함께 표시하든 Speech SDK 또는 Speech CLI를 사용하여 음성을 인식하고 대화 기록을 가져올 수 있습니다. 사전 녹화된 동영상에 Batch Transcription API를 사용할 수도 있습니다.

캡션 출력 형식

Speech Service는 SRT(SubRip 텍스트) 및 WebVTT(웹 동영상 텍스트 트랙)와 같은 출력 형식을 지원합니다. 이들은 VLC와 같은 대부분의 동영상 플레이어에 로드되어 자동으로 동영상에 캡션을 추가할 수 있습니다.

Speech Service는 욕설 필터 옵션을 제공합니다. 욕설을 마스킹, 제거 또는 표시할지 여부를 지정할 수 있습니다.

SRT(SubRip 텍스트) 시간 범위 출력 형식은 hh:mm:ss,fff입니다.

1
00:00:00,180 --> 00:00:03,230
Welcome to applied Mathematics course 201.

WebVTT(웹 비디오 텍스트 트랙) 시간 범위 출력 형식은 hh:mm:ss.fff입니다.

WEBVTT

00:00:00.180 --> 00:00:03.230
Welcome to applied Mathematics course 201.
{
  "ResultId": "8e89437b4b9349088a933f8db4ccc263",
  "Duration": "00:00:03.0500000"
}

Speech Services에 오디오 입력

실시간 캡션의 경우 파일 입력 대신 마이크 또는 오디오 입력 스트림을 사용합니다. 마이크에서 음성을 인식하는 방법의 예는 음성 텍스트 변환 빠른 시작음성 인식 방법 설명서를 참조하세요. 스트리밍에 대한 자세한 내용은 오디오 입력 스트림 사용 방법을 참조하세요.

사전 녹음 캡션의 경우 파일 입력을 Speech Services로 보냅니다. 자세한 내용은 압축 입력 오디오 사용 방법을 참조하세요.

캡션 및 음성 동기화

실시간으로 또는 사전 녹음을 통해 수행하는지에 관계없이 캡션을 오디오 트랙과 동기화하려고 합니다.

Speech Service는 인식된 음성의 오프셋과 기간을 반환합니다.

  • 오프셋: 인식되는 오디오 스트림의 오프셋으로, 기간으로 표시됩니다. 오프셋은 0(0) 틱부터 시작하여 SDK에서 처리된 첫 번째 오디오 바이트와 연결된 틱으로 측정됩니다. 예를 들어, 오프셋은 인식을 시작할 때 시작됩니다. 이때 SDK가 오디오 스트림 처리를 시작하기 때문입니다. 틱 하나는 100나노초 또는 1/1000만 초를 나타냅니다.
  • 기간: 인식되는 발화의 기간입니다. 틱의 기간에는 후행 또는 선행 무음이 포함되지 않습니다.

자세한 내용은 음성 인식 결과 가져오기를 참조하세요.

부분적인 결과 가져오기

캡션 표시를 시작할 시기와 한 번에 표시할 단어 수를 고려합니다. 음성 인식 결과는 발화를 인식하는 동안 변경될 수 있습니다. 부분 결과는 각 Recognizing 이벤트와 함께 반환됩니다. 각 단어가 처리될 때 Speech Services는 새 컨텍스트에서 발화를 재평가하고 다시 최상의 결과를 반환합니다. 새 결과는 이전 결과와 동일하다고 보장되지 않습니다. 발화의 완전한 최종 대화 기록은 Recognized 이벤트와 함께 반환됩니다.

참고 항목

부분 결과의 구두점을 사용할 수 없습니다.

사전 녹음된 음성 캡션의 경우 또는 대기 시간이 문제가 되지 않는 경우 단어를 표시하기 전에 각 발화의 완전한 대화 기록을 기다릴 수 있습니다. 발화에서 각 단어의 최종 오프셋과 지속 시간이 주어지면 사운드트랙에 맞춰 후속 단어를 표시할 때를 알 수 있습니다.

실시간 캡션은 대기 시간과 정확도를 고려하여 절충합니다. 가능한 한 빨리 각 Recognizing 이벤트의 텍스트를 표시할 수 있습니다. 그러나 약간의 대기 시간을 허용할 수 있다면 Recognized 이벤트의 텍스트를 표시하여 캡션의 정확도를 개선시킬 수 있습니다. "안정된 부분 결과"라고 하는 중간 지점도 있습니다.

Speech 서비스가 더 정확한 더 적은 수의 Recognizing 이벤트를 반환하도록 요청할 수 있습니다. 이는 SpeechServiceResponse_StablePartialResultThreshold 속성을 02147483647 사이의 값으로 설정하여 수행됩니다. 설정한 값은 Speech Services가 Recognizing 이벤트를 반환하기 전에 단어를 인식해야 하는 횟수입니다. 예를 들어, SpeechServiceResponse_StablePartialResultThreshold 속성 값을 5로 설정하면 Speech Service는 Recognizing 이벤트로 부분 결과를 반환하기 전에 단어 인식을 5회 이상 확인합니다.

speechConfig.SetProperty(PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig->SetProperty(PropertyId::SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig.SetProperty(common.SpeechServiceResponseStablePartialResultThreshold, 5)
speechConfig.setProperty(PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig.setProperty(sdk.PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
[self.speechConfig setPropertyTo:5 byId:SPXSpeechServiceResponseStablePartialResultThreshold];
self.speechConfig!.setPropertyTo(5, by: SPXPropertyId.speechServiceResponseStablePartialResultThreshold)
speech_config.set_property(property_id = speechsdk.PropertyId.SpeechServiceResponse_StablePartialResultThreshold, value = 5)
spx recognize --file caption.this.mp4 --format any --property SpeechServiceResponse_StablePartialResultThreshold=5 --output vtt file - --output srt file -

더 안정적인 부분 결과를 요청하면 "깜박임" 또는 텍스트 변경이 줄어들지만 신뢰도가 더 높은 결과를 기다릴 때 대기 시간이 늘어날 수 있습니다.

안정적인 부분 임계값 예

안정적인 부분 임계값을 설정하지 않은 다음 인식 시퀀스에서 "math"는 단어로 인식되지만 최종 텍스트는 "mathematics"입니다. 또 다른 지점에서 "course 2"가 인식되지만 최종 텍스트는 "course 201"입니다.

RECOGNIZING: Text=welcome to
RECOGNIZING: Text=welcome to applied math
RECOGNIZING: Text=welcome to applied mathematics
RECOGNIZING: Text=welcome to applied mathematics course 2
RECOGNIZING: Text=welcome to applied mathematics course 201
RECOGNIZED: Text=Welcome to applied Mathematics course 201.

이전 예에서 전사는 추가적이었고 철회된 텍스트는 없었습니다. 그러나 부분적인 결과가 정확하지 않은 경우도 있습니다. 두 경우 모두 불안정한 부분 결과가 표시될 때 "깜박임"으로 인식될 수 있습니다.

이 예에서 안정적인 부분 결과 임계값이 5로 설정되면 단어가 변경되거나 역추적되지 않습니다.

RECOGNIZING: Text=welcome to
RECOGNIZING: Text=welcome to applied
RECOGNIZING: Text=welcome to applied mathematics
RECOGNIZED: Text=Welcome to applied Mathematics course 201.

언어 식별

오디오의 언어가 변경될 수 있는 경우 지속적인 언어 식별을 사용합니다. 언어 식별은 지원되는 언어 목록과 비교할 때 오디오에서 말하는 언어를 식별하는 데 사용됩니다. 최대 10개의 후보 언어를 제공하며 그중 하나 이상은 오디오에 포함될 것으로 예상됩니다. Speech Services는 오디오에서 가장 가능성이 높은 언어를 반환합니다.

정확도 개선을 위한 사용자 지정

구 목록은 음성 인식을 시작하기 직전에 제공하는 단어 또는 구의 목록입니다. 구 목록에 구를 추가하면 해당 중요도가 높아져서 인식 가능성이 높아집니다.

구의 예는 다음과 같습니다.

  • 이름
  • 지리적 위치
  • 동형이의어
  • 업계 또는 조직에 고유한 단어 또는 머리글자어

사용자 지정 모델 학습이 정확도를 개선시키는 가장 좋은 방법일 수 있는 상황이 있습니다. 예를 들어 치아 교정 강의에 캡션을 작성하는 경우 해당 도메인 데이터를 사용하여 사용자 지정 모델을 학습할 수 있습니다.

다음 단계