<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>TTS on Physical AI 드림팀</title><link>https://ditis3g.github.io/tags/tts/</link><description>Recent content in TTS on Physical AI 드림팀</description><generator>Hugo -- gohugo.io</generator><language>ko</language><lastBuildDate>Thu, 02 Jul 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://ditis3g.github.io/tags/tts/index.xml" rel="self" type="application/rss+xml"/><item><title>대본만 쓰면 강의 영상이 나온다 — 버튜버 자동 제작 파이프라인 구축기</title><link>https://ditis3g.github.io/posts/2026-07-02-vtuber-lecture-automation/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0900</pubDate><guid>https://ditis3g.github.io/posts/2026-07-02-vtuber-lecture-automation/</guid><description>&lt;h2 id="무엇을-만들었나"&gt;무엇을 만들었나
&lt;/h2&gt;&lt;p&gt;블로그 1장 &amp;ldquo;AI가 화면 밖으로 나왔다 — 피지컬 AI 입문 가이드&amp;quot;를 10분짜리 유튜브 강의 영상으로 만들었다. 목표는 분명했다. &lt;strong&gt;사람이 카메라 앞에서 연기하지도, 녹화 버튼을 누르지도 않는 것.&lt;/strong&gt; 대본을 쓰면 AI 음성 합성 → 아바타 자동 립싱크 → 자동 녹화까지 한 번에 이어지도록 배선했고, 사용한 도구가 전부 무료라 총비용은 0원이었다.&lt;/p&gt;
&lt;p&gt;전체 흐름은 다음과 같다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;블로그 글 → 구어체 대본 (Claude 작성)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → Edge TTS로 mp3 생성 (tts.py)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → 음성 내장 HTML 슬라이드, 타임스탬프 자동 전환 (slides.html)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → OBS 재생 음성을 가상 오디오 케이블로 VMagicMirror에 전달 → 아바타 립싱크
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; → OBS WebSocket API로 녹화 시작/종료 자동화 (record.py)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="무료-도구로-짠-파이프라인"&gt;무료 도구로 짠 파이프라인
&lt;/h2&gt;&lt;p&gt;파이프라인을 구성하는 도구는 모두 무료이거나 오픈소스다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VRoid Studio&lt;/strong&gt; (Pixiv): 슬라이더 조작만으로 3D 아바타를 만들어 VRM 파일로 내보낸다. 샘플 모델로 시작해도 충분하며, 내보낼 때는 호환성이 가장 좋은 VRM 0.0 형식을 쓴다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VMagicMirror&lt;/strong&gt; (MIT 라이선스): VRM 아바타를 띄우고 마이크 입력만으로 립싱크한다. 웹캠 없이 쓰는 것을 전제로 만들어져 숨쉬기·눈 깜빡임 같은 대기 모션이 자연스럽고, 그래서 &amp;ldquo;AITuber&amp;rdquo; 용도에 잘 맞는다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VB-Audio Cable&lt;/strong&gt; (도네이션웨어): 가상 오디오 케이블. 재생 소리를 가상 마이크(CABLE Output)로 흘려보내, mp3를 마이크 입력인 것처럼 넣어 준다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;edge-tts&lt;/strong&gt; (파이썬 패키지): 마이크로소프트 Edge의 한국어 TTS를 무료로 쓴다. &lt;code&gt;ko-KR-SunHiNeural&lt;/code&gt; 음성으로, 10분 분량 대본이 몇십 초 만에 mp3가 된다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OBS Studio&lt;/strong&gt;: 배경·슬라이드·아바타를 합성하고 녹화한다. WebSocket 서버를 켜면 파이썬으로 원격 제어할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 구조에서 가장 중요한 건 &lt;strong&gt;소리 배선&lt;/strong&gt;이다. mp3 재생음을 아바타의 &amp;ldquo;마이크 입력&amp;quot;으로 착각하게 만들어야 립싱크가 걸리기 때문이다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;OBS &lt;code&gt;설정 → 오디오 → 고급 → 모니터링 장치&lt;/code&gt;를 &lt;strong&gt;CABLE Input&lt;/strong&gt;으로.&lt;/li&gt;
&lt;li&gt;음성 소스(슬라이드 브라우저 소스)의 &lt;code&gt;고급 오디오 속성 → 모니터링&lt;/code&gt;을 **&amp;ldquo;모니터링과 출력&amp;rdquo;**으로.&lt;/li&gt;
&lt;li&gt;VMagicMirror &lt;code&gt;스트리밍 탭 → 립싱크&lt;/code&gt; 마이크를 &lt;strong&gt;CABLE Output&lt;/strong&gt;으로.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;정리하면 소리는 이렇게 흐른다. OBS가 mp3를 재생 → CABLE Input → CABLE Output → VMagicMirror가 마이크 입력으로 인식 → 립싱크. 같은 소리가 녹화 트랙에도 그대로 들어간다.&lt;/p&gt;
&lt;h2 id="슬라이드-자동-전환과-자동-녹화"&gt;슬라이드 자동 전환과 자동 녹화
&lt;/h2&gt;&lt;p&gt;슬라이드는 PPT가 아니라 &lt;strong&gt;HTML 한 파일&lt;/strong&gt;로 만들었다. 1920×1080 고정, 12장짜리이고 OBS 브라우저 소스로 바로 로드한다. HTML 안에 &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt;로 강의 mp3를 내장하고, JS가 &lt;code&gt;audio.currentTime&lt;/code&gt;을 지켜보다가 미리 계산해 둔 타임스탬프에 슬라이드를 자동으로 넘긴다. 사람이 큐시트를 보며 넘길 필요가 없다.&lt;/p&gt;
&lt;p&gt;전환 시각은 섹션별 mp3 실측 길이에 대본 글자 수 비율을 얹어 계산했다. TTS 발화 속도가 균일해서 글자 비율만으로도 추정이 꽤 정확했다. 아바타가 우측 하단에 들어가므로 슬라이드 레이아웃에서는 그 자리를 비워 뒀다(padding-right 460px).&lt;/p&gt;
&lt;p&gt;녹화는 &lt;code&gt;record.py&lt;/code&gt;가 맡는다. OBS 28버전 이상은 WebSocket 서버가 내장돼 있어(&lt;code&gt;도구 → WebSocket 서버 설정 → 활성화&lt;/code&gt;), 파이썬 &lt;code&gt;obsws-python&lt;/code&gt; 패키지로 붙어 &lt;strong&gt;녹화 시작 → 브라우저 소스 새로고침(&lt;code&gt;refreshnocache&lt;/code&gt;로 페이지를 리로드해 음성을 처음부터 재생) → 재생 길이만큼 대기 → 녹화 종료&lt;/strong&gt;를 순서대로 실행한다. 결과적으로 명령 한 줄이면 10분 45초짜리 1080p60 영상이 나온다.&lt;/p&gt;
&lt;h2 id="막혔던-지점들"&gt;막혔던 지점들
&lt;/h2&gt;&lt;p&gt;자동화 과정에서 걸렸던 문제와 해결책을 남겨 둔다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;아바타 배경이 검게 찍힘&lt;/strong&gt;: VMagicMirror 배경 투명화를 켰을 때 OBS 게임 캡처의 &amp;ldquo;투명도 허용&amp;quot;을 체크하지 않으면 투명 영역이 검정으로 나온다. 게임 캡처 속성에서 체크 하나로 해결.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;얼굴이 잘림&lt;/strong&gt;: VMM 카메라를 &amp;ldquo;프리 카메라 모드&amp;quot;로 두고 아바타 창에서 휠(줌)·휠 드래그(이동)·우클릭 드래그(회전)로 구도를 잡는다. 잡은 구도는 퀵 세이브 슬롯에 저장할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;10분 맞추기&lt;/strong&gt;: 첫 대본이 11분 10초로 나와, 중복 문장을 덜어 10분 39초로 맞췄다. 한국어 TTS 기본 속도 기준 10분은 공백 포함 4,000자 안팎이다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TTS 오독&lt;/strong&gt;: &amp;ldquo;유니트리 G1&amp;quot;을 &amp;ldquo;지원&amp;quot;으로 읽는 식의 오독이 있어, 외래어·기호는 대본 단계에서 미리 한글로 풀어썼다(챗지피티, 러로봇, 아이작 랩 등).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;조작용 UI가 화면에 찍힘&lt;/strong&gt;: 슬라이드 카운터(HUD)가 녹화에 들어가서, 자동 재생 중에는 숨기도록 고쳤다. 녹화 화면에 들어가는 소스에 &amp;ldquo;조작용 표시&amp;quot;가 없는지 확인할 것.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;창을 가려도 되나&lt;/strong&gt;: OBS 게임 캡처는 GPU 렌더링을 직접 후킹하므로 다른 창에 가려져도 캡처된다. 다만 &lt;strong&gt;최소화는 금지&lt;/strong&gt;(렌더링이 멈춘다). OBS 자체는 최소화해도 녹화가 계속된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;한 가지 한계도 분명하다. 립싱크·표정·대기 모션까지는 자동이지만, 손짓이나 판서 같은 큰 제스처는 안 된다. 다만 강의 영상은 슬라이드 하이라이트로 대체할 수 있어 실용상 문제는 없었다. 이제 다음 장부터는 &amp;ldquo;대본 작성 → TTS → 슬라이드 생성 → 자동 녹화&amp;quot;가 명령 몇 번으로 끝난다. 유튜브 강의 채널을 글 쓰는 속도로 운영할 수 있는 구조가 된 셈이다.&lt;/p&gt;
&lt;h2 id="한-줄-정리"&gt;한 줄 정리
&lt;/h2&gt;&lt;p&gt;대본만 쓰면 TTS·아바타 립싱크·슬라이드 전환·녹화까지 이어지는 무료 파이프라인을 짜서, 유튜브 강의 영상을 글 쓰는 속도로 찍어낼 수 있게 됐다.&lt;/p&gt;</description></item><item><title>블로그 글을 숏폼 영상으로 자동 변환해서 유튜브에 올리기까지</title><link>https://ditis3g.github.io/posts/2026-07-02-blog-to-shorts/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0900</pubDate><guid>https://ditis3g.github.io/posts/2026-07-02-blog-to-shorts/</guid><description>&lt;p&gt;블로그에 정리해 둔 글을 그냥 두기 아까워서, &lt;strong&gt;글 하나를 60초짜리 세로형 교육용 숏폼 영상으로 만들고 유튜브에 자동으로 올리는 파이프라인&lt;/strong&gt;을 만들었다. 목표는 세 가지였다. (1) 글을 어떻게 영상 구성으로 바꿀 것인가, (2) 그걸 자동으로 할 수 있는가, (3) 실제 영상 파일로 인코딩해 저장·업로드까지 되는가. 결론부터 말하면 셋 다 된다. 비전공자도 따라올 수 있게, 개념과 내가 헤맨 지점 위주로 정리한다.&lt;/p&gt;
&lt;h2 id="전체-그림-먼저"&gt;전체 그림 먼저
&lt;/h2&gt;&lt;p&gt;파이프라인은 이렇게 흐른다. 각 단계는 뒤에서 하나씩 풀어 쓴다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;블로그 글(.md)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ ① 글을 &amp;#34;장면 대본&amp;#34;으로 압축 (AI가 요약)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;장면 JSON
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ ② 나레이션 음성 만들기 (TTS, 무료 한국어)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ ③ 장면 화면(이미지) 만들기 (HTML 또는 Pillow)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ ④ 이미지 + 음성 → 영상으로 합치기 (ffmpeg)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;숏폼 mp4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓ ⑤ 유튜브 업로드 (YouTube API)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;유튜브 Shorts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;이 전체를 매일 일정 시간에 자동으로 도는 스케줄로 걸어두는 게 마지막 단계다.&lt;/p&gt;
&lt;h2 id="준비물-무료-도구-네-가지"&gt;준비물: 무료 도구 네 가지
&lt;/h2&gt;&lt;p&gt;돈 드는 건 없다. 전부 무료다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python&lt;/strong&gt; — 파이프라인을 묶는 접착제 역할.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ffmpeg&lt;/strong&gt; — 이미지와 음성을 합쳐 mp4로 &lt;strong&gt;인코딩&lt;/strong&gt;(영상 파일로 만드는 것)하는 도구. 영상 자동화의 핵심.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;edge-tts&lt;/strong&gt; — 글자를 사람 목소리로 읽어주는 &lt;strong&gt;TTS&lt;/strong&gt;(Text To Speech). Microsoft의 무료 한국어 음성을 API 키 없이 쓸 수 있다. &lt;code&gt;ko-KR-SunHiNeural&lt;/code&gt;(여성) 같은 목소리가 꽤 자연스럽다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;화면 만드는 도구&lt;/strong&gt; — 두 가지를 다 만들어 비교했다. 뒤에서 설명한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Windows라면 ffmpeg는 &lt;code&gt;winget install Gyan.FFmpeg&lt;/code&gt;, 나머지는 &lt;code&gt;pip install&lt;/code&gt;로 끝난다.&lt;/p&gt;
&lt;h2 id="-글을-장면-대본으로-쪼개기"&gt;① 글을 &amp;ldquo;장면 대본&amp;quot;으로 쪼개기
&lt;/h2&gt;&lt;p&gt;블로그 글은 길다. 60초 숏폼에는 한국어로 대략 320~380자밖에 못 담는다. 그래서 글을 통째로 넣을 수 없고 &lt;strong&gt;핵심만 압축&lt;/strong&gt;해야 하는데, 이 요약·재구성이야말로 AI(LLM)가 제일 잘하는 일이다.&lt;/p&gt;
&lt;p&gt;글을 다음처럼 &lt;strong&gt;5개 장면&lt;/strong&gt;으로 나눈 대본(JSON 형식)으로 바꾼다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;후킹&lt;/strong&gt; (0&lt;del&gt;3초): 강한 한 줄로 시선 잡기 (&amp;ldquo;최신 AI 모델, 외우지 마세요&amp;rdquo;)
2&lt;/del&gt;4. &lt;strong&gt;핵심 카드&lt;/strong&gt;: 한 장에 한 개념. 짧은 문장 3개 + 나레이션&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;마무리&lt;/strong&gt;: 결론 한 줄 + &amp;ldquo;전체 글은 블로그에서&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;각 장면에는 화면에 띄울 글자와, 성우가 읽을 나레이션이 따로 들어간다. 블로그 글의 제목·소제목·표가 자연스럽게 후킹·핵심 카드·계보 도표로 대응된다는 점이 좋았다.&lt;/p&gt;
&lt;p&gt;한 가지 팁: 나레이션에서 영어 약어는 한글 발음으로 적어야 TTS가 제대로 읽는다. &lt;code&gt;VLA&lt;/code&gt;는 &amp;ldquo;브이엘에이&amp;rdquo;, &lt;code&gt;AI&lt;/code&gt;는 &amp;ldquo;에이아이&amp;quot;처럼. 숫자도 &amp;ldquo;96%&amp;ldquo;보다 &amp;ldquo;구십육 퍼센트&amp;quot;로 적으면 자연스럽다.&lt;/p&gt;
&lt;h2 id="-나레이션-음성-만들기"&gt;② 나레이션 음성 만들기
&lt;/h2&gt;&lt;p&gt;장면별 나레이션 문장을 edge-tts에 넣으면 mp3가 나온다. 명령 한 줄이면 된다. 이 음성의 &lt;strong&gt;길이&lt;/strong&gt;를 재서, 나중에 그 장면 화면을 그 시간만큼 보여주면 화면과 목소리가 자동으로 맞는다.&lt;/p&gt;
&lt;h2 id="-화면-만들기-두-가지-방법"&gt;③ 화면 만들기: 두 가지 방법
&lt;/h2&gt;&lt;p&gt;세로형(9:16, 유튜브 Shorts 규격)의 카드 이미지를 장면마다 만든다. 두 방식을 다 만들어 비교했다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A안 — HTML/CSS로 만들고 캡처&lt;/strong&gt;: 웹페이지처럼 예쁘게 꾸민 뒤 브라우저로 스크린샷을 찍는다. 한글 타이포와 표·도표가 훨씬 깔끔하다. 교육용에 유리해서 이걸 채택했다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B안 — Pillow(파이썬 그림 라이브러리)로 직접 그리기&lt;/strong&gt;: 브라우저가 필요 없고 가볍다. 담백한 스타일.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;여기서 초보가 꼭 만나는 문제 하나. &lt;strong&gt;자막이 화면 폭을 넘어 줄이 깨진다.&lt;/strong&gt; 글자 길이가 글마다 다르니 고정 폰트 크기로는 안 된다. 그래서 &amp;ldquo;한 줄에 들어갈 때까지 폰트 크기를 자동으로 줄이는&amp;rdquo; 로직을 넣었다. 이러면 어떤 글이 와도 자막이 깔끔하게 한 줄로 맞는다.&lt;/p&gt;
&lt;h2 id="-영상으로-합치기-ffmpeg"&gt;④ 영상으로 합치기 (ffmpeg)
&lt;/h2&gt;&lt;p&gt;장면마다 &lt;code&gt;이미지 + 그 장면 음성&lt;/code&gt;을 붙여 짧은 클립을 만들고, 클립들을 순서대로 이어 붙이면 하나의 mp4가 된다. 페이드 인 같은 효과도 ffmpeg 옵션으로 넣을 수 있다. 60초 영상이 1~2MB로 가볍게 나온다.&lt;/p&gt;
&lt;h2 id="-유튜브-자동-업로드-여기가-진짜-삽질-구간"&gt;⑤ 유튜브 자동 업로드: 여기가 진짜 삽질 구간
&lt;/h2&gt;&lt;p&gt;영상 만드는 것보다 &lt;strong&gt;유튜브에 자동으로 올리는 인증 과정&lt;/strong&gt;이 훨씬 까다로웠다. 공식 방법은 &lt;strong&gt;YouTube Data API + OAuth 인증&lt;/strong&gt;이다. 초보가 순서대로 만나는 함정을 그대로 적어둔다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Google Cloud에서 API 사용 설정 + OAuth 클라이언트(데스크톱 앱) 만들기.&lt;/strong&gt; 다운로드한 인증 파일(&lt;code&gt;client_secret.json&lt;/code&gt;)이 &lt;code&gt;&amp;quot;installed&amp;quot;&lt;/code&gt;로 시작하면 데스크톱 앱(정상), &lt;code&gt;&amp;quot;web&amp;quot;&lt;/code&gt;이면 잘못 만든 것.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;앱 이름에 &amp;ldquo;Google&amp;rdquo;·&amp;ldquo;YouTube&amp;rdquo; 같은 상표명을 넣으면 안 된다.&lt;/strong&gt; 정책상 거부된다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;프로덕션&amp;quot;으로 올리면 오히려 막힌다.&lt;/strong&gt; 유튜브 업로드는 민감한 권한이라 프로덕션 상태에선 구글 정식 심사를 통과해야 한다. 개인용이면 &lt;strong&gt;&amp;ldquo;테스트&amp;rdquo; 상태로 두고 내 계정을 테스트 사용자로 추가&lt;/strong&gt;하는 게 답이다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;확인하지 않은 앱&amp;rdquo; 경고는 차단이 아니다.&lt;/strong&gt; 테스트 모드에선 이 경고가 정상이다. &lt;code&gt;고급 → (앱이름)(으)로 이동&lt;/code&gt;을 눌러 통과하면 된다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;youtubeSignupRequired&lt;/code&gt; 오류 = 유튜브 채널이 없다는 뜻.&lt;/strong&gt; 인증은 됐는데 그 구글 계정에 채널이 없으면 올릴 곳이 없다. youtube.com에서 채널을 먼저 만들면 해결된다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;테스트 모드는 토큰이 약 7일마다 만료된다.&lt;/strong&gt; 자동화가 일주일에 한 번쯤 끊기므로, 주 1회 인증 명령을 한 번 다시 실행해 토큰을 갱신해 줘야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;참고로 무료 사용량은 하루 10,000 유닛이고 업로드 1건이 1,600 유닛이라, &lt;strong&gt;하루 약 6개까지&lt;/strong&gt; 올릴 수 있다. 매일 몇 개면 충분하다.&lt;/p&gt;
&lt;h2 id="매일-자동-실행-규칙을-정하다"&gt;매일 자동 실행: 규칙을 정하다
&lt;/h2&gt;&lt;p&gt;마지막으로 위 전체를 &lt;strong&gt;Windows 작업 스케줄러&lt;/strong&gt;에 매일 오후 3시로 걸었다. 규칙은 이렇게 정했다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;게시된 글만&lt;/strong&gt; 대상 (초안 제외).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;블로그 메이킹&amp;rdquo; 카테고리는 제외&lt;/strong&gt; (지금 이 글처럼 블로그 만들기 자체를 다룬 글은 영상으로 안 만든다).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;오래된 글부터 순서대로 하루 2개&lt;/strong&gt;씩 처리. 이미 처리한 글은 기록해 두고 다시 만들지 않는다.&lt;/li&gt;
&lt;li&gt;밀린 글이 다 소진되면, 그다음부터는 새로 올라온 글을 자동으로 집어 처리한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="한-줄-정리"&gt;한 줄 정리
&lt;/h2&gt;&lt;p&gt;블로그 글을 숏폼으로 바꾸는 핵심은 &lt;strong&gt;&amp;ldquo;긴 글을 5개 장면으로 압축하는 AI 단계&amp;rdquo;&lt;/strong&gt; 와 &lt;strong&gt;&amp;ldquo;이미지+음성을 ffmpeg로 합치는 인코딩&amp;rdquo;&lt;/strong&gt; 이고, 진짜 난관은 영상 제작이 아니라 &lt;strong&gt;유튜브 OAuth 인증(테스트 모드·채널 생성·토큰 만료)&lt;/strong&gt; 이다. 이 셋만 넘으면 매일 자동으로 도는 숏폼 공장이 완성된다.&lt;/p&gt;
&lt;h2 id="실제-결과물--이-글이-이렇게-숏폼이-됐다"&gt;실제 결과물 — 이 글이 이렇게 숏폼이 됐다
&lt;/h2&gt;&lt;p&gt;아래 원본 글 하나가, 위에서 설명한 파이프라인을 거쳐 60초짜리 세로 영상으로 자동 변환됐다. 긴 글이 어떻게 5개 장면으로 압축됐는지 원본과 나란히 보면 감이 온다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;원본 글&lt;/strong&gt;: &lt;a class="link" href="https://ditis3g.github.io/posts/2026-07-01-study/" &gt;피지컬 AI, 최신 모델을 외우지 말고 &amp;lsquo;흐름&amp;rsquo;을 읽어라&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;결과 숏폼&lt;/strong&gt;: 이 파이프라인으로 처음 업로드한 영상 (아래)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="video-wrapper"&gt;
 &lt;iframe loading="lazy" 
 src="https://www.youtube.com/embed/LQcLLUg-Jew" 
 allowfullscreen 
 title="YouTube Video"
 &gt;
 &lt;/iframe&gt;
&lt;/div&gt;
</description></item></channel></rss>