로컬 AI를 무료 비디오 앱에 추가하는 방법 (API 키 필요 없음, PC에서 실행)
요약
본 글은 로컬 AI 모델을 활용하여 일반 텍스트를 비디오 스크립트로 자동 변환하는 무료 오픈 소스 Windows 앱 'AI Video Studio' 개발 과정을 공유합니다. 호스팅 서비스 없이 사용자 PC에서 Qwen3 4B 같은 작은 LLM과 llama.cpp를 사용하여, JSON 스키마 강제 지정 및 고정된 장면 수 설정을 통해 높은 신뢰도의 결과물을 얻는 방법을 다룹니다.
핵심 포인트
- 로컬 AI(Qwen3 4B)와 llama.cpp를 활용하여 API 키 없이 비디오 앱을 구현했습니다.
- 출력을 JSON 스키마로 강제하고 정확한 장면 수를 고정하는 것이 핵심입니다.
- 작은 모델의 성능 한계를 경험했으며, 예시 제공이 규칙보다 효과적이었습니다.
- 메모리 부족 등 실패 시 단순 문장 분할기로 돌아가는 '탈출구'를 마련해야 합니다.
저는 스크립트를 짧은 영상(스톡 푸티지, 신경 음성, 단어별 자막)으로 변환하는 무료 오픈 소스 Windows 앱인 AI Video Studio를 만들었습니다.
제가 계속 받았던 피드백은 스크립트 작성 과정이 가장 번거롭다는 것이었습니다. 모든 줄을 앱 자체의 Visual: / Voice: 형식에 맞춰야 했기 때문입니다. 그래서 저는 앱이 일반 텍스트로부터 스스로 스크립트를 작성하도록 만들고 싶었습니다.
가장 당연한 방법은 호스팅되는 AI 서비스를 호출하는 것입니다. 하지만 저는 그것을 원하지 않았습니다. 이 앱은 이미 무료 스톡 푸티지 키가 필요하며, 추가적인 키는 누군가가 첫 영상을 만들기 전에 포기하게 만드는 또 다른 이유가 될 수 있습니다. 저는 앱에 포함되어 사용자의 자체 컴퓨터에서 실행되는 AI를 원했습니다.
제가 배운 것은 다음과 같습니다.
설정 방법
- 모델: Qwen3 4B (4비트 GGUF 파일, 2.5 GB), Apache 2.0 라이선스.
- 런타임: llama.cpp의
llama-server(MIT 라이선스)를 앱에 번들링했습니다. - 전달 방식: 모델이 설치 프로그램에는 너무 크기 때문에, 설치 프로그램이 한 번 다운로드하고 SHA-256을 확인합니다. 이 파일은 설치 폴더 외부에 존재하므로 앱 업데이트 시 다시 다운로드할 필요가 없습니다.
앱은 별도의 프로세스로 llama-server를 시작하고 요청을 하나 보내고 즉시 종료합니다. 이는 비디오 렌더링에 메모리를 되돌려 받아야 하므로 중요합니다.
교훈 1: 작은 모델은 정말 작다
저는 동일한 텍스트로 세 가지 크기를 테스트했습니다.
| Model | Download | What happened |
|---|---|---|
| Qwen2.5 0.5B | 491 MB | 길이 무시하고 검색어가 있어야 할 곳에 전체 문장을 넣었습니다 |
| ... | ||
| 저는 작은 모델이 작동하기를 바랐습니다. 하지만 그렇지 않았습니다. 4B 모델이 작업을 수행할 수 있는 가장 작은 모델이었기 때문에, 이것을 사용했습니다. |
교훈 2: 단어 수를 요청하지 말고 구조를 고정하라
제 첫 번째 프롬프트는
- 출력을 JSON 스키마로 강제 지정:
visual(검색어)와voice(말하는 문장 하나)를 포함하는 장면(scene) 목록 형식으로. - 프롬프트와 스키마 모두에서 정확한 장면 수 설정 (
minItems가maxItems와 같도록).
단어를 셀 수 없는 모델이라도 정확히 여덟 개의 짧은 문장을 쓰도록 만들 수 있습니다. 약 열 단어짜리 여덟 문장은 30초 분량의 비디오입니다.
Lesson 3: 예시를 보여주기
과거 사용자/어시스턴트 대화 형식으로 하나의 작동하는 예시(worked example)를 추가한 것이 어떤 추가 규칙보다 효과적이었습니다. 또한 모델이 문장을 복사하는 것을 막았는데, 이는 예시가 재작성 과정을 보여주기 때문입니다.
이것은 부작용을 가지고 있습니다: 모델이 예시의 크기를 모방합니다. 이것이 고정된 장면 수(fixed scene count)가 필요한 또 다른 이유입니다.
Lesson 4: 항상 탈출구를 마련하기
로컬 모델은 일반적인 방식으로 실패할 수 있습니다: 메모리 부족, 느린 PC, 이상한 답변 등. 따라서 모든 실패는 AI 없이 단순한 문장 분할기(plain sentence splitter)로 되돌아가고, 앱이 사용자에게 그 이유를 알려줍니다. 아무도 완전히 빈손으로 끝나지 않습니다.
또한 시작하기 전에 3분 타임아웃과 무료 메모리 확인 기능을 추가했습니다.
Lesson 5: GPU는 스위치 하나 값어치가 있다
llama.cpp에는 NVIDIA, AMD, Intel 카드에서 작동하는 Vulkan 빌드가 있으며 단지 몇 메가바이트만 추가됩니다. 저는 이 버전으로 교체하고 기본적으로 꺼져 있는(off) 하나의 스위치를 추가했습니다.
RTX 4060의 경우, 동일한 스크립트는 카드에서 약 3초가 걸리고 프로세서에서는 약 23초가 걸립니다.
하나의 세부 사항: 저는 항상 GPU 레이어 수를 명시적으로 전달하며, 여기에는 0도 포함됩니다. 그렇지 않으면 런타임이 스스로 카드를 사용하기로 결정할 수 있고,
이 앱은 무료 오픈 소스입니다:
[https://github.com/bodrumundenizi-beep/free-ai-video-generator]
이를 사용해 만든 30초짜리 비디오입니다:
[
이러한 제약 조건이 있는 리라이팅(rewriting)에 더 좋은 소형 모델을 알고 계신다면, 알려주시면 감사하겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기