Gemini TTS로 발표 대본 음성 파일을 만들어보자.

소개

발표를 준비할 때, 어떻게 시작하시나요?
저는 주제를 정하고 어느정도의 스토리를 만든 후 그에 맞게 PPT를 만들어 발표를 준비했었습니다.

그러다보면 항상 PPT를 수정해야하는 경우가 많았습니다.

스토리라인이 맘에 들지 않을 때도 있었고, 발표 연습을 하다보면 뭔가 어색하거나 논리적으로 맞지 않는 경우도 많더라구요.

그래서 이번에는 주제를 정하고 스토리를 짠 후 대본을 만들어 먼저 "들어보는 것"이 어떨까라는 생각에서 이번 시도를 해보게 되었습니다.

AI 도구를 활용하면 음성 파일을 직접 생성하는 것도 어렵지 않기 때문에, 발표 대본을 작성하고 바로 TTS로 들어보며 어색한 부분을 고쳐가며 PPT와 대본을 완성해가는 워크플로우를 만들어봤습니다 😊

진행 방법

🎤 1. Gemini 2.5 Flash Preview TTS 로 발표 대본 만들기

  • Google의 Gemini와 대화하듯 발표 주제를 정하고 대본 초안 생성

  • 이후 결과물을 바탕으로 수정 보완 반복하여 1차 대본 완성

🔊 2. AI Studio의 TTS로 음성 파일 생성

  • Google AI Studio 접속 https://aistudio.google.com/generate-speech?hl=ko

  • 다양한 voice 중에서 적절한 톤 선택 → 대본 입력 후 미리 듣기 & 다운로드 가능

    화면의 한국 이름 목록
    한국어 텍스트가있는 Google 검색 페이지의 스크린 샷
  • 발표 스타일에 따라 더 진중하거나 밝은 목소리를 선택

⚙️ 3. n8n으로 자동화

  • 발표 대본을 입력하면 AI Studio API를 통해 음성 파일을 생성하는 n8n 워크플로우 구성

  • gemini TTS을 이용하려면 google AI studio API가 필요합니다.

    프로세스 단계를 보여주는 다이어그램

    TTS_body_maker 코드에서 voiceName: "본인이 원하는 음성 선택하면 됨"

    
    return {
      json_body: {
        model: "gemini-2.5-flash-preview-tts",
        contents: [
          {
            parts: [
              { text: $json.text }
            ]
          }
        ],
        generationConfig: {
          responseModalities: ["AUDIO"],
          speechConfig: {
            voiceConfig: {
              prebuiltVoiceConfig: {
                voiceName: "Sadaltager"  // 공식적으로 한국어 예시로 제공되는 목소리
              }
            }
          }
        }
      }
    };
    
  • 녹색 버튼이있는 웹 페이지의 스크린 샷

    TTS URL

    https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-tts:generateContent
  • TTS _file 코드

    // Base64 인코딩된 PCM 데이터를 받아 WAV 포맷으로 변환하고 binary로만 반환
    const base64 = $json.candidates[0].content.parts[0].inlineData.data;
    const pcm = Buffer.from(base64, 'base64');
    
    // WAV 헤더 설정
    const sampleRate = 24000; // <-- 이 값을 24000으로 변경해 보세요.
    const channels = 1;
    const bitDepth = 16;
    const byteRate = sampleRate * channels * bitDepth / 8; // sampleRate에 따라 자동 계산됩니다.
    const blockAlign = channels * bitDepth / 8;
    const dataSize = pcm.length;
    const riffSize = 36 + dataSize;
    
    // 아래 코드는 수정할 필요 없습니다.
    const header = Buffer.alloc(44);
    header.write('RIFF', 0);
    header.writeUInt32LE(riffSize, 4);
    header.write('WAVE', 8);
    header.write('fmt ', 12);
    header.writeUInt32LE(16, 16); // Subchunk1Size
    header.writeUInt16LE(1, 20);  // AudioFormat (PCM)
    header.writeUInt16LE(channels, 22);
    header.writeUInt32LE(sampleRate, 24);
    header.writeUInt32LE(byteRate, 28);
    header.writeUInt16LE(blockAlign, 32);
    header.writeUInt16LE(bitDepth, 34);
    header.write('data', 36);
    header.writeUInt32LE(dataSize, 40);
    
    // WAV 파일 완성
    const wavBuffer = Buffer.concat([header, pcm]);
    
    return [{
      json: {},
      binary: {
        data: {
          data: wavBuffer.toString('base64'),
          mimeType: 'audio/wav',
          fileName: 'tts.wav'
        }
      }
    }];

  • 나만의 발표 TTS 생성기 완성 🎉

결과와 배운 점

  • Gemini TTS 음성

zephyr.wav
10.57MB
kore.wav
10.34MB
sadaltager.wav
11.3MB
  • ElevenLabs

Brian.mp3
2.98MB
ElevenLabs_2025-07-27T13_39_00_OWEN_ivc_sp105_s50_sb75_se0_b_m2.mp3
4.45MB

  • 눈으로 볼 땐 괜찮아 보였던 문장도, 소리로 들으면 어색한 흐름이 확연히 드러남

  • Gemini의 대본 생성은 빠르고 유용하며, TTS 음질도 훌륭함

  • 개인적으로는 무료 기준에서 Eleven Labs보다 더 자연스럽게 느껴졌음 하지만 본인 음성을 만들려면 Eleven Labs 사용해야함

  • 자동화까지 해두니, 다음엔 훨씬 간편하게 반복 사용 가능하나 굳이 자동화를 할 필요는 없는 것 같습니다. 그냥 AI studio에서 그냥 하면 휠씬 편함 바로 대본 수정도 가능하고 ^^

  • 음성 생성 속도는 eleven labs가 휠씬 빠름

도움 받은 글 (옵션)

4
2개의 답글

👉 이 게시글도 읽어보세요