[개인프로젝트 ] 유튜브 채널 영상 자동 업로드 : 환경셋팅 및 기본구성
지난번에 유튜브 채널을 오픈한 이후로 (나는 유튜브 채널이 있다!)
이런저런 일들로 (이직준비, 알고리즘 공부도 해야하고, 회사 내 프로젝트도 많았고..)
꾸준히 올릴 방법이 뭐가 있을까 고민하다가
유튜브에 자동으로 영상을 제작하고 업로드 하는 시스템을 만들어야 겠다고 생각했다.
바로 실행에 옮기기! (난 은근 행동파니까..)
우선 ChatGPT와 내 아이디어를 공유하고 대략적인 가능성과 구성방안을 정리했다.
전체 구현과정의 개요
1. 음악 생성
AI 음악 생성 툴에서 제공하는 API를 사용:
- 예: Boomy, AIVA, Soundraw 등의 API를 활용.
- 대안: 저작권 없는 음원을 사용하는 경우 랜덤으로 파일을 조합하여 믹싱 가능.
- Python에서 음악 생성은 API 호출이나 오디오 라이브러리(예: pydub)로 가능.
2. 배경 영상 다운로드
자연 배경 영상을 가져올 무료 API 사용:
- 예: Pexels API (무료 자연 영상 제공).
- pexels_api 라이브러리를 통해 원하는 자연 배경을 다운로드.
3. 음악과 영상 결합
- moviepy 라이브러리 사용:
- 오디오와 비디오를 결합.
- 영상 길이를 1시간으로 조정.
4. 자동화 배치 작업
- schedule 또는 APScheduler 같은 Python 스케줄링 라이브러리로 매일 정해진 시간에 실행.
- 크론잡(Cron job) 설정을 통해 서버에서 자동으로 실행 가능.
- 나는 윈도우 스케줄러를 사용하기로 함.
샘플 코드 구조
import os
import random
import requests
from moviepy.editor import VideoFileClip, AudioFileClip, concatenate_videoclips
import schedule
import time
# 1. AI 음악 생성 (예: Boomy, AIVA API 호출)
def generate_music():
# 음악 생성 API 호출 코드 (예제용)
music_file = "generated_music.mp3"
# 실제 API 호출 코드 작성 필요
print("음악 생성 완료:", music_file)
return music_file
# 2. 자연 배경 영상 다운로드
def download_video():
api_key = "PEXELS_API_KEY" # Pexels API 키
headers = {"Authorization": api_key}
url = "https://api.pexels.com/videos/search?query=nature&per_page=1"
response = requests.get(url, headers=headers).json()
video_url = response['videos'][0]['video_files'][0]['link']
video_file = "background_video.mp4"
with open(video_file, "wb") as f:
f.write(requests.get(video_url).content)
print("영상 다운로드 완료:", video_file)
return video_file
# 3. 음악과 영상 결합
def create_sleep_video():
music = generate_music()
video = download_video()
video_clip = VideoFileClip(video).loop(duration=3600) # 1시간 반복
audio_clip = AudioFileClip(music)
final_clip = video_clip.set_audio(audio_clip)
output_file = "sleep_video.mp4"
final_clip.write_videofile(output_file, codec="libx264", audio_codec="aac")
print("최종 영상 생성 완료:", output_file)
# 4. 스케줄링
def schedule_task():
schedule.every().day.at("22:00").do(create_sleep_video) # 매일 22시에 실행
while True:
schedule.run_pending()
time.sleep(1)
if __name__ == "__main__":
schedule_task()
필요한 작업
- API 키 등록
- Pexels API 키: 여기에서 무료로 등록 가능.
- AI 음악 생성 툴 API: 해당 툴마다 제공 방식 확인.
- 서버 환경
- 이 코드가 실행될 서버가 필요하며, 서버에서 크론잡(Cron job) 설정하면 자동화 가능.
- 라이브러리 설치
확장 가능성을 염두하고 소스구성을 추가수정
- 매일 다른 테마(예: 비 오는 날, 숲속 소리)를 자동 생성.
- 동영상 업로드까지 포함한 유튜브 API 연동.
- 일 배치를 통해 수행 (윈도우 스케줄러 활용).
- AI 툴 활용으로 더욱 창의적인 음악 제작.
import os
import random
import requests
from datetime import datetime
from moviepy.editor import VideoFileClip, AudioFileClip
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
# API 키 설정
PEXELS_API_KEY = "PEXELS_API_KEY"
YOUTUBE_API_KEY = "YOUTUBE_API_KEY"
YOUTUBE_CLIENT_SECRET = "client_secret.json" # OAuth 파일 필요
# 테마별 음악/영상 설정
THEMES = [
{"name": "Rainy Day", "query": "rain", "audio": "rain_sound.mp3"},
{"name": "Forest Sounds", "query": "forest", "audio": "forest_sound.mp3"},
{"name": "Ocean Waves", "query": "ocean", "audio": "ocean_waves.mp3"},
{"name": "Crickets", "query": "crickets", "audio": "crickets.mp3"},
{"name": "Ambient Calm", "query": "calm", "audio": "ambient_music.mp3"},
]
# 테마 선택 로직
def get_today_theme():
day_index = datetime.now().day % len(THEMES)
return THEMES[day_index]
# 1. AI 음악 생성 (예제용으로 로컬 파일 사용)
def generate_music(theme):
# AIVA API 등 실제 음악 생성 로직 필요 시 추가
# 이 코드는 로컬에 미리 저장된 파일을 불러오는 방식으로 처리
audio_file = theme["audio"]
print(f"음악 생성 완료: {audio_file}")
return audio_file
# 2. 자연 배경 영상 다운로드
def download_video(theme):
headers = {"Authorization": PEXELS_API_KEY}
url = f"https://api.pexels.com/videos/search?query={theme['query']}&per_page=1"
response = requests.get(url, headers=headers).json()
video_url = response['videos'][0]['video_files'][0]['link']
video_file = f"{theme['name']}_background.mp4"
with open(video_file, "wb") as f:
f.write(requests.get(video_url).content)
print(f"영상 다운로드 완료: {video_file}")
return video_file
# 3. 음악과 영상 결합
def create_sleep_video():
theme = get_today_theme()
print(f"오늘의 테마: {theme['name']}")
music = generate_music(theme)
video = download_video(theme)
video_clip = VideoFileClip(video).loop(duration=3600) # 1시간 반복
audio_clip = AudioFileClip(music)
final_clip = video_clip.set_audio(audio_clip)
output_file = f"{theme['name']}_sleep_video.mp4"
final_clip.write_videofile(output_file, codec="libx264", audio_codec="aac")
print(f"최종 영상 생성 완료: {output_file}")
return output_file
# 4. 유튜브 업로드
def upload_to_youtube(video_file, theme):
youtube = build("youtube", "v3", developerKey=YOUTUBE_API_KEY)
request_body = {
"snippet": {
"title": f"1 Hour {theme['name']} Sleep Music",
"description": f"Relaxing {theme['name']} sounds to help you sleep.",
"tags": ["sleep music", "relaxation", theme["name"]],
"categoryId": "10", # 음악 카테고리
},
"status": {
"privacyStatus": "public",
},
}
media_file = MediaFileUpload(video_file)
response = youtube.videos().insert(
part="snippet,status",
body=request_body,
media_body=media_file
).execute()
print(f"유튜브 업로드 완료: {response['id']}")
# 메인 실행
def main():
video_file = create_sleep_video()
theme = get_today_theme()
upload_to_youtube(video_file, theme)
if __name__ == "__main__":
main()
주요 변경 사항 및 설명
- 윈도우 스케줄러
- 윈도우 스케줄러에서 실행되는걸 감안한 소스로 수정.
- .py 파일을 저장한 후, 작업 스케줄러에서 python path/to/script.py로 실행할 수 있도록 설정.
- API 호출
- Pexels API를 사용해 자연 배경 영상을 다운로드하도록 구현.
- 음악 파일은 예제에서는 로컬 파일을 참조했지만, 추후 여유가 생기면 (유로버전인) AIVA 같은 API와 연동해 직접 생성할 예정...!
- 테마 순환
- 테마는 날짜에 따라 순환하도록 구성. 매일 다른 테마가 자동으로 선택.
- 추후에 테마도 자동으로 구성이 늘어나는 방식 구현예정.
- 유튜브 업로드
- Google API를 활용해 동영상을 자동으로 업로드하도록 구현.
- API 키 설정 및 OAuth 인증 필요.
- YouTube API 문서 참고.
환경셋팅하기
자 그럼 대략 어떻게 짤지는 정리가 됐으니까 환경 셋팅을 해보자!
우선 파이썬으로 개발이 가능할꺼같아서 (지원하는 라이브러리가 많으니까)
백만년 만에 파이썬을 써보기로 했다.
내 윈도우 PC에 파이썬 및 개발툴부터 설치!
1. 파이썬 설치 , 2. 코드편집기 설치
[Python] 파이썬 환경설정 하기
1. Python 설치Python 공식 사이트로 이동. https://www.python.org/downloads/"Download Python" 버튼을 클릭해 최신 버전을 다운로드.설치 시 아래 옵션을 꼭 선택:"Add Python to PATH" (체크박스 반드시 체크)기본 설치
ironareum.tistory.com
이제 프로젝트에 관련 셋팅을 해보자!
3. 필요한 라이브러리 설치
- 명령 프롬프트를 열고, 아래 명령어를 입력:
moviepy, google-api-python-client, requests 설치
pip install moviepy google-api-python-client requests
각 패키지 별 역할 설명
1. MoviePy
- 설치 목적: 비디오와 오디오를 처리(편집)하기 위해 필요.
- 주요 기능:
- 동영상 합성, 오디오 추가/제거, 영상 자르기, 효과 추가.
- 프로젝트에서 수면 음악과 자연 영상을 합쳐서 동영상을 생성할 때 사용돼.
- 예: 위의 코드에서 영상과 음악 파일을 합쳐 최종 동영상을 만드는 데 사용.
2. google-api-python-client
- 설치 목적: Google API를 호출하기 위해 필요.
- 주요 기능:
- Google의 다양한 API(YouTube API, Drive API 등)를 Python에서 쉽게 호출할 수 있도록 도와줌.
- 위 코드에서는 YouTube Data API를 사용해 동영상을 업로드하는 데 필요.
- 예:
- YouTube 채널에 자동으로 동영상을 업로드.
- 업로드한 동영상의 제목, 설명, 태그 등을 설정.
3. Requests
- 설치 목적: HTTP 요청(웹 요청)을 쉽게 보낼 수 있도록 도와줌.
- 주요 기능:
- 웹 서버와 통신(예: 데이터를 가져오거나 보내기).
- 위 코드에서는 Pexels API를 호출해 자연 배경 영상을 검색하고 다운로드하는 데 사용.
- 예:
- "숲속" 또는 "바다"라는 키워드로 검색해 영상 정보를 가져오는 작업.
- 영상 파일을 다운로드.
왜 이 라이브러리가 필요한가?
- MoviePy: 동영상 생성 및 편집.
- google-api-python-client: 동영상 업로드 자동화.
- Requests: 자연 영상 데이터를 가져오기(Pexels API).
설치 후 확인 방법
설치가 제대로 됐는지 확인하려면, 아래 명령어를 Python 인터프리터(터미널)에서 실행:
import moviepy
import googleapiclient
import requests
#대체 import 방식 (모듈 구조가 바뀌는 경우에 사용
from moviepy.video.io.VideoFileClip import VideoFileClip
from moviepy.audio.io.AudioFileClip import AudioFileClip
print("라이브러리 설치 완료!")
에러가 발생하지 않으면 성공!
에러 발생시 해결방안
2. PyCharm에서 Python 인터프리터 확인
PyCharm이 사용하는 Python 인터프리터에 MoviePy가 설치되지 않았을 가능성도 있어.
- PyCharm에서 인터프리터 설정 확인:
- 메뉴: File > Settings > Project: [프로젝트명] > Python Interpreter.
- 오른쪽 상단의 드롭다운에서 현재 사용 중인 Python 환경 확인.
- MoviePy가 설치되어 있는 Python 환경인지 확인.
- 해당 인터프리터에 MoviePy 설치:
- 드롭다운 오른쪽의 "+" 버튼 클릭.
- "moviepy" 검색 후 설치.
3. PyCharm 캐시 초기화
PyCharm이 잘못된 캐시를 사용해 오류를 일으키는 경우도 있어.캐시를 강제로 초기화하려면:
- File > Invalidate Caches / Restart 클릭.
- "Invalidate and Restart" 선택.
- PyCharm이 재시작된 후 다시 시도.
4. 프로젝트 구조 생성
이제 프로젝트 폴더를 설정하자:
- 원하는 디렉토리에 새 폴더를 생성 (예: C:\sleep_music_project).
- 폴더 안에 Python 파일 생성 (예: main.py).
- 위에서 제공한 코드를 편집기에 복사/붙여넣기.
5. Pexels와 YouTube API 키 설정
1) Pexels API 키 생성
- Pexels API 사이트로 이동.
- 회원가입 후, API 키를 발급받아 코드를 수정:
python코드 복사PEXELS_API_KEY = "YOUR_PEXELS_API_KEY" # 발급받은 키로 변경
2) YouTube API 설정
- Google Cloud Console로 이동.
- 새 프로젝트 생성 후, "YouTube Data API v3" 활성화.
- OAuth 2.0 클라이언트 인증 정보를 생성하고, client_secret.json 파일을 다운로드.
- 위 파일을 프로젝트 폴더에 저장.
6. 코드 실행 테스트
- 편집기에서 Python 파일을 열고 실행.
- VS Code: 오른쪽 상단의 "Run" 버튼 클릭.
- PyCharm: "Run" 메뉴에서 "Run 'main'" 선택.
- 실행이 완료되면, 1시간짜리 수면 음악 영상이 생성돼야 해! 생성된 파일은 프로젝트 폴더에 저장.
7. 윈도우 스케줄러에 배치 설정
- 작업 스케줄러 열기
- 윈도우 검색창에 "작업 스케줄러" 입력 후 실행.
- 작업 생성
- "작업 만들기" 클릭.
- 이름 입력 (예: SleepMusicGenerator).
- "트리거" 탭 → "새로 만들기" → 매일 실행 시간 설정.
- "동작" 탭 → "새로 만들기" → 다음 명령 입력:
bash코드 복사python C:\sleep_music_project\main.py
- 완료 후 매일 정해진 시간에 스크립트가 실행됨!