
WorldCupVoice라는 OSS가 흥미로워서 구조를 정리해 보았습니다
요약
실시간 라이브 영상을 시청하며 스포츠 중계를 수행하는 오픈소스 프로젝트 WorldCupVoice의 구조를 분석합니다. Next.js, FastAPI, OpenAI, RTC 기술을 결합하여 실시간 영상 샘플링부터 음성 합성까지 이어지는 파이프라인을 구축했습니다.
핵심 포인트
- 실시간 영상 프레임을 샘플링하여 AI가 중계문을 생성하는 구조
- 라이브 중계의 정확도를 높이기 위한 명확한 프롬프트 제약 사항 적용
- 비용 절감을 위한 시청자 기반 자동 정지(Heartbeat) 설계
- 시각 장애인을 위한 공간 정보 전달 등 확장 가능성 제시
최근, WorldCupVoice라는 흥미로운 OSS를 발견했습니다.
이것은 제 프로젝트가 아니라, 제작자는 zicojiao 님입니다.
README와 공개 코드를 읽고, "이것은 상당히 흥미로운 구성이구나"라고 생각되어 정리해 보겠습니다.
우선 데모 영상을 보는 것이 가장 빠릅니다. AI가 시청자와 동일한 라이브 영상을 보면서 중계하는 구성으로 되어 있습니다.

프로젝트는 여기 있습니다.
- GitHub: https://github.com/zicojiao/worldcupvoice
- Reddit: https://www.reddit.com/r/OpenAI/comments/1udx8it/i_tried_making_an_ai_world_cup_commentator_it/
이 프로젝트의 포인트는, AI가 나중에 경기 내용을 요약하는 것이 아니라, RTC 채널 상의 라이브 영상을 보고 중계한다는 점입니다.
-
프론트엔드 (Frontend): Next.js
-
백엔드 (Backend): FastAPI
-
영상 입력 (Video Input): OBS / RTMP
-
송출 변환 (Streaming Conversion): Agora Media Gateway
-
중계 생성 (Commentary Generation): OpenAI
-
음성화 (Voice Synthesis): OpenAI TTS / ElevenLabs / Fish Audio
-
OBS 등으로부터 RTMP로 영상을 보냄
-
Agora Media Gateway로 RTC 채널에 흘려보냄
-
백엔드가 동일한 채널의 영상을 구독함
-
일정 간격으로 프레임을 샘플링(Sampling)함
-
OpenAI에 중계문을 작성하게 함
-
TTS로 음성화함
-
해당 음성을 RTC에 publish 함
README나 코드를 보면서 특히 흥미로웠던 점은, 이미지 설명이 아니라 중계에 가깝게 만들기 위한 제약 사항이 상당히 명확하다는 것이었습니다.
예를 들어, 다음과 같은 방침입니다.
- live commentator로서 말하기
- 보이지 않는 이벤트는 말하지 않기
- 선수 이름은 시각적 근거가 있을 때만 사용하기
- 읽어낼 수 없는 장면은
NO_CALL을 반환하기
또한, 라이브 계열에서는 비용 제어도 중요하지만, 이 프로젝트에서는 Start AI / Stop AI, viewer heartbeat, hard session TTL을 넣어, 시청자가 없을 때는 자동으로 정지하도록 설계되어 있습니다.
이러한 부분은 "데모로 끝내지 않기" 위한 설계로서 상당히 참고가 될 것 같았습니다.
개인적으로는 스포츠 중계의 재미에 더해, 시각 장애가 있는 시청자를 위해 공간 정보를 풍부하게 전달하는 방향으로도 확장할 수 있을 것 같다고 느꼈습니다.
저는 제작자가 아니므로 잘못 읽은 부분이 있다면 꼭 정정해 주시기 바랍니다만, 실시간 영상과 생성 AI (Generative AI)를 연결하는 구성 사례로서 상당히 좋은 OSS라고 생각했습니다.
다시 한번 말씀드리지만, 제작자는 zicojiao 님입니다. 흥미로운 프로젝트였기에 공유했습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기