Speech-to-Text용 오디오 파일 최적화


이 가이드에서는 Speech-to-Text에 사용하기 위해 준비하는 오디오 파일에 대한 실행 전 검사를 수행하는 방법을 보여줍니다. 오디오 파일 형식에 대한 배경 정보를 제공하고, Speech-to-Text에 사용할 오디오 파일을 최적화하는 방법과 오류 진단 방법을 설명합니다. 이 가이드는 기술 지식이 없는 미디어 및 엔터테인먼트 전문가와 후반 작업 전문가를 대상으로 합니다. Google Cloud에 대한 깊이 있는 지식은 필요하지 않으며, 로컬과 Cloud Storage 버킷에 저장된 파일에 gcloud 명령줄 도구를 사용하는 방법에 대한 기본 지식만 있으면 됩니다.

목표

  • FFMPEG 도구를 설치합니다.
  • 샘플 미디어 파일을 다운로드합니다.
  • FFMPEG를 사용하여 오디오 및 동영상 파일을 재생합니다.
  • FFMPEG를 사용하여 오디오 파일 속성을 추출, 트랜스코딩, 변환합니다.
  • 대화가 포함된 다양한 샘플 파일에서 Speech-to-Text를 실행합니다.

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

가격 계산기를 사용하여 예상 사용량을 기준으로 예상 비용을 산출할 수 있습니다.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init

이 튜토리얼에서는 Cloud Shell을 사용하여 Cloud Storage 버킷에서 Cloud Shell 세션으로 데이터를 복사하는 등의 절차를 수행합니다. Cloud Shell은 Google Cloud CLI가 이미 설치된 셸 환경입니다. 이 튜토리얼의 여러 단계에서 gcloud CLI를 사용합니다. 또한 뒷부분의 로컬 터미널에서 튜토리얼 예시 실행 섹션에 설명된 대로 로컬 머신에 소프트웨어와 샘플 오디오 파일을 설치하고 터미널에서 이와 동일한 연습을 실행합니다.

개요

이 가이드에서는 오디오와 동영상을 레코딩, 변환, 스트리밍하기 위한 오픈소스 도구인 FFMPEG를 사용합니다. 이 도구에 대한 자세한 정보는 이 가이드 뒷부분에 나와 있습니다.

사운드 파일 속성 이해

이 섹션에서는 미디어 제작 및 후반 작업 워크플로에서 볼 수 있는 일반적인 오디오 파일 형식, 샘플링 레이트, 비트 깊이, 레코딩 미디어를 설명합니다.

Speech-to-Text에서 최상의 결과를 얻으려면 텍스트 변환에 사용되는 파일이 나중에 설명되는 특정 최소 사양을 충족하는 모노럴(모노) 파일이어야 합니다. 파일이 사양을 충족하지 않는 경우 수정된 파일을 생성해야 할 수 있습니다. 예를 들어 다음을 수행해야 할 수 있습니다.

  • 동영상 파일에서 오디오 데이터를 추출합니다.
  • 멀티 트랙 오디오 파일에서 단일 모노럴 트랙을 추출합니다.
  • Speech-to-Text에 더 적합한 다른 오디오 코덱으로 트랜스코딩합니다.

샘플링 레이트(주파수 범위)

샘플링 레이트는 오디오 파일의 주파수 범위를 결정합니다. 오디오 파일을 구성하는 초당 샘플 수가 기준이 됩니다. 일반적으로 디지털 오디오 파일의 재생 가능한 최고 주파수는 샘플링 레이트의 절반과 같습니다. 예를 들어 44.1kHz 오디오 파일에서 재생할 수 있는 가장 높은 주파수는 약 22kHz로, 일반적인 청취자의 가청 주파수 응답 범위의 최상단에 있거나 이를 넘습니다.

전화 및 전기 통신의 샘플링 레이트는 일반적으로 8kHz~16kHz 범위입니다. 이 가이드에서는 일반적으로 16kHz보다 높은 미디어 및 엔터테인먼트 산업과 관련된 형식을 주로 다룹니다. 전화 및 기타 사운드 애플리케이션에 대한 자세한 내용은 고급 모델로 전화 오디오 텍스트 변환을 참조하세요.

Speech-to-Text를 통한 텍스트 변환에 사용하는 오디오 파일의 샘플링 레이트는 16kHz 이상이 좋습니다. 오디오 파일에서 볼 수 있는 샘플링 레이트는 일반적으로 16kHz, 32kHz, 44.1kHz, 48kHz입니다. 특히 높은 주파수에서는 명료도가 주파수 범위에 크게 영향을 받기 때문에 16kHz 미만의 샘플링 레이트에서는 8kHz 이상에 정보가 거의 없거나 전혀 없는 오디오 파일이 생성됩니다. 이 경우 Speech-to-Text가 음성 오디오를 텍스트로 올바로 변환하지 못할 수 있습니다. 음성 명료도에는 2kHz~4kHz 범위 전체의 정보가 필요하지만 이보다 높은 범위의 주파수의 배음(배수)도 음성 명료도를 보존하는 데 중요합니다. 따라서 샘플링 레이트를 최소한 16kHz로 유지하는 것이 좋습니다.

샘플링 레이트를 변환할 수도 있습니다. 하지만 오디오 업샘플링은 장점이 없는데, 주파수 범위 정보가 낮은 샘플링 레이트에 의해 제한되고 더 높은 샘플링 레이트로 변환해도 복구할 수 없기 때문입니다. 즉, 8kHz에서 44.1kHz로 업샘플링하면 재생 가능 주파수 범위는 낮은 샘플링 레이트의 절반인 약 4kHz로 제한됩니다. 이 가이드에서는 직접 차이를 듣고 알 수 있도록 다양한 샘플링 레이트와 비트 깊이로 녹음된 오디오 파일을 듣습니다.

비트 깊이(다이내믹 레인지)

오디오 파일의 비트 깊이는 가장 조용한 소리부터 가장 큰 소리까지의 범위와 파일의 신호 대 잡음비를 결정합니다. 다이내믹 레인지가 텍스트 변환 품질에 주는 영향은 주파수 응답보다는 적지만 8비트 이하의 비트 깊이는 오디오 트랙에 과도한 양자화 잡음을 유발하므로 정확한 텍스트 변환이 어려워집니다. (양자화 오차는 아날로그 입력 신호와 해당 신호의 디지털 출력 값 매핑 간의 반올림 오차입니다. 이 오차로 인해 사운드의 충실도에 직접 영향을 미치는 가청 왜곡이 발생합니다.) Speech-to-Text를 사용한 분석을 위해 권장되는 파일의 비트 깊이는 16비트 이상입니다. 샘플링 주파수와 마찬가지로 비트 깊이를 8비트에서 16비트로 상향 변환하는 것은 장점이 없습니다. 다이내믹 레인지 정보가 원래의 8비트 형식으로 제한되기 때문입니다.

레코딩 매체

원본 레코딩 매체도 오디오 파일의 품질에 영향을 줄 수 있습니다. 예를 들어 원래 자기 테이프에 녹음된 오디오 콘텐츠는 배경 히스(hiss)가 파일에 삽입될 수 있습니다. 경우에 따라 Speech-to-Text 사용 시 텍스트 변환 프로세스에서 더 나은 결과를 얻으려면 잡음이 있는 오디오를 사전 처리해야 할 수 있습니다. 잡음이 있는 녹음 및 배경 소음 간섭 처리는 이 가이드에서 다루지 않습니다. 자세한 내용은 Speech-to-Text 문서의 권장사항을 참조하세요.

FFMPEG 소개

이 가이드에서는 오디오 파일 작업에 FFMPEG를 사용합니다. FFMPEG 도구 세트는 다음을 포함한 다양한 기능을 제공합니다.

  • 오디오 또는 동영상 파일 재생
  • Speech-to-Text가 인식하는 코덱 중 하나로 오디오 파일 변환
  • Speech-to-Text에 의한 분석을 위해 오디오 파일 샘플링 레이트와 비트 전송률을 최적의 구성으로 변환
  • 전송 스트림 파일 또는 동영상 파일에서 개별 오디오 트랙 또는 스트림 추출
  • 스테레오 파일을 2개의 모노럴 파일로 분할
  • 5.1 오디오 파일을 6개의 모노럴 파일로 분할
  • 이퀄라이제이션 및 필터링을 적용하여 오디오 선명도 향상

FFMPEG의 ffprobe 함수를 사용하여 미디어 파일에 연결된 메타데이터를 표시할 수도 있습니다. 이는 머신러닝 분석을 위해 파일 유형 및 형식과 관련된 문제를 진단하려는 경우에 중요합니다.

Speech-to-Text에서 인식하는 코덱

Speech-to-Text는 여러 오디오 파일 형식을 인식하지만 특정 코덱을 제대로 읽거나 분석하지 못할 수 있습니다. 이 가이드는 콘텐츠가 지원되는 파일 형식 중 하나인지 확인하는 방법을 보여줍니다.

이 가이드에서는 Speech-to-Text를 사용하기 전에 발생할 수 있는 문제를 확인하고 해결하기 위해 메타데이터 정보를 읽습니다. 비호환성을 발견하는 경우 동일한 도구를 사용하여 지원되는 형식으로 파일을 변환할 수 있습니다.

Speech-to-Text가 인식하는 코덱은 다음과 같습니다.

  • FLAC: 무료 무손실 오디오 코덱
  • LINEAR16: WAV, AIFF, AU, RAW 컨테이너에 사용되는 비압축 펄스 코드 변조(PCM) 형식
  • MULAW: 미국과 일본의 통신을 위해 설계된 PCM 코덱
  • AMR: 음성을 위해 설계된 적응형 다중 속도 코덱
  • AMR_WB: AMR 대역폭의 두 배인 AMR의 광대역 변형
  • OGG_OPUS: 지연 시간이 짧은 애플리케이션을 위해 설계된 손실 코덱
  • SPEEX_WITH_HEADER_BYTE: Voice over IP(VOIP) 애플리케이션용으로 설계된 코덱

코덱과 파일 형식은 다르다는 것을 이해해야 합니다. 파일 이름 확장자가 파일 생성에 사용된 코덱을 Speech-to-Text가 읽을 수 있음을 꼭 나타내는 것은 아닙니다.

이 가이드에서는 미디어 워크플로 환경에서 자주 볼 수 있는 FLAC 및 LINEAR16 코덱을 주로 다룹니다. 둘 다 무손실 형식입니다.

Speech-to-Text에 사용하는 WAV 파일(비압축 선형 PCM 형식)은 최대 16비트 깊이여야 하며, 부동 소수점 형식으로 인코딩되어야 합니다. .wav 파일 이름 확장자는 Speech-to-Text가 파일을 읽을 수 있다고 보장하지 않습니다. 이 튜토리얼의 분석을 위한 오디오 파일 최적화 섹션에서는 Speech-to-Text 내에서 파일을 텍스트로 변환하기 위해 파일을 부동 소수점에서 부호 있는 정수 비트 깊이로 변환하는 방법을 보여줍니다.

환경 초기화

이 가이드의 태스크를 수행하기 전에 FFMPEG를 설치하고, 일부 환경 변수를 설정하고, 오디오 파일을 다운로드하여 환경을 초기화해야 합니다. Cloud Shell 인스턴스 및 Cloud Storage 버킷에 저장된 미디어 파일을 사용합니다. 다양한 소스를 사용하면 Speech-to-Text의 다양한 기능을 사용할 수 있습니다.

이 섹션에서는 FFMPEG를 설치하고 Cloud Shell 인스턴스 스토리지 및 Cloud Storage 버킷의 샘플 데이터 스토리지 위치를 가리키는 환경 변수를 설정합니다. 미디어 파일은 두 위치에서 동일하며, 이 가이드의 일부 예시는 Cloud Shell 및 Cloud Storage 버킷의 파일에 모두 액세스합니다. 뒷부분의 로컬 터미널에서 튜토리얼 예시 실행 섹션에 설명된 대로 로컬 머신에 FFMPEG를 설치하고 이와 동일한 연습을 실행할 수 있습니다.

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  2. Cloud Shell에서 FFMPEG의 현재 버전을 설치합니다.

    sudo apt update
    sudo apt install ffmpeg
    
  3. FFMPEG가 설치되었는지 확인합니다.

    ffmpeg -version
    

    버전 번호가 표시되면 설치가 성공한 것입니다.

  4. 프로젝트 파일을 위한 디렉터리를 만듭니다.

    mkdir project_files
    
  5. 이후 단계에서 만들 출력 파일을 위한 디렉터리를 만듭니다.

    mkdir output
    
  6. 샘플 오디오 파일을 다운로드합니다.

    gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* ~/project_files/
    
  7. Cloud Storage 버킷 이름의 환경 변수를 만듭니다.

    export GCS_BUCKET_PATH=gs://cloud-samples-data/speech/project_files
    
  8. 다운로드한 샘플 오디오 파일을 가리키는 Cloud Shell 인스턴스 디렉터리 경로의 환경 변수를 만듭니다.

    export PROJECT_FILES=~/project_files
    

미디어 파일의 메타데이터 검사

Speech-to-Text로 오디오 또는 동영상 파일을 분석하는 경우 파일의 메타데이터 세부정보를 알아야 합니다. 이를 통해 문제를 일으킬 수 있는 불일치 또는 호환되지 않는 매개변수를 식별할 수 있습니다.

이 섹션에서는 FFMPEG의 ffprobe 명령어로 여러 미디어 파일의 메타데이터를 검사하여 파일의 사양을 파악합니다.

  1. Cloud Shell에서 HumptyDumptySample4416.flac 파일의 메타데이터를 표시합니다.

    ffprobe $PROJECT_FILES/HumptyDumptySample4416.flac
    

    출력은 다음과 같습니다.

    Input #0, flac, from 'project_files/HumptyDumptySample4416.flac':
      Duration: 00:00:26.28, start: 0.000000, bitrate: 283 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, mono, s16
    

    이 출력은 파일에 대한 다음 메타데이터를 나타냅니다.

    • 오디오 파일의 길이는 26.28초입니다.
    • 비트 전송률은 초당 283KB입니다.
    • 코덱 형식은 FLAC입니다.
    • 샘플링 레이트는 44.1kHz입니다.
    • 파일은 단일 채널 모노 파일입니다.
    • 비트 깊이는 16비트(부호 있는 정수)입니다.
  2. HumptyDumptySampleStereo.flac 파일의 메타데이터를 표시합니다.

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    출력은 다음과 같습니다.

    Input #0, flac, from 'project_files/HumptyDumptySampleStereo.flac':
      Duration: 00:00:26.28, start: 0.000000, bitrate: 378 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    

    이 파일이 이전 파일과 다른 점은 하나의 모노 트랙 대신 2채널 재생을 포함하기 때문에 비트 전송률이 더 높은(283KB/초 대신 378KB/초) 스테레오 파일이라는 점입니다. 다른 모든 값은 동일합니다.

    Speech-to-Text를 사용하여 처리할 오디오 파일의 채널 수를 확인해야 합니다. 오디오 파일에는 오디오 채널이 하나만 있어야 합니다. 동일한 파일 내에서 여러 오디오 채널을 텍스트로 변환하려면 뒷부분의 분석을 위한 오디오 파일 최적화 섹션에 설명된 대로 명령어를 스크립팅하는 것이 좋습니다.

  3. 5.1 오디오 믹스 파일의 메타데이터를 표시합니다.

    ffprobe $PROJECT_FILES/Alice_51_sample_mix.aif
    

    출력은 다음과 같습니다.

    Duration: 00:00:58.27, bitrate: 4610 kb/s
        Stream #0:0: Audio: pcm_s16be, 48000 Hz, 5.1, s16, 4608 kb/s
    

    이 파일은 모노 또는 스테레오 파일과 다른 형식이므로 추가 정보가 표시됩니다. 이 경우 오디오는 44.1kHz 샘플링 레이트와 16비트 비트 전송률(부호 있는 정수, little-endian)로 녹음된 선형 PCM 형식입니다.

    5.1 지정을 확인합니다. 오디오 파일에 6개의 오디오 트랙이 포함되어 있기 때문에 이 파일의 초당 4608Kbit의 데이터 속도는 이전 예시 어느 것보다도 훨씬 높습니다.

    이 가이드 뒷부분에서 Speech-to-Text를 사용하여 텍스트 변환을 시도할 때 이 파일이 어떻게 오류를 발생시키는지 볼 수 있습니다. 더 중요한 것은 오류 없이 Speech-to-Text에 사용하기 위해 파일을 최적화하는 방법을 볼 수 있다는 것입니다.

분석용 오디오 파일 최적화

앞서 언급했듯이 Speech-to-Text를 사용할 때는 오디오 파일이 단일 채널 모노 파일이어야 텍스트 변환 프로세스에서 오류가 발생하지 않습니다. 다음 표는 일반적인 오디오 형식과 처리를 위해 모노 파일을 변환하는 변환 프로세스를 보여줍니다.

현재 오디오 형식 변환 프로세스 출력 오디오 형식
모노 추출이 필요하지 않음 FLAC 또는 LINEAR16
스테레오 2개의 모노 파일로 분할 또는 모노 파일로 다운믹스 FLAC 또는 LINEAR16
멀티 트랙(5.1) 6개의 모노 파일로 분할 FLAC 또는 LINEAR16
멀티 스트림 오디오/동영상 별개의 모노 파일로 분할 FLAC 또는 LINEAR16

여러 오디오 트랙이 있는 파일을 처리하려면 FFMPEG 또는 기타 오디오 편집 도구를 사용하여 스테레오 파일에서 모노 트랙을 추출합니다. 또는 Speech-to-Text 문서의 여러 채널이 있는 오디오 텍스트 변환 섹션에 설명된 대로 프로세스를 자동화할 수 있습니다. 이 가이드에서는 FFMPEG를 사용하여 스테레오 파일에서 개별 모노 트랙을 추출하는 옵션을 살펴봅니다.

이전 섹션에서 본 것처럼 ffprobe 명령어를 사용하여 파일에 포함된 오디오 채널 수를 확인한 다음 필요한 경우 ffmpeg 명령어를 사용하여 파일을 모노 형식으로 추출 또는 변환할 수 있습니다.

잘못된 형식에 기반한 오류 미리보기

잘못된 형식이 텍스트 변환에 어떤 영향을 미치는지 보려면 모노 형식이 아닌 파일에서 Speech-to-Text를 실행해 보세요.

  1. Cloud Shell에서 HumptyDumptySampleStereo.flac 파일에 Speech-to-Text를 실행합니다.

    gcloud ml speech recognize $PROJECT_FILES/HumptyDumptySampleStereo.flac \
        --language-code='en-US'
    

    출력은 다음과 같습니다.

    ERROR: (gcloud.ml.speech.recognize) INVALID_ARGUMENT: Invalid audio channel count
    

    파일의 코덱 형식, 샘플링 레이트, 비트 깊이는 정확하지만 스테레오 설명자는 오디오 파일에 2개의 트랙이 있음을 뜻합니다. 따라서 Speech-to-Text를 실행하면 Invalid audio channel count 오류가 발생합니다.

  2. 파일에서 ffprobe 명령어를 실행합니다.

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    출력은 다음과 같습니다.

    Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    

    이렇게 하면 스테레오 파일 처리를 시도하기 때문에 Speech-to-Text 오류가 발생함을 알 수 있습니다.

스크립팅을 통해 스테레오 파일을 관리하는 방법에 대한 자세한 내용은 Speech-to-Text 문서의 여러 채널이 있는 오디오 텍스트 변환을 참조하세요.

스테레오 파일을 여러 FLAC 모노 파일로 분할

멀티 트랙 오류를 방지하는 방법의 한 가지 예는 스테레오 오디오 파일에서 2개의 모노 트랙을 추출하는 것입니다. 결과 트랙은 FLAC 형식이며 출력 디렉터리에 작성됩니다. 스테레오 파일에서 2개의 모노 파일을 추출할 때는 원본 파일 채널 위치를 나타내는 추출된 파일의 이름을 만드는 것이 좋습니다. 예를 들어 다음 절차에서는 서픽스 FL을 사용하여 왼쪽 채널을 지정하고 서픽스 FR을 사용하여 오른쪽 채널을 지정합니다.

텍스트 변환할 오디오 샘플이 두 채널 모두에 있는 경우 하나의 채널만 텍스트 변환에 사용됩니다. 하지만 서로 다른 화자가 서로 다른 채널에서 녹음되는 경우 채널을 개별적으로 텍스트로 변환하는 것이 좋습니다. Speech-to-Text는 단일 녹음 내에서 여러 음성을 인식할 수 있습니다. 하지만 각 음성을 별도의 채널에 격리하면 텍스트 변환의 신뢰도 수준이 높아집니다. (음성 인식에서는 신뢰값을 단어 오류율, 즉 WER이라고도 합니다.) 동일한 녹음에서 여러 음성을 사용하는 방법에 대한 자세한 내용은 Speech-to-Text 문서의 오디오 녹음에서 여러 화자 분리를 참조하세요.

  • Cloud Shell에서 HumptyDumptySampleStereo.flac 스테레오 파일을 2개의 모노 파일로 분할합니다.

    ffmpeg -i $PROJECT_FILES/HumptyDumptySampleStereo.flac -filter_complex "[0:a]channelsplit=channel_layout=stereo[left][right]" -map "[left]" output/HumptyDumptySample_FL.flac -map "[right]" output/HumptyDumptySample_FR.flac
    

    출력은 다음과 같으며, HumptyDumptySample_FL.flac(전방 왼쪽 채널) 모노 파일과 HumptyDumptySample_FR.flac(전방 오른쪽 채널) 모노 파일을 보여줍니다.

    Output #0, flac, to 'HumptyDumptySample_FL.flac':
      Input #0, flac, from 'project_files/HumptyDumptySampleStereo.flac':
      Duration: 00:00:26.28, start: 0.000000, bitrate: 378 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    Stream mapping:
      Stream #0:0 (flac) -> channelsplit
      channelsplit:FL -> Stream #0:0 (flac)
      channelsplit:FR -> Stream #1:0 (flac)
    (...)
    Output #0, flac, to 'HumptyDumptySample_FL.flac':
    (...)
    Stream #0:0: Audio: flac, 44100 Hz, 1 channels (FL), s16, 128 kb/s
    (...)
    Output #1, flac, to 'HumptyDumptySample_FR.flac':
    (...)
    Stream #1:0: Audio: flac, 44100 Hz, 1 channels (FR), s16, 128 kb/s
    (...)
    size=918kB time=00:00:26.27 bitrate= 286.2kbits/s speed= 357x
    video:0kB audio:1820kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
    

    이제 이 파일은 Speech-to-Text에 최적화되었습니다.

5.1 오디오 파일을 여러 모노 파일로 분할

오디오 파일을 최적화하는 또 다른 예는 5.1 오디오 파일을 개별 FLAC 모노 파일로 분할하는 것입니다. 5.1 믹스와 같은 멀티 채널 믹스의 채널을 말할 때는 일반적으로 파일 이름 지정이 스테레오 또는 모노 파일에서와 다릅니다. 왼쪽 채널 파일은 일반적으로 프런트 레프트의 경우 FL로 지정되고 오른쪽 채널은 프런트 라이트의 경우 FR로 지정됩니다. 5.1 믹스의 나머지 채널들은 여기에서 프런트 센터는 FC, 저주파수 효과는 LFE, 백 레프트(서라운드 레프트라고도 함)는 BL, 백 라이트(서라운드 라이트라고도 함)는 BR이라고 합니다. 이것은 표준 지정은 아니지만 사운드 파일의 원본을 식별하는 관례입니다.

일반적으로 영화 및 TV용 멀티 채널 오디오 파일에서 기본 대화는 프런트 센터 채널이 전달합니다. Speech-to-Text를 사용할 때는 대체로 이 파일을 선택합니다. 일반적으로 믹스에서 가장 많은 대화가 포함되어 있기 때문입니다.

후반 작업 환경에서는 기본 대화, 음악, 효과 요소가 스템이라는 그룹으로 분할되므로 믹스의 모든 대화는 최종 믹스가 완료될 때까지 음악 및 효과와 분리됩니다. 대화 스템은 대화만으로 구성되기 때문에 최종 믹스에서 센터 채널을 가져오는 것보다는 이 스템을 텍스트 변환할 때 Speech-to-Text의 결과가 더 좋습니다. 이는 추출된 센터 채널이 대화가 아닌 사운드와 믹스되어 명료도가 저하될 수 있기 때문입니다.

  1. Cloud Shell에서 Alice_51_sample_mix.aif 파일을 FLAC 파일로 분할하고 각 채널의 출력 파일 이름을 지정합니다.

    ffmpeg -i $PROJECT_FILES/Alice_51_sample_mix.aif -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" -map "[FL]" output/Alice_FL.flac -map "[FR]" output/Alice_FR.flac -map "[FC]" output/Alice_FC.flac -map "[LFE]" output/Alice_LFE.flac -map "[BL]" output/Alice_BL.flac -map "[BR]" output/Alice_BR.flac
    

    출력은 다음과 같습니다.

    Duration: 00:00:55.00, bitrate: 4235 kb/s
      Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 5.1, s16, 4233 kb/s
    Stream mapping:
      Stream #0:0 (pcm_s16le) -> channelsplit
      channelsplit:FL -> Stream #0:0 (flac)
      channelsplit:FR -> Stream #1:0 (flac)
      channelsplit:FC -> Stream #2:0 (flac)
      channelsplit:LFE -> Stream #3:0 (flac)
      channelsplit:BL -> Stream #4:0 (flac)
      channelsplit:BR -> Stream #5:0 (flac)
    Press [q] to stop, [?] for help
    Output #0, flac, to 'Alice_FL.flac':
    (...)
        Stream #0:0: Audio: flac, 44100 Hz, 1 channels (FL), s16, 128 kb/s
    (...)
    Output #1, flac, to 'output/Alice_FR.flac':
    (...)
        Stream #1:0: Audio: flac, 44100 Hz, 1 channels (FR), s16, 128 kb/s
    (...)
    Output #2, flac, to 'output/Alice_FC.flac':
    (...)
        Stream #2:0: Audio: flac, 44100 Hz, mono, s16, 128 kb/s
    (...)
    Output #3, flac, to 'output/Alice_LFE.flac':
    (...)
        Stream #3:0: Audio: flac, 44100 Hz, 1 channels (LFE), s16, 128 kb/s
    (...)
    Output #4, flac, to 'output/Alice_BL.flac':
    (...)
        Stream #4:0: Audio: flac, 44100 Hz, 1 channels (BL), s16, 128 kb/s
    (...)
    Output #5, flac, to 'output/Alice_BR.flac':
    (...)
        Stream #5:0: Audio: flac, 44100 Hz, 1 channels (BR), s16, 128 kb/s
    (...)
    
  2. 다음 파일을 클릭하여 듣습니다. 이 파일은 Cloud Storage 버킷에 있으며, 이름을 클릭하면 파일이 브라우저의 새 탭에서 재생됩니다.

    Alice_mono_downmix.flac
    
  3. 방금 만든 FC(센터 전용 채널 파일)를 듣습니다. (대화는 몇 초간 묵음 후에 시작됩니다.)

    Alice_FC.flac
    

    이전 파일과의 선명도 차이를 확인합니다. 이 트랙은 믹스의 대화 부분에만 기반합니다.

오디오 파일 품질 테스트

Speech-to-Text를 사용하여 미디어 파일을 변환하기 전에 파일을 청취하여 ML 도구가 정확한 결과를 제공하지 못하도록 하는 사운드 품질 이상이 있는지 확인하는 것이 좋습니다. 이 섹션에서는 파일 이름을 클릭하여 브라우저에서 파일을 재생합니다. (헤드폰이나 다이내믹 레인지가 넓은 스피커를 사용하는 것이 좋습니다.)

동영상 파일에서 오디오 듣기

  1. 다음 파일을 클릭하여 재생합니다.

    HumptyDumptySample4416.flac
    

    이 파일의 주파수는 44.1kHz이고 비트 깊이는 16비트입니다. 이 파일의 명확하고 왜곡되지 않은 충실도와 명료도를 확인하세요. 이 파일은 Speech-to-Text를 사용한 텍스트 변환에 적합합니다.

  2. 다음 샘플 5.1 형식의 동영상 파일을 재생하여 센터 채널을 제외한 모든 채널에서 대화가 아닌 서라운드 믹스를 듣습니다.

    sample_51_mix_movie.mp4
    

    이 파일은 5.1 오디오 시스템에서 재생하도록 만들어졌습니다. 헤드폰이나 2채널 시스템만 사용하는 경우 재생 도중 일부 채널이 들리지 않을 수 있습니다. (6개 채널을 모두 들으려면 5.1 시스템에서 재생을 디코딩해야 합니다. 그렇지 않으면 2채널 스테레오 다운믹스를 만들어야 합니다.)

    Speech-to-Text에는 대화 전용 채널을 사용하는 것이 이상적입니다. 샘플 파일의 5개 채널에는 대화가 아닌 오디오가 있고 1개 채널에는 대화가 있습니다. 뒷부분의 분석을 위한 오디오 파일 최적화 섹션에서는 각 트랙을 듣기 위해 5.1 파일로 인코딩된 6개의 개별 모노 오디오 채널을 추출하는 방법을 알아봅니다. 이렇게 하면 파일을 텍스트로 변환하는 Speech-to-Text의 능력을 개선하기 위해 대화 전용 채널(일반적으로 센터 또는 프런트 센터 채널)을 비대화 채널에서 격리할 수 있습니다.

서로 다른 샘플링 레이트로 동일한 파일 테스트

다음 표에는 각각 비트 깊이와 샘플링 레이트가 다른, 청취할 동일한 오디오 파일의 여러 버전이 나와 있습니다.

오디오 파일 샘플링 레이트/비트 깊이
HumptyDumptySample4416.flac 44.1kHz/16비트 선형 PCM
HumptyDumptySample2216.flac 22kHz/16비트 선형 PCM
HumptyDumptySample1616.flac 16kHz/16비트 선형 PCM
HumptyDumptySample1116.flac 11kHz/16비트 선형 PCM
HumptyDumptySample0808.flac 8kHz/8비트 선형 PCM
HumptyDumptyUpSample4416.flac 44.1kHz(업샘플링됨)/16비트 선형 PCM
HumptyDumptySample4408.flac 44.1kHz/8비트 선형 PCM
HumptyDumptySample4408to16.flac 44.1kHz/16비트 선형 PCM(업컨버팅됨)
  1. 앞의 표에 나온 각 파일을 들으려면 파일 이름을 클릭하세요. (브라우저의 새 탭에서 오디오 플레이어가 열립니다.) 샘플링 레이트 감소 시 품질의 차이를 확인하세요.

    16비트 파일의 충실도는 더 낮은 샘플링 레이트에서 감소하고 8비트 파일 버전에서는 양자화 오차로 인해 신호 대 잡음비가 크게 감소합니다. 표의 마지막 파일은 44.1kHz/16비트로 업샘플링된 원본 8kHz 8비트 파일입니다. 음질은 8kHz/8비트 파일과 동일합니다.

  2. Cloud Shell에서 HumptyDumptySampleStereo.flac 파일의 메타데이터를 검사합니다.

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    출력은 다음과 같습니다.

    Input #0, flac, from 'project_files/HumptyDumptySampleStereo.flac':
        Duration: 00:00:26.28, start: 0.000000, bitrate: 378 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    

    출력이 보여주는 것은 다음과 같습니다.

    • 파일 길이는 26초 28프레임입니다. 이 정보는 gcloud speech recognize-long-running 명령어를 사용하여 1분보다 긴 파일을 처리하려는 경우와 같은 고급 사용 사례에 유용합니다.
    • 파일의 비트 전송률은 378kb/s입니다.
    • 파일의 스트림 수는 1개입니다. (이것은 채널 수와는 다릅니다.)
    • 파일의 샘플링 레이트는 44.1kHz입니다.
    • 오디오 채널 수는 2개(스테레오)입니다.
    • 파일의 비트 깊이는 16비트입니다.

    전송 스트림에는 오디오, 동영상, 메타데이터를 포함한 여러 스트림이 포함될 수 있습니다. 각 스트림에는 스트림당 오디오 채널 수, 동영상 스트림의 코덱, 동영상 스트림의 초당 프레임 수 같은 다양한 특징이 있습니다.

    메타데이터에 이것이 스테레오 파일임이 표시됩니다. Speech-to-Text를 사용한 분석에 권장되는 기본 오디오 채널 수가 모노 채널 1개이기 때문에 이 점은 중요합니다.

Speech-to-Text를 사용한 파일 텍스트 변환

모노 파일을 추출했으므로 이제 Speech-to-Text를 사용하여 오디오 트랙을 텍스트 변환할 수 있습니다. gcloud ml speech 명령어를 사용하면 Speech-to-Text API가 호출됩니다.

  • 클린 Alice_FC.flac 대화 파일을 텍스트 변환합니다.

    gcloud ml speech recognize ~/output/Alice_FC.flac \
        --language-code='en-US' --format=text
    

    텍스트 변환이 완료될 때까지 몇 초 정도 기다립니다. 출력은 다음과 같습니다.

    results[0].alternatives[0].confidence: 0.952115
    results[0].alternatives[0].transcript: the walrus and the carpenter were walking close at hand they whip like anything to see such quantities of sand if this were only cleared away they said it would be grand
    results[1].alternatives[0].confidence: 0.968585
    results[1].alternatives[0].transcript: " if 7 Maids with seven mops swept it for half a year do you suppose the walrus said that they could get it clear I doubt it said the Carpenter and shed a bitter tear"
    results[2].alternatives[0].confidence: 0.960146
    results[2].alternatives[0].transcript: " oysters come and walk with us the walrus did beseech a pleasant walk a pleasant talk along the Briny Beach we cannot do with more than four to give a hand to each the eldest oyster look at him but never a word he said the eldest oyster winked his eye and shook his heavy head"
    

'더티' 트랙 텍스트 변환

사람의 대화가 들어 있는 오디오 파일 중 다른 사운드 요소가 대화에 섞인 파일이 있을 수 있습니다. 흔히 이러한 파일을 다른 요소가 섞이지 않고 대화만 있는 '클린' 트랙과 상반되는 '더티' 트랙이라고 합니다. Speech-to-Text는 잡음이 있는 환경에서도 음성을 인식할 수 있지만 결과의 정확도는 클린 트랙보다 떨어질 수 있습니다. 대화의 명료도를 개선하려면 Speech-to-Text로 파일을 분석하기 전에 추가 오디오 필터링 및 처리가 필요할 수 있습니다.

이 섹션에서는 앞의 예시에서 분석한 5.1 오디오 파일의 모노 다운믹스를 텍스트 변환합니다.

  1. Cloud Shell에서 Alice_mono_downmix.flac 파일을 텍스트 변환합니다.

    gcloud ml speech recognize $PROJECT_FILES/Alice_mono_downmix.flac \
        --language-code='en-US' --format=text
    

    출력은 다음과 같습니다.

    results[0].alternatives[0].confidence: 0.891331
    results[0].alternatives[0].transcript: the walrus and the carpenter Milwaukee Corsicana they reflect anything to see such quantity if this were only
    results[1].alternatives[0].confidence: 0.846227
    results[1].alternatives[0].transcript: " it's Sunday 7th March 23rd happy few supposed former said that they could get it clear I doubt it to the doctor and she said it did it to just come and walk with us"
    results[2].alternatives[0].confidence: 0.917319
    results[2].alternatives[0].transcript: " along the Briny Beach it cannot do with more than four to give a hand to each the eldest oyster look at him but he said it was poised to Rich's eye and shook his head"
    

    대화를 가리는 추가 사운드로 인해 이 분석의 결과는 정확하지 않습니다. 텍스트 변환 신뢰도 수준은 85% 미만입니다. 출력에서 보듯 텍스트는 예상만큼 녹음의 대화와 일치하지 않습니다.

샘플링 레이트와 비트 깊이가 서로 다른 오디오 파일 텍스트 변환

샘플링 레이트와 비트 깊이가 텍스트 변환에 어떤 영향을 미치는지 이해하기 위해 이 섹션에서는 다양한 샘플링 레이트와 비트 깊이로 녹음된 동일한 오디오 파일을 텍스트 변환합니다. 이를 통해 Speech-to-Text의 신뢰도 수준 및 전체 음질과의 관계를 알 수 있습니다.

  1. 다음 표의 파일 이름을 클릭하여 샘플을 듣고 품질 차이를 확인합니다. 파일 이름을 클릭할 때마다 브라우저의 새 탭에서 오디오 파일이 재생됩니다.

    오디오 파일 이름 파일 사양
    Speech_11k8b.flac 11025Hz 샘플링 레이트, 8비트 깊이
    Speech_16k8b.flac 16kHz 샘플링 레이트, 8비트 깊이
    Speech_16k16b.flac 16kHz 샘플링 레이트, 16비트 깊이
    Speech_441k8b.flac 44100Hz 샘플링 레이트, 8비트 깊이
    Speech_441k16b.flac 44100Hz 샘플링 레이트, 16비트 깊이
  2. Cloud Shell에서 이 예시 중 가장 낮은 오디오 품질을 나타내는 Speech_11k8b.flac 파일을 텍스트 변환합니다.

    gcloud ml speech recognize $PROJECT_FILES/Speech_11k8b.flac \
        --language-code='en-US' --format=text
    

    출력은 다음과 같습니다.

    results[0].alternatives[0].confidence: 0.77032
    results[0].alternatives[0].transcript: number of Pentacle represent
    results[1].alternatives[0].confidence: 0.819939
    results[1].alternatives[0].transcript: " what people can get in trouble if we take a look at the X again"
    
  3. 훨씬 높은 충실도로 녹음된 Speech_441k16b.flac 파일을 텍스트 변환합니다.

    gcloud ml speech recognize $PROJECT_FILES/Speech_441k16b.flac \
        --language-code='en-US' --format=text
    

    출력은 다음과 같습니다.

    results[0].alternatives[0].confidence: 0.934018
    results[0].alternatives[0].transcript: that gives us the number of pixels per inch when magnified to a 40-foot screen size now we take that number and multiply it by the distance between our eyes the interocular distance of 2 and 1/2 inch number of 10 pixels in other words on a 40-foot screen 10 pixels of information represents 2 and 1/2 in anything farther apart than that and positive Parallax is going to start to force the eyes to rotate that word in order to use the image
    results[1].alternatives[0].confidence: 0.956892
    results[1].alternatives[0].transcript: " where people tend to get in trouble is by looking at these images on a small monitor now if we take a look at the same math using a smaller monitor in this case 60 in the screen size in the resolution to multiply It Again by the distance between our eyes we end up with eighty pixels of Divergence on a monitor which equals two and a half inches so on the monitor things might look fine but when magnified up to the larger screen in this case for defeat we've created a situation that's eight times what we can stand to look at its very painful and should be avoided"
    

    두 예시의 출력에서 신뢰도의 차이를 확인합니다. 11kHz와 8비트 깊이로 녹음된 첫 번째 파일(Speech_11k8b.flac)의 신뢰도 수준은 78% 미만입니다. 두 번째 파일의 신뢰도 수준은 약 94%입니다.

  4. 원하는 경우 1단계의 표에 나열된 다른 파일을 텍스트 변환하여 오디오 파일 샘플링 레이트와 비트 깊이의 정확도를 추가 비교합니다.

다음 표는 앞의 절차 1단계의 표에 나열된 각 파일의 Speech-to-Text 출력을 요약한 것입니다. 각 파일 형식의 신뢰값 결과 차이를 확인합니다. (결과는 약간 다를 수 있습니다.) 샘플링 레이트와 비트 전송률이 낮은 오디오 파일의 텍스트 변환은 나쁜 음질로 인해 신뢰도가 낮아지는 경향이 있습니다.

오디오 파일 이름 신뢰도(섹션 1) 신뢰도(섹션 2)
Speech_11k8b.flac 0.770318 0.81994
Speech_16k8b.flac 0.935356 0.959684
Speech_16k16b.flac 0.945423 0.964689
Speech_44.1k8b.flac 0.934017 0.956892
Speech_44.1k16b.flac 0.949069 0.961777

분석용 동영상 파일 최적화

가이드의 이 섹션에서는 영화 파일에서 5.1 오디오를 추출하는 데 필요한 단계를 설명합니다.

  1. Cloud Shell에서 6개의 모노 채널을 5.1 영화 파일에서 추출하고 개별 파일을 FLAC 형식으로 변환합니다.

    ffmpeg -i $PROJECT_FILES/sample_51_mix_movie.mp4 -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" -map "[FL]" output/sample_FL.flac -map "[FR]" output/sample_FR.flac -map "[FC]" output/sample_FC.flac -map "[LFE]" output/sample_LFE.flac -map "[BL]" output/sample_BL.flac -map "[BR]" output/sample_BR.flac
    

    이 명령어는 다음 파일을 출력 디렉터리로 추출합니다.

    sample_BL.flac
    sample_BR.flac
    sample_FC.flac
    sample_FL.flac
    sample_FR.flac
    sample_LFE.flac
    
  2. 샘플 파일의 메타데이터를 확인합니다.

    ffprobe $PROJECT_FILES/Speech_48kFloat.wav
    

    출력은 다음과 같습니다.

    Duration: 00:00:05.12, bitrate: 1536 kb/s
    Stream #0:0: Audio: pcm_f32le ([3][0][0][0] / 0x0003), 48000 Hz, mono, flt, 1536 kb/s
    

    pcm_f32leflt 메타데이터 값은 이 파일의 비트 전송률이 부동 소수점 형식임을 나타냅니다. 부동 소수점 비트 전송률 WAV 파일을 부호 있는 정수 형식으로 변환해야 합니다.

  3. 파일의 비트 전송률을 부호 있는 정수 형식으로 변환합니다.

    ffmpeg -i $PROJECT_FILES/Speech_48kFloat.wav -c:a pcm_s16le output/Speech_48k16bNonFloatingPoint.wav
    

    이 명령어는 비트 전송률이 부호 있는 정수 형식인 WAV 파일을 새로 만듭니다.

  4. 새로 만든 파일의 메타데이터를 검사합니다.

    ffprobe ~/output/Speech_48k16bNonFloatingPoint.wav
    

    출력은 다음과 같습니다.

    Duration: 00:00:05.12, bitrate: 768 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 1 channels, s16, 768 kb/s
    

    이제 pcm_s16les16 지정에서 보듯 변환된 파일의 비트 전송률이 부호 있는 정수(little-endian) 형식임이 메타데이터에 표시됩니다.

로컬 터미널에서 가이드 예시 실행

이 가이드의 모든 예시는 로컬 컴퓨터의 터미널에서 실행할 수 있습니다. 예시를 로컬에서 실행하면 ffplay 명령어를 사용하여 오디오 및 동영상 파일을 브라우저에서 단순히 듣는 것이 아니라 직접 재생할 수 있습니다.

  1. 로컬 컴퓨터의 터미널에 FFMPEG 도구를 설치합니다.

    sudo apt update
    sudo apt install ffmpeg
    
  2. 샘플 파일을 로컬 머신에 다운로드합니다.

    gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* local_destination_path
    

    local_destination_path를 샘플 파일을 넣을 위치로 바꿉니다.

  3. LOCAL_PATH 환경 변수를 컴퓨터에서 샘플 파일을 다운로드한 위치로 설정합니다.

    export LOCAL_PATH=local_destination_path
    

    local_destination_path을 이전 단계의 경로로 바꿉니다.

  4. 터미널에서 ffplay 명령어를 사용하여 샘플 오디오 파일을 듣습니다.

    • 오디오 파일: ffplay $LOCAL_PATH/HumptyDumpty4416.flac
    • 동영상 파일: ffplay $LOCAL_PATH/sample_51_mix_movie.mp4
    • Cloud Storage 버킷 재생: ffplay $GCS_BUCKET_PATH/HumptyDumpty4416.flac

    로컬 터미널에서 이 가이드의 앞부분에서 사용한 예시를 실험해 보세요. 이렇게 하면 Speech-to-Text를 가장 잘 사용하는 방법을 이해하는 데 도움이 됩니다.

문제해결

오류는 여러 가지 요인으로 인해 발생할 수 있으므로 몇 가지 일반적인 오류를 검사하고 수정 방법을 알아 두는 것이 좋습니다. 특정 오디오 파일에서 텍스트 변환 프로세스가 완료되지 않는 오류가 여러 번 발생할 수 있습니다.

오디오가 너무 긴 경우

gcloud speech recognize 명령어는 최대 1분 길이의 파일을 처리할 수 있습니다. 예를 들어 다음 예시를 시도해 보세요.

gcloud ml speech recognize $PROJECT_FILES/HumptyDumpty4416.flac \
    --language-code='en-US' --format=text

출력은 다음과 같습니다.

ERROR: (gcloud.ml.speech.recognize) INVALID_ARGUMENT: Request payload size exceeds the limit: 10485760 bytes.

이 오류는 speech recognize 명령어를 사용하여 1분보다 긴 파일을 처리하려 하기 때문에 발생합니다.

길이가 1~80분인 파일에는 speech recognize-long-running 명령어를 사용할 수 있습니다. 파일의 길이를 확인하려면 다음 예시와 같이 ffprobe 명령어를 사용하면 됩니다.

ffprobe $PROJECT_FILES/HumptyDumpty4416.flac

출력은 다음과 비슷합니다.

Duration: 00:04:07.91, start: 0.000000, bitrate: 280 kb/s
Stream #0:0: Audio: flac, 44100 Hz, mono, s16

이 오디오 파일의 실행 시간은 약 4분 8초입니다.

로컬 컴퓨터에서 대용량 파일 읽기

speech recognize-long-running 명령어는 로컬 컴퓨터에서 최대 1분 길이의 파일만 처리할 수 있습니다. 어디에서 오류가 발생할 수 있는지 알려면 이보다 긴 파일에 Cloud Shell의 speech recognize-long-running 명령어를 사용하세요.

gcloud ml speech recognize-long-running $PROJECT_FILES/HumptyDumpty4416.flac \
    --language-code='en-US' --format=text

출력은 다음과 같습니다.

ERROR: (gcloud.ml.speech.recognize-long-running) INVALID_ARGUMENT: Request payload size exceeds the limit: 10485760 bytes.

이 오류는 오디오의 길이 때문이 아니라 로컬 머신에 있는 파일의 크기 때문에 발생합니다. recognize-long-running 명령어를 사용할 경우 파일이 Cloud Storage 버킷에 있어야 합니다.

1분보다 긴 파일을 읽으려면 다음 명령어와 같이 recognize-long-running을 사용하여 Cloud Storage 버킷에서 파일을 읽습니다.

gcloud ml speech recognize-long-running $GCS_BUCKET_PATH/HumptyDumpty4416.flac \
    --language-code='en-US' --format=text

과정을 완료하는 데 몇 분 정도 걸립니다.

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트를 유지하고 개별 리소스를 삭제하세요.

프로젝트 삭제

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

다음 단계