안녕하세요. 11기 SNS 자동화 파트너 허세임 입니다. 수강생들에게만 사례발표를 시킬 수 없어 저도 사례를 하나 만들어 게시합니다. 지난 지피터스 무료특강에서 받은 후기를 통해 저의 인스타그램을 홍보할 수 있는 릴스영상으로 만드는 과정입니다.
인스타그램 자동화 A to Z를 응용하여 진행했습니다.
사용 툴
자동화: AI코딩 → 앱스크립트, 파이썬
대량 컨텐츠 제작: Canva
대량 자동 업로드: Metricool
Canva와 Metricool은 워낙 유명한 좋은 툴이라 이미 사용하시는 분들이 많습니다. 이 두개의 툴을 어떻게 사용하여 SNS 자동화를 할 수 있는지 같이 보시겠습니다.
1. 지피터스 무료 특강
지난 5월 29일 비개발자를 위한 AI코딩 Ctrl+V라는 주제로 특강을 열었습니다. 많은 분들이 참여 해 주셨고, 감사하게도 그 중 38명의 수강생님들이 200자가 넘는 정성스런 후기를 작성해주셨습니다. 저만 보기엔 너무 아까워, 허세임AI 인스타그램에 강의 홍보용 컨텐츠로 업로드하기로 했습니다.
후기 수집
특강 마지막에 구글폼으로 후기 작성 링크를 전해드리고, 24시간 동안 후기를 받았습니다. 구글폼에서 받은 응답데이터는 구글시트로 변환이 가능합니다. (Tally나 다른 설문조사 툴들도 구글시트 연동 기능이 되어있습니다.)
2. 데이터 가공
Canva로 대량생산을 하기 전, 데이터를 컨텐츠에 맞게 가공하는 작업이 필요합니다. 이 작업들은 ChatGPT나 Claude에게 물어보며 코드를 작성하는 AI코딩으로 진행되었습니다.
Canva 업로드 용 시트 생성
구글폼 응답에 자동으로 연결되어있는 시트는 아래 그림과 같이 보라색으로 구글폼 아이콘이 함께 표시되고있습니다. 원본 데이터를 보존하기 위해, 원본 시트를 복사하여 새로운 시트에서 데이터를 가공합니다. 저는 ‘인스타후기 캔바’ 이라는 이름으로 생성했습니다.
이제 복사된 새로운 시트에서 컨텐츠 가공을 시작합니다. 먼저, 컨텐츠에 필요없는 필드들(타임스탬프, 연락처, 이메일)을 삭제 합니다.
그리고, 질문 형식으로 되어있는 1행을 간결하게 수정합니다.
이름을 입력해주세요 → 이름
진심이 담긴 후기나 따끔한 쓴소리 부탁드립니다 → 후기
이렇게 얼추 기본적인 세팅을 마쳤습니다.
수강생 이름 마킹하기
후기를 업로드 할 때, 수강생의 본명 전부를 올리는 경우는 많지 않습니다. 대부분 허세임을 허O임, 혹은 허OO으로 표기하죠. 이 작업을 일일이 이름을 수정하지 않고, AI코딩으로 자동화 하겠습니다.
먼저 [이름]열 옆에 새로운 열 [마킹이름]을 추가합니다.
이제 ChatGPT에게 코딩을 시키기 전에, 입코딩을 구체적으로 해봅니다. ChatGPT에게 코딩시키는 방법은 지난 특강 영상 18:19초 부터 자세히 설명하고있습니다.
위 영상에서 언급된 대로 인풋을 정확하게 설명해주어야 합니다. 현재 작업중인 시트를 csv로 다운로드 받아 업로드해서, 아예 어떤 데이터로 작업할건지 넣어주는 것이 프롬프트에서 말로 설명해주는것보다 빠르고 정확하고 속시원합니다. 게다가 ChatGPT에서는 Google Drive에 있는 모든 파일들 연동이 가능하기 때문에, 다운로드 업로드 과정을 거치지 않고 데이터를 전해줄 수 있습니다.
원하는 구글시트 이름으로 검색해서 선택해주면, 프롬프트에 그 구글시트가 함께 업로드 됩니다.
이제 내가 원하는 기능을 구체적으로 설명합니다. 저는 이름 데이터에서 첫번째 글자와 마지막 글자를 제외한 모든 글자를 O으로 바꿔서 마킹이름에 저장하는 코드를 짜라고 명령하겠습니다. 다만, 여기서 주의할 점이 있습니다.
⚠️ 어떤 시트인지 명시를 하지 않으면, 첫번째 시트를 기준으로 작업합니다.
우리가 작업하고 있는 구글시트에는 시트가 여러장 있습니다. 첫번째 장은 구글폼 응답이 들어오는 설문지 응답시트, 그리고 우리는 두번째 시트인 ‘인스타후기 캔바‘라는 시트를 작업하고 있습니다. ChatGPT에서 Google Drive 파일을 바로 연결할시에는 꼭 어떤 시트를 사용할건지 명시를 해야합니다. 그 렇지 않으면 첫번째 시트로 작업합니다.
업로드 후 ‘인스타후기 캔바‘ 시트를 이용할 것을 명시하고 ChatGPT가 알아들었는지 확인합니다.
제대로 소통이 되었다면, 이제 입코딩을 해보겠습니다.
프롬프트:
[이름]데이터를 가공해서 [마킹이름]을 채우는 앱스크립트
이름의 첫번째와 마지막 글자만 그대로 표기, 나머지는 모두 O로 변경
이름이 두글자 이하인 경우엔, 첫번째 글자만 그대로 표기하고 나머지는 모두 O로 변경
ChatGPT가 작성한 코드
function maskNames() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('인스타후기 캔바'); // 시트 이름을 정확히 입력해주세요.
var range = sheet.getDataRange(); // 데이터가 있는 범위를 가져옵니다.
var values = range.getValues(); // 모든 데이터를 2D 배열 형태로 가져옵니다.
for (var i = 1; i < values.length; i++) { // 첫 번째 행은 헤더이므로 i=1부터 시작합니다.
var name = values[i][0]; // '이름' 컬럼의 데이터를 가져옵니다.
if (name.length > 2) {
// 이름이 세 글자 이상인 경우
var maskedName = name.charAt(0) + 'O'.repeat(name.length - 2) + name.charAt(name.length - 1);
values[i][1] = maskedName; // '마킹이름' 컬럼에 마스킹된 이름을 설정합니다.
} else if (name.length > 0) {
// 이름이 두 글자 이하인 경우
var maskedName = name.charAt(0) + 'O'.repeat(name.length - 1);
values[i][1] = maskedName; // '마킹이름' 컬럼에 마스킹된 이름을 설정합니다.
}
}
range.setValues(values); // 변경된 값들로 전체 범위의 데이터를 업데이트합니다.
}개발자가 아닌 사람도 어느정도 흐름을 읽을 수 있게끔 주석을 자세히 달아주었습니다. 주석을 읽으며 내가 원하는 기능이 제대로 들어갔는지 확인합니다.
구글 앱스크립트
코드를 그대로 복사하여, Ctrl+V 할 차례입니다. 구글시트의 확장 프로그램 → Apps Script 를 실행합니다.
구글 앱스크립트는 AI코딩 Ctrl+V 특강 영상에서 자세히 설명하고 있습니다. 게시글로는 인스타그램 자동화 A to Z를 참조하시면 스크린샷과 함께 설명이 되어있습니다.
+ 모양을 클릭하여 makeNames 라는 스크립트 파일을 새로 생성하고, 원래 써져있는 myFunction 어쩌구는 모두 지웁니다.
이제 깨끗해진 곳에 ✌️붙여넣기✌️를 합니다.
이제 실행버튼을 눌러서 코드를 실행시킵니다.
아래에 실행 로그가 뜨면서 실행이 완료되었다는 메세지가 나옵니다. 확인해볼까요?
38개의 데이터 모두 제가 원하던 대로 잘 처리 되었습니다. 에러가 나는 경우도 있으니, 비개발자 분들이시라면 오류메시지를 ChatGPT와 의논하여 코드를 수정해나가면 됩니다.
필요한 데이터가공이 있다면 AI코딩으로 여러번 진행하여 만들어갑니다.
3. 대량제작
이제 가공된 데이터를 이용해 대량제작에 들어갈 타이밍 입니다. 가공이 완성된 시트를 csv파일로 다운로드 받아두고 이제 캔바에서 작업하겠습니다.
대량생산할 템플릿 만들기
캔바에서 인스타그램 릴스용으로 프로젝트를 생성하고, 디자인탭에서 review라고 검색하여 원하는 템플릿을 선택하였습니다.
그 다음, 캔바 브랜드 센터에 미리 등록해 둔 색상 파레트를 사용하여, 허세임AI 브랜드의 컬러를 반영합니다.
셔플을 여러번 돌려봤지만 영 마음에 안드네요. 하나하나 눌러 색도 변경하고, 폰트도 변경하고 내용을 직접 넣어 내가 원하는 형식으로 샘플을 만들어봅니다.
강의 제목과 후기 그리고 마스킹된 수강생 이름까지 적절히 템플릿을 완성했습니다.
저는 릴스로 만들어보고 싶어서, 후기 글상자에 타자기 애니메이션을 넣어주고 시간도 10초로 늘려주었습니다.
csv업로드로 대량제작
이제 Canva의 대량제작 앱으로 들어가, 미리 다운로드받아놓은 csv파일을 업로드하고, 각 요소와 각 데이터 필드를 연결합니다. 데이터 연결하는 자세한 방법은 인스타그램 자동화 A to Z를 참고하세요.
후기와 마킹이름을 연결한 화면입니다. 이제 계속 버튼을 눌러 들어갈 데이터들을 확인하고 대량 생성해보도록 하겠습니다.
디자인 38개 생성 버튼을 누르면 3초 뒤, (대량 1) 이란 말머리를 단 새로운 Canva 프로젝트가 열리고 우리가 원하던 38개의 데이터가 담긴 결과가 나옵니다.
데이터 하나하나씩 복붙해서 넣는게 아니라, csv 파일로 한방에 할 수 있다니, 아무리 생각해도 최고입니다.
이제 각 컨텐츠마다 편집할 부분은 수작업으로 편집하여 컨텐츠의 완성도를 높여줍니다.
4. 음악 추가
아무래도 단순한 형식의 릴스이기 때문에, 오디오를 넣어주기로 합니다. TypeCast로 후기를 읽어주는 버전의 영상입니다.
하나 만들고 잘 시간이 되어서 Typecast는 접고, 음악이나 추가하기로 합니다.
음원 선정
릴스 수동 업로드시엔 배경음악을 업로드 과정에서 선택 할 수 있지만, 저는 자동으로 업로드 할 예정이기 때문에 미 리 오디오까지 영상에 포함시켜두어야 합니다. 이 때 어떤 노래를 선택할지 고민하다가 다음과 같은 조건으로 찾았습니다.
30~50대 타겟을 위한 1990년대부터 2000대 노래
챌린지 등으로 숏폼 플랫폼에서 유명한 노래
내가 좋아했던 추억에 노래
틱톡 영상 다운로드
내가 만든 영상은 10초짜리라, 3분이 넘는 전체 음원은 필요하지 않습니다. 그리고 10초 구간을 선택할때, 후렴이나 킬링파트로 설정하는것이 그냥 처음부터 10초만 재생하는 것 보다 좋습니다. 그래서 이미 다른 사람들이 킬링파트부터 올려놓은 틱톡 영상을 다운로드 받아 그 영상에서 10초만 잘라내겠습니다.
인스타그램, 유튜브 에서도 찾을 수 있지만 틱톡에서는 다른 작업 없이 바로 영상 다운로드가 가능해서 틱톡으로 진행했습니다.
영상 몇개를 다운받았습니다. 생각보다 많네요. 이걸 10초짜리 음원으로 모두 바꿔야합니다.
AI코딩 자동화: 음원 추출 및 편집
ChatGPT에게 인풋과 아웃풋, 그리고 원하는 기능을 설명합니다.
파이썬 프로그램을 실행하니 몇번의 에러가 있어서 몇가지 예외사항과 조건을 추가해주었습니다.
10초 이하인 영상이면 해당 영상 삭제
cut10이라는 폴더를 생성하고, 결과물 저장
이미 오디오 결과물이 있는 경우엔 넘어감
자세한 프롬프트 과정은 여기서 볼 수 있습니다.
그렇게 완성된 코드입니다.
import os
from moviepy.editor import VideoFileClip
def extract_audio(input_folder, output_folder='cut10'):
# 결과 폴더 생성 (입력 폴더 안에)
output_folder_path = os.path.join(input_folder, output_folder)
os.makedirs(output_folder_path, exist_ok=True)
# 지정된 폴더 내의 모든 파일을 순회
for filename in os.listdir(input_folder):
# 비디오 파일 확장자 확인
if filename.endswith(('.mp4', '.avi', '.mov', '.mkv')):
video_path = os.path.join(input_folder, filename)
output_filename = os.path.splitext(filename)[0] + "_audio.mp3"
output_path = os.path.join(output_folder_path, output_filename)
# 결과 파일이 이미 존재하는지 확인
if os.path.exists(output_path):
print(f"Output file {output_filename} already exists, skipping {filename}")
continue
video_clip = VideoFileClip(video_path)
# 비디오 길이 확인
if video_clip.duration <= 10:
# 파일 삭제
video_clip.close()
os.remove(video_path)
print(f"Deleted {filename} as its duration is {video_clip.duration} seconds")
else:
# 오디오 추출
audio_clip = video_clip.audio.subclip(0, 10)
# 오디오 파일 저장
audio_clip.write_audiofile(output_path, codec='mp3')
print(f"Extracted audio from {filename} to {output_filename}")
# 리소스 해제
audio_clip.close()
video_clip.close()
if __name__ == "__main__":
import sys
if len(sys.argv) < 2:
print("Usage: python script.py <input_folder> [output_folder]")
else:
input_folder = sys.argv[1]
output_folder = sys.argv[2] if len(sys.argv) > 2 else 'cut10'
extract_audio(input_folder, output_folder)
코드 실행 결과
원하는 경로에 10초 짜리 오디오들이 한방에 생성되었습니다.
컨텐츠에 오디오 삽입
다시 캔바로 돌아가서, 오디오 파일들을 업로드하고 추가해주도록 합니다.
한 페이지당 길이도 10초, 오디오 길이도 10초여서 따로 조정할 필요없이 자석처럼 쭉쭉 넣을 수 있습니다. 게다가 오디오 파일마다 색이 다르게 지정되어있어서 구분하기도 수월했습니다.
이렇게 완성된 영상입니다.
5. 릴스 캡션 생성
인스타그램 릴스에는 미디어만 올라갈 뿐 아니라, 텍스트로 캡션을 함께 작성 할 수 있습니다. 캡션에는 허세임의 강의 내용과 추후 계획, 그리고 문의방법을 포함합니다.
다만, 다 똑같은 캡션보다 조금더 나아가, 각 후기의 내용을 반영한 캡션들을 만들어보고 싶었습니다.
사전 정보 제공
클로드에게 인스타 캡션의 목적을 말하고, 어떤 정보가 필요한지 논의 후 나의 정보를 전달해줍니다.
이렇게 사전 정보를 모두 전달 한 후, 수강생들의 후기를 업로드해줍니다. 저는 구글시트에서 [선정]이란 필드를 추가하고, y와 n을 적어넣었습니다. 그리고 csv파일로 다운받고 클로드에게 전달하였습니다. y로 표시한 후기만 개별캡션을 작성하도록 합니다.
결과가 마음에 들지 않아 몇번 더 대화를 통해 개선한 결과 다음과 같은 형식의 캡션이 완성되었습니다.
첫번째 후기에 대한 캡션이 마음에 들게 나와서, 이제 다음 다음으로 쭉쭉 넘어가며 캡션을 뽑아냈습니다. 클로드가 데이터 순서를 헷갈리는지 가끔 엉뚱한 후기를 가져올때가 있었습니다. 그럴 경우에는 수강생 이름으로 명령하면 정확하게 작성해줍니다. 결과를 뱉어내는 모습이 너무 기특해서 동영상을 찍으려다가 귀찮아서 그만두었습니다. 각 결과를 구글시트에 복붙합니다.
캡션 생성까지 완성.
6. 대량 자동 업로드
Metricool 이란 툴을 이용해서 자동 업로드를 설정합니다. 자세한 방법은 인스타그램 자동화 A to Z를 통해 보실 수 있습니다.
csv파일을 이용한 대량 업로드를 하기 위해, 새로운 시트 ‘메트리쿨-릴스‘를 생성하였습니다. 각 미디어의 url을 만들고, 캡션과 url을 csv파일에 추가합니다.
완성된 csv파일을 다운로드 받고, Metricool Autolist에 업로드 하겠습니다.
영상과 캡션이 제대로 올라갔는지 확인합니다.
캘린더에서 추후 자동 업로드 일정을 확인 할 수 있습니다. 저는 매일 오후 8:30으로 세팅하였습니다.
7. 결과물
이 작업을 마친지 이틀이 지나 현재 2개의 릴스가 업로드 되었습니다. 확인해보세요.
⭐️ 인사이트
단순한 구성의 릴스라면 영상도 대량 자동화가 가능하다.
TypeCast 를 대량으로 빠르게 만드는 방법 연구가 필요하다.
정성스런 후기 내용들을 읽다보니 특강을 열심히 준비하길 잘했다는 생각에 행복하다.
🙌🏻 허세임AI 유튜브채널에 놀러오세요 - 버블로 앱개발하기, 미드저니 50가지 스타일, AI커버 노래만들기
#11기_SNS자동화