[n8n] 실전 (7) - $0.25 로 긴 회의록도 완벽 요약! 음성 분할(ffmpeg)부터 AI 분석/전송까지 자동화

안녕하세요! 오늘은 n8n을 활용한 업무 자동화 중에서도 난이도가 높지만 만족도는 최상인 'AI 회의록 비서'의 끝판왕 버전을 소개합니다.
단순히 짧은 음성 파일을 변환하는 수준을 넘어, 1시간 이상의 긴 회의 파일도 안정적으로 처리하는 구조입니다. 제가 실제로 사용하는 n8n 세팅값을 그대로 공개하니 끝까지 따라와 보세요!
1. 왜 '음성 분할(ffmpeg)' 과정이 필요한가요?
OpenAI의 Transcribe API는 한 번에 처리할 수 있는 파일 용량에 제한(보통 25MB)이 있습니다. 따라서 30분이 넘어가는 고음질 회의 파일은 에러가 나기 쉽습니다.
제 워크플로우의 핵심은 Execute Command 노드를 통해 서버 내에서 ffmpeg로 파일을 20분 단위로 자동 절단하여 AI에게 전달하는 것입니다. 이 과정을 거쳐야 끊김 없는 전사(Transcription)가 가능합니다.
2. 전체 워크플로우 설계도 (Full Workflow)

- Google Drive Trigger: 회의록 폴더를 1분마다 감시



- Download & Split: 파일을 다운로드 후 ffmpeg로 1200초씩 분할 처리
다운로드 하고, 워크스페이스 설정하실때
보통 n8n 을 도커 컨테이너 안에 설정하기 때문에 컨테이너 안에 폴더를 미리 만드셔야합니다.

- execute command 노드 설정
ID="{{ $execution.id }}"
# 작업할 폴더입니다.
WORK_DIR="/home/node/.n8n-files"
# 현재 실행에서 Google Drive 다운로드 바이너리를 찾습니다.
BIN_DIR="/home/node/.n8n/binaryData/workflows/7wr0FLcFdhngEWjK/executions/${ID}/binary_data"
IN="${WORK_DIR}/input_${ID}.bin"
OUT_PREFIX="${WORK_DIR}/chunk_${ID}_"
rm -f "$IN" "${WORK_DIR}"/chunk_${ID}_*.mp3
BIN_FILE=$(find "$BIN_DIR" -type f ! -name "*.metadata" | head -n 1)
if [ -z "$BIN_FILE" ]; then
echo "No binary file found in $BIN_DIR" >&2
exit 1
fi
cp "$BIN_FILE" "$IN"
# 25MB 제한을 피하기 위해 20분 단위 mp3 청크로 변환합니다.
ffmpeg -y -i "$IN" -vn -ac 1 -ar 16000 -b:a 32k -f segment -segment_time 1200 -reset_timestamps 1 "${OUT_PREFIX}%03d.mp3"
ls -lh "${WORK_DIR}"/chunk_${ID}_*.mp3
const fs = require('fs');
const id = $execution.id;
const dir = '/home/node/.n8n-files';
// Execute Command에서 생성한 현재 실행의 청크 파일만 가져옵니다.
const names = fs.readdirSync(dir)
.filter((name) => name.startsWith(`chunk_${id}_`) && name.endsWith('.mp3'))
.sort();
if (names.length === 0) {
throw new Error(`No ffmpeg chunks found for execution ${id}`);
}
return names.map((name, index) => ({
json: {
index,
path: `${dir}/${name}`,
fileName: name,
},
}));
- Chunk Processing: 분할된 조각 파일들을 리스트업하여 순차적으로 읽기


- OpenAI Transcribe: 각 조각을 한국어(ko)로 텍스트 변환(STT)


- Combine & Summary: 조각난 텍스트를 하나로 병합

- Code - Combine Transcript 노드 설정
const items = $input.all();
const parts = items
.map((item, index) => {
const text = item.json.text || item.json.transcript || '';
// 청크별 전사 결과를 순서대로 합치기 위해 Part 번호를 붙입니다.
return `[Part ${index + 1}]\n${text}`;
})
.filter((part) => part.trim().length > 0);
return [{
json: {
// Basic LLM Chain에서 사용할 전체 전사문입니다.
transcript: parts.join('\n\n'),
partCount: parts.length,
},
}];
- Formatting: gpt-5.4-mini 모델로 회의록 작성 및 요약 , 마크다운 양식에 맞춰 회의록 생성 및 파일화


- 아래는 LLM 프롬프트 입니다. 자기가 원하는대로 커스텀 해보세요.
너는 전문 회의록 작성자다.
아래 전사문을 읽고, 반드시 완성된 한국어 회의록을 작성해라.
빈칸, 예시 문장, placeholder를 남기지 마라.
아래 양식을 그대로 복사하지 말고, 각 항목을 전사문 내용으로 채워라.
전사문:
{{ $json.transcript }}
출력은 반드시 아래 마크다운 형식으로만 작성해라.
# 회의록
## 1. 회의 개요
- 일시: 전사문에서 확인되면 작성하고, 없으면 미상
- 참석자: 전사문에서 확인되면 작성하고, 없으면 미상
- 주제: 회의의 핵심 주제를 한 문장으로 작성
## 2. 3줄 요약
- 회의에서 가장 중요한 내용을 한 문장으로 요약
- 두 번째로 중요한 논의나 결정 내용을 한 문장으로 요약
- 후속 조치나 남은 이슈를 한 문장으로 요약
## 3. 핵심 논의 내용
### 안건 1
- 실제 논의된 내용을 구체적으로 작성
### 안건 2
- 실제 논의된 내용을 구체적으로 작성
## 4. 결정 사항
- 결정된 내용이 있으면 작성
- 결정된 내용이 없으면 "확인 필요"라고 작성
## 5. 액션 아이템
| 담당 | 할 일 | 기한 |
|---|---|---|
| 담당자가 확인되면 작성, 없으면 미상 | 해야 할 일을 구체적으로 작성 | 기한이 없으면 미상 |
## 6. 리스크 / 이슈
- 회의에서 언급된 문제, 우려, 막힌 부분을 작성
- 없으면 "확인 필요"라고 작성
## 7. 다음 회의 준비사항
- 다음에 확인하거나 준비해야 할 내용을 작성
- 없으면 "확인 필요"라고 작성
중요 규칙:
- 절대 빈칸으로 두지 마라.
- "내용 작성", "논의 내용", "핵심 내용 1" 같은 예시 문구를 그대로 출력하지 마라.
- 전사문에 없는 정보는 지어내지 말고 "미상" 또는 "확인 필요"라고 써라.
- 출력 앞뒤에 설명을 붙이지 마라.
- JSON으로 출력하지 마라.
- Multi-Notification: 구글 드라이브 업로드 + 텔레그램 + 지메일 동시 발송

- Create minute 노드 / 구글 드라이브 업로드 노드


- Gmail / 텔레그램 세팅


3. 노드별 상세 세팅 가이드 (Remind)
① Execute Command: 음성 커팅의 기술
ffmpeg 명령어를 사용하여 파일 손실 없이 자르는 구간입니다.
- Command: ffmpeg -y -i "${IN}" -vn -ac 1 -ar 16000 -b:a 32k -f segment -segment_time 1200 ...
- Point: 16000Hz로 리샘플링하여 용량을 줄이면서도 인식률은 유지하는 전략입니다.
② Basic LLM Chain: 빈칸 없는 완벽 요약
AI에게 단순히 요약해달라고 하면 대충 대답할 때가 많죠? 제 프롬프트에는 강력한 규칙을 부여했습니다.
- Prompt: "빈칸이나 예시 문장을 남기지 마라", "전사문에 없는 정보는 지어내지 말고 '미상'으로 표기해라"
- Output Format: 회의 개요, 3줄 요약, 핵심 논의, 결정 사항, 액션 아이템(담당/할일/기한) 등 7개 섹션 강제
③ Prepare Notifications: 조건부 알림 생성
Code 노드를 활용해 텔레그램과 이메일에 보낼 메시지를 다듬습니다.
- 기능: 마크다운 본문에서 3줄 요약만 따로 추출하여 메시지 상단에 배치합니다.
- 결과: 스마트폰 알림창만 봐도 회의의 핵심을 바로 알 수 있습니다.
4. 이 워크플로우의 실제 활용 결과
- Gmail 전송: [작성된 메일] 으로 정식 회의록 파일이 첨부되어 아카이빙됩니다.
- 텔레그램 알림: [텔레그램ID] 채팅방으로 드라이브 링크와 함께 요약본이 도착합니다.
텔레그램 뿐만 아니라 , Slack(슬랙) , Teams(팀즈) 등 다른 메신저도 가능합니다. - 드라이브 보관: 회의록 요약 폴더에 날짜별로 .md 파일이 자동 저장됩니다.
5. Workflow 비용
1시간 짜리 녹음 내용을 워크플로우 진행하였을때 약 0.25 달러 사용합니다.
시간당 300 ~ 400 원 입니다.
이거 분명히 생산성 있는게 , 회의록 작성에 2시간 이상씩 걸립니다.
매일 1회 , 5일 , 4주 진행하면 20 * 400원 , 1만원이 안하는 금액으로 빠르게 회의록을 작성합니다.


6. 마치며



n8n은 단순한 연결 도구를 넘어, ffmpeg나 JavaScript 코드를 결합할 때 진정한 위력을 발휘합니다.
이번 설정은 엔지니어인 제가 실무 미팅에서 발생하는 회의록을 작성하는 시간을 줄이기 위해 직접 커스텀한 결과물입니다.
여러분의 업무 시간은 얼마나 줄어드셨나요? 설정 과정에서 궁금한 점이나 에러가 발생한다면 댓글/메일로 남겨주세요!
'n8n > 실전' 카테고리의 다른 글
| [n8n] 실전 (6) - 구글 캘린더 일정 요약 알림 만들기 (업무 자동화 입문) (0) | 2026.04.26 |
|---|---|
| [n8n] 실전 (5) - 쏟아지는 업무 메일, AI가 3줄 요약해서 텔레그램으로 쏴준다! (Gmail + DeepSeek) (0) | 2026.02.18 |
| [n8n] 실전 (4) - 개발자의 주식 치트키: DeepSeek & RSS.app으로 'AI 여의도 애널리스트' 만들기 (0) | 2026.02.01 |
| [n8n] 실전 (3) - RSS 를 이용한 뉴스 수집 및 텔레그램 전송 (1) | 2026.01.24 |
| [n8n] 실전 (2) - 환율 떨어지면 알림! 텔레그램 알림 봇 만들기 (0) | 2026.01.18 |