이런 날이 올 줄 알았습니다 !!
AI로 무려 100페이지짜리 보고서를 만들다니요 !!
제가 만들어놓고도 저도 놀랐어요 !!
AI를 쓰다보면 이런 느낌을 종종 받게 되죠.
이게 된다고?
이걸 내가 했다고?
Plain Text
복사
큰 흐름은 이렇습니다.
1.
강의, 컨설팅, 회의를 싹 다 녹음한다.
2.
녹음한 걸 싹 다 STT 변환해서 텍스트로 바꾼다
3.
텍스트를 싹 다 제미나이에 밀어넣는다
4.
전체 내용으로 목차 만든다
5.
목차별로 차례대로 보고서 뽑는다
제가 이번에 디지털 마케팅에 AI를 활용하는 방법에 대해서 컨설팅을 하고 있습니다.
무려 50일 동안 진행되는 광범위하고 밀도 높은 컨설팅입니다.
저 혼자 하는 건 아니고, 당연히 각 분야별 전문가들이 많이 참여합니다.
그래서 저에게 이런 고민이 생기죠.
1.
각 전문가분들의 강의/컨설팅 내용을 나도 이해하고 공부하고 정리해야 한다
2.
앞서 투입된 컨설턴트들의 활동 내용을 잘 정리해서 전달해야 뒤에 투입되는 컨설턴트들이 흐름 맞춰서 일 하기 편하다
3.
활동 내용들 다 정리해서 중간 보고서, 결과 보고서 작성해야 한다.
그래서 시작했습니다.
"모든 활동을 기록해버리겠다" 프로젝트.
"기록은 기억을 이긴다" 프로젝트.
1단계. 싹 다 녹음하기
모든 강의와 모든 컨설팅 미팅 내용을 기록했습니다.
PC로 할 때는 줌으로 녹화/녹음 동시에 하고,
PC 안 쓰고 미팅할 때는 녹음기로 녹음했어요.
줌으로 녹화한 건 mp4, 줌에서 오디오 녹음된 건 m4a, 제가 녹음기로 녹음한 건 mp3 이렇게 다 모았습니다.
2단계. 비디오를 오디오로 변환하기
우선 줌으로 녹화된 mp4 파일을 mp3 파일로 변환부터 합니다.
필요한 패키지부터 설치합니다.
터미널에서 아래 명령어 실행하면 돼요.
pip install moviepy pydub
Python
복사
GPT에게 받은 코드입니다.
mp4 파일에서 오디오만 가져와서 mp3 파일로 변환하는 파이썬 코드에요.
import os
from moviepy.editor import VideoFileClip
from pydub import AudioSegment
from tkinter import Tk, filedialog
def extract_audio_from_mp4(mp4_path):
# 출력 파일 경로 지정
base, _ = os.path.splitext(mp4_path)
output_mp3_path = base + ".mp3"
# 오디오 추출 → 임시 WAV
video = VideoFileClip(mp4_path)
temp_wav_path = base + "_temp.wav"
video.audio.write_audiofile(temp_wav_path, logger=None)
# WAV → MP3 (64k bitrate)
audio = AudioSegment.from_wav(temp_wav_path)
audio.export(output_mp3_path, format="mp3", bitrate="64k")
# 임시 파일 삭제
os.remove(temp_wav_path)
print(f"✅ MP3 파일이 생성되었습니다:\\n{output_mp3_path}")
def choose_file_and_convert():
# 파일 선택 팝업
root = Tk()
root.withdraw() # tkinter 창 숨기기
mp4_file = filedialog.askopenfilename(
title="MP4 파일 선택",
filetypes=[("MP4 files", "*.mp4")]
)
if mp4_file:
extract_audio_from_mp4(mp4_file)
else:
print("⚠️ 파일이 선택되지 않았습니다.")
if __name__ == "__main__":
choose_file_and_convert()
Python
복사
이거 실행은 VS Code에서 했어요.
내 PC에서 파이썬 코드를 실행하는 프로그램이고,
마이크로소프트가 만든거고, 누구나 무료로 설치하고 사용할 수 있습니다.
이렇게 변환하면 모든 프로젝트 내용이 다 mp3 파일로 모아졌죠.
3단계. 오디오를 텍스트로 변환하기
이제 이걸 다시 STT를 해서 텍스트로 바꿉니다.
이것도 필요한 기능을 설치하기 위해서 터미널에서 아래 명령어 실행해주고요.
pip install openai-whisper
pip install ffmpeg-python
Python
복사
아래는 mp3 파일을 불러와서 텍스트로 변환하는 코드입니다.
# 셀 1: 파일 선택 및 경로 정보 추출 + 오디오 품질 분석
import tkinter as tk
from tkinter import filedialog
import os
import subprocess
import json
# 팝업창으로 파일 선택
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename(
title="MP3 파일 선택",
filetypes=[("MP3 files", "*.mp3")]
)
if not file_path:
raise ValueError("파일이 선택되지 않았습니다.")
# 파일명과 폴더 경로 분리 저장
file_dir = os.path.dirname(file_path)
file_name = os.path.basename(file_path)
file_stem = os.path.splitext(file_name)[0]
# ffprobe로 오디오 품질 정보 추출 (ffmpeg 설치 필요)
def get_audio_info(path):
try:
cmd = [
"ffprobe",
"-v", "quiet",
"-print_format", "json",
"-show_format",
"-show_streams",
path
]
result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 명시적으로 UTF-8 디코딩
output = result.stdout.decode("utf-8", errors="replace")
data = json.loads(output)
# 첫 번째 오디오 스트림 정보
stream = next((s for s in data['streams'] if s['codec_type'] == 'audio'), None)
if not stream:
raise Exception("오디오 스트림을 찾을 수 없습니다.")
print("\\n🎧 오디오 품질 정보:")
print(f" 🔹 코덱: {stream.get('codec_name')}")
print(f" 🔹 채널 수: {stream.get('channels')} 채널")
print(f" 🔹 샘플레이트: {stream.get('sample_rate')} Hz")
print(f" 🔹 비트레이트: {stream.get('bit_rate', '알 수 없음')} bps")
print(f" 🔹 시간: {float(stream.get('duration', 0)):.2f}초")
except Exception as e:
print(f"오디오 정보 분석 중 오류 발생: {e}")
# 오디오 품질 출력
get_audio_info(file_path)
import whisper
import subprocess
import numpy as np
import io
import os
import time
import soundfile as sf
# ffmpeg로 MP3 → WAV (메모리 내 처리, Whisper가 요구하는 형태)
def compress_and_load_wav(path):
process = subprocess.run([
"ffmpeg", "-i", path,
"-ac", "1",
"-ar", "16000",
"-f", "wav",
"pipe:1"
], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL)
# BytesIO로 래핑
audio_buffer = io.BytesIO(process.stdout)
# WAV 데이터를 NumPy 배열로 로딩
audio_np, _ = sf.read(audio_buffer)
# 🔧 Whisper가 요구하는 float32로 변환
return audio_np.astype(np.float32)
# Whisper 모델 로딩
start_time = time.time()
print(f"Whisper 모델 로딩 중...")
model = whisper.load_model("base")
# 오디오 변환 및 로딩
print(f"'{file_name}' 음성 파일을 처리 중 (메모리 내 압축 변환)...")
audio_np = compress_and_load_wav(file_path)
# STT 수행
print("STT 변환 진행 중 (예상 진행률):")
result = model.transcribe(audio_np, verbose=False)
# 진행률 출력 에뮬레이션
text = result["text"]
total_chars = len(text)
chunks = 10
for i in range(1, chunks + 1):
time.sleep(0.2)
print(f" > {i*10}% 완료")
# 결과 저장
output_path = os.path.join(file_dir, file_stem + ".txt")
with open(output_path, "w", encoding="utf-8") as f:
f.write(text)
elapsed = time.time() - start_time
print(f"\\n✅ 변환 완료! 파일 저장 위치: {output_path}")
print(f"⏱ 총 소요 시간: {elapsed:.2f}초")
Python
복사
이렇게 변환해서 전부 다 .txt 파일로 바꿉니다.
파일 하나당 몇 분 걸릴 때도 있어요.
그래서 저는 이 코드를 수정해서,
폴더 단위로 그 안의 모든 mp3 파일을 STT 변환하라고 수정해서 쓰고 있어요.
그럼 폴더에 mp3 파일들 모아놓고,
코드 실행해놓고 점심 먹고 오면 됩니다.
밤에 코드 돌려놓고 자고 일어나서 확인해도 되고요.
짜잔~
모든 변환이 끝나면 이렇게 .txt 파일 또는 .md 파일로 만들어집니다.
4단계. 변환된 스크립트를 AI로 논리적으로 정리하기
STT 변환하는 이것도 생성형 AI 답게 랜덤성이 좀 있습니다.
이름 같은거를 틀리거나 문법이 좀 어색하거나 그럴 때도 있어요.
그럼 이걸 다시 AI에 넣어서 정리를 한번 합니다.
이 작업은 GPT, 클로드, 제미나이 모두 다 잘 합니다만, 저는 클로드가 제일 만족스러웠어요.
STT 변환된 스크립트를 깔끔하게 정리하는 이 작업도
녹음 파일 생길 때마다 반복적으로 해야 되죠.
그래서 클로드에서 '프로젝트' 하나 만들었어요.
제가 입력한 프로젝트 지침입니다.
사용자가 제공한 콘텐츠를 아래의 가이드라인에 따라 편집해라.
- 너와 사용자는 첨부의 '101 디지털 마케팅 컨설팅 수행 계획서.md'에 따라 컨설팅을 진행 중이다
- 사용자가 제공한 문서의 내용은 이 마케팅 컨설팅 과정에서의 회의 또는 강의로 진행된 내용을 STT 변환한 스크립트이다.
- 컨설팅을 받은 고객사 참여자들이 이 문서를 보고 중요 내용을 리마인드 할 수 있도록 모든 내용을 서술식으로 자세하게 정리해줘.
- 말 한 사람이 누구인가에 대한 언급은 생략하고, 핵심적인 메세지에 집중해서 정리해라.
- 사람이 말한 단어 흐름 순서대로 정리하지 말고, 해당 설명의 핵심 내용을 중심으로 책 처럼 서술식으로 설명한다.
- 동일한 내용에 대한 설명이 중복으로 나오지 않도록 내용을 통합한다.
- 주요 용어에 대한 Glossary를 첨부할테니, 내용 정리할 때 참고해라.
- 전체 내용을 분석하여 목차 구조를 만들고, 각 목차별로 내용을 정리해라.
- 디지털 마케팅에 대한 책, 매뉴얼 스타일로 작성해라
- 목차의 수준은 ##, ###, ####을 사용해라
Plain Text
복사
자료의 맥락을 이해시키기 위해서 '프로젝트 수행 계획서'도 첨부해줬고,
주요 용어들도 정리해서 'Glossary'라는 이름으로 첨부해줬어요.
우리 산업과 회사에서만 쓰는 용어들은 AI도 잘 몰라서 오타가 나거든요.
이렇게 정리를 하면 아주 논리적인 글이 됩니다.
그리고 오탈자는 거의 0%가 됩니다.
AI가 전체 글을 읽고 흐름에 맞게 다시 글을 쓴거라서, 왠만한 오타는 다 사라져요.
자~ 이렇게 해서 우리는 모든 텍스트를 논리적으로 정리했습니다.
총 20일 정도의 강의와 컨설팅이 진행되었고,
할 때마다 1시간 또는 2시간 단위로 계속 녹음을 한거라서
전체 녹음 파일은 약 100개에요.
그래서 최종 변환된 .txt 또는 .md 파일도 딱 100개 정도에요.
5단계. 텍스트 다 넣고 보고서 작성하기
이제 이 100개의 파일을 다 AI에 넣고,
프로젝트 진행 현황에 대한 보고서 작성을 시키면 됩니다.
엄청나게 긴 글 또는 첨부파일을 받아주는 AI가 필요하죠.
그리고, 엄청나게 길고 자세한 보고서를 한번에 써줄 AI도 필요하고요.
GPT ?
이 부분에서 GPT는 잘 안 되네요.
파일을 차례대로 업로드하면 잘 받아줍니다.
파일 내용 파악도 잘 해요.
그런데 보고서 작성을 시키면
아무리 캔버스를 열어서 거기다 작성을 시켜도 1천 단어를 잘 못 넘겨요.
그거 넘어가면 느려지고, 버벅거리고, 끊어지네요.
그래서 캔버스를 여러 개 열어서 목차대로 각각 작성해달라고 시켜요.
그럼 너댓개는 잘 만드는데, 역시나 길어지면 오류가 생기네요. ㅜㅠ
클로드?
클로드는 아티팩트에 좀 더 길게 써줍니다.
더 길게 써달라고 하면 아티팩트 안에서 이어쓰기 하면서 꽤 길게 뽑아줘요.
그런데 클로드는 하나의 채팅창 안에서 전체 대화 길이에 제한이 있어요.
그 제한이 끝나면 그 채팅창은 더 이상 아무런 대화도 안 받아주네요.
그리고 제가 준비한 100개의 텍스트 파일을
클로드에 다 넣기도 전에 그 길이 제한이 끝나버렸어요.
보고서 작성은 시작도 못했어요 ㅜㅠ
제미나이 !!!
다행이 제미나이에서 잘 작동했어요.
차례대로 파일 올리기도 다 잘 받아주었고요.
그걸 다 정리해서 아주 아주 아주 아주 아주 긴 보고서도 잘 작성해줬어요.
몇 장면을 보여드릴게요.
이게 제가 제미나이에 입력한 인풋들입니다.
파일 100개를 부분적으로 통합을 많이 했고,
그 통합 파일들을 저렇게 차례대로 설명하면서 다 넣었어요.
넣으면서도 조마조마했어요. 길이 제한 끝났다고 안 받아줄까봐...
하지만 끝까지 다 들어갔습니다. ㅎㅎㅎㅎㅎㅎ 제미나이 대단해~
이제 본격적으로 문서 작성을 시작하는거죠.
무턱대고 쓰다보면 문서도 논리도 깨지고 중언부언 많아집니다.
전체 목차부터 먼저 잡고 시작하는게 좋아요.
목차 제안 받은 다음에, 그 목차를 수정하기 위한 대화를 열심히 합니다.
아무리 AI가 자동화라 해도, 결국 전략은 사람이 짜야합니다.
AI는 손발이 되줄뿐 !! 머리는 내가 직접 !!
1. 프로젝트 개요
이 부분은 삭제.
진단보고서 이미 했으니까, 이 내용은 다시 안 해도 돼.
2. 현황 진단 요약 및 전략 방향
이 부분도 삭제. 다시 리뷰 안 해도 돼.
그냥 현재 전체적인 컨설팅 진행 단계와 주요 내용에 대한 브리핑 하는 부분으로 변경해줘.
3. 판매 채널별 마케팅 전략
이 부분에서는 여러 판매 채널을 설명하고 주요 특징을 설명하는 부분을 추가해줘
Plain Text
복사
네이버 스스를 위로, 쿠팡을 아래로
3. 자사몰 중심 DA 캠페인 및 데이터 기반 마케팅 흐름
3.1에서 왜 자사몰이 필요한지, 자사몰에서 어떤 데이터를 얻을 수 있는지 설명 추가
Plain Text
복사
5. 콘텐츠 마케팅 전략
이 부분에서
5.1은 콘텐츠 마케팅의 종류, 역할, 판매채널과의 연계 등에 대해서 개념을 설명해줘
2.1 판매 채널별 특징 및 판매 메커니즘 개요
온라인 판매 채널의 다양성 및 중요성
각 채널의 고유한 특성 및 고객 유입/전환 방식
이 부분에서 해외 영업 채널 개발, B2B 인바운드를 위한 사이트 필요성도 제시해줘
Plain Text
복사
좋아. 목차는 이걸로 하자.
한번에 작성하면 오래 걸리니까, 챕터별로 작성하고, 나와 의논하면서 완성하자. 완성되면 그 다음에 다음 챕터를 하자.
Plain Text
복사
이런 대화를 하면서 목차를 완성했어요.
그리고 완성된 목차 중 챕터1을 작성을 시킵니다.
그리고 그걸 수정해요.
너무 길다, 한 문단에 200 단어 정도만 쓰자, 내용이 길면 핵심 메세지 중심으로 list로 표현해라, 목차 수준은 ##, ###, #### 수준으로 해라, '~했음' / '~임' / '~ 증가' 이런 말투로 해라, 강사가 ~~~ 라고 말했다 이런 언급은 하지 마라
Plain Text
복사
이런 식으로 내가 원하는 보고서 스타일을 만들어냅니다.
이렇게 해놓고 챕터1에 OK를 주고요, 이 스타일대로 챕터2를 작성하자고 하면 돼요.
이렇게 챕터10까지 진행했습니다.
시간이 꽤 걸렸지만,
제가 직접 작성하는 시간에 비하면 10분의 1 또는 거의 100분의 1 수준이죠.
게다가 AI가 더욱 좋은 건, 그야말로 포멀한 문서 작성에 아주 강하다는거죠.
•
깔끔한 문장
•
논리적인 구조
•
내용 사이의 일정한 길이
최종 보고서 텍스트는 만들었고,
우리의 보고서는 지금 마크다운 형식이죠.
제목에 ##, ###, #### 이렇게 붙어있습니다.
이거를 MS Word로 변환해야겠죠?
구글에서 markdown to word 검색해보면 변환 사이트들이 나옵니다.
이렇게 변환하면 MS 워드로 만들어집니다.
MS 워드에 있는 문서 디자인 메뉴를 이용해서 테마와 서식을 적용했어요.
이건 클릭 몇번이면 끝납니다.
최종 보고서 감상해보실까요.
총 91페이지입니다.
큰 제목 폰트 12, 중간 제목 폰트 11, 본문 폰트 10입니다.
당연히 검수를 해야 합니다.
여러 사람이 강의한 내용이라서 각 강사분들께 보내드리고 검수를 받았습니다.
반응은? WOW 나옵니다.
언제 다 듣고 기억해서 정리하셨어요? 대단하십니다~
이런 반응이죠.
이 정도 분량을 듣고 이해하고 기억해서 정리한다는건 불가능한 일이죠.
자~
복잡한 프로젝트에서 AI를 활용하는 방법을 알아봤습니다. ^^
도움 되셨기를 바랍니다.