Skip to Content

비디오 워크플로우를 자동화하는 방법: 스냅인코딩 API 사용하기

비디오 업로드부터 처리 및 전송까지 완전히 자동화된 비디오 파이프라인을 구축하는 방법에 대해 알아보세요. 스냅인코딩 클라이언트 접면 API와 간단한 Node.js 스크립트를 사용하여.

에 의해
Hero image for 비디오 워크플로우를 자동화하는 방법: 스냅인코딩 API 사용하기

오늘날의 콘텐츠 중심 세계에서 수동 비디오 업로드 및 처리는 콘텐트 파이프라인의 전체 속도에 큰 장애물로 작용할 수 있습니다. 플랫폼인 Snapencode의 API-첫 번째 설계의真正한 힘은 이러한 반복적인 작업을 자동화하고 유용한 시간을 되찾아주는 것입니다.

이 튜토리얼에서, 우리는 Node.js 스크립트를 작성하여 특정 디렉터리를 모니터링하고 새 비디오 파일이 추가될 때 Snapencode로 자동으로 업로드하고 처리 상태를 확인하는 “워치 폴더” 스크립트를 구축할 것입니다.

목표: “Watch Folder” 업로더

목표는 Node.js 스크립트를 작성하여 다음을 달성하는 것입니다.

  1. 특정 디렉터리를 로컬 머신 또는 서버에서 모니터링합니다.
  2. 새 비디오 파일 (.mp4, .mov 등)이 추가될 때, 지정된 컬렉션에 업로드하고 Snapencode로 자동으로 업로드합니다.
  3. 업로드 후, 상태 엔드포인트를 폴링하여 비디오가 “완료” 될 때까지 지속합니다.
  4. 완료되면, 비디오 ID와 로그를 기록하고 다음 파일을 준비합니다.

이것은 콘텐츠가 프로그래밍적으로 생성되거나 공유 폴더에 비디오를 드롭하는 비기술적인 팀원들이 있는 워크플로우의 완벽한 솔루션입니다.

필수 조건

  • Snapencode API 키: 설정 > API 키에서 키를 생성하세요.
  • Node.js: 스크립트를 작성하기 위해 JavaScript 및 Node.js 런타임을 사용합니다.
  • axioschokidar: API 요청과 파일 모니터링을 위한 두 가지 간단한 패키지.
npm install axios chokidar form-data

업로드 감시 스크립트 구축

우리는 단일, 완전한 스크립트를 작성할 것입니다. upload-watcher.js 라고 이름을 지어보겠습니다.

1단계: 스크립트 구성

먼저, upload-watcher.js 파일의 상단에 필요한 라이브러리와 구성 변수를 설정해 보겠습니다.

upload-watcher.js
const axios = require('axios'); const FormData = require('form-data'); const fs = require('fs'); const path = require('path'); const chokidar = require('chokidar'); // --- 구성 --- const API_BASE_URL = 'https://your-Snapencode-domain.com/api/client/v1'; const API_KEY = process.env.Snapencode_API_KEY || 'sk_your_api_key_here'; // 권장: 환경 변수 사용 const TARGET_FOLDER = 'root/automated-uploads'; // Snapencode 컬렉션 경로 const WATCH_DIRECTORY = './videos-to-upload'; // 현재 처리 중인 파일을 추적하는 세트 const processingFiles = new Set();

API 키를 환경 변수 (process.env.Snapencode_API_KEY)로 사용하는 것이 보안상 더 좋습니다.

2단계: 주요 함수 생성

다음으로, 업로드와 처리 상태 모니터링을 위한 두 개의 메인 함수를 추가합니다.

upload-watcher.js
// (구성 섹션 아래에 코드 추가) async function uploadVideo(filePath) { console.log(`[UPLOADING] 비디오 업로드 시작: ${path.basename(filePath)}`); processingFiles.add(filePath); // 현재 처리 중인 파일로 표시 const form = new FormData(); form.append('video', fs.createReadStream(filePath)); form.append('folder', TARGET_FOLDER); try { const response = await axios.post(`${API_BASE_URL}/uploads`, form, { headers: { ...form.getHeaders(), 'Authorization': `Bearer ${API_KEY}` }, }); console.log(`[SUCCESS] 업로드 성공! 비디오 ID: ${response.data.data.id}`); return response.data.data.id; } catch (error) { console.error(`[FAILURE] 업로드 실패: ${path.basename(filePath)}:`, error.response?.data?.message || error.message); return null; } } async function monitorStatus(videoId, filePath) { if (!videoId) { processingFiles.delete(filePath); // 실패 시 현재 처리 중인 파일에서 제거 return; } console.log(`[MONITORING] 비디오 상태 모니터링: Video ID ${videoId}`); const interval = setInterval(async () => { try { const response = await axios.get(`${API_BASE_URL}/uploads/${videoId}`, { headers: { 'Authorization': `Bearer ${API_KEY}` }, }); const { status, status_text } = response.data.data; if (status === 6) { // 완료 console.log(`✅ [COMPLETE] 처리 완료! 비디오 ID: ${videoId}!`); clearInterval(interval); processingFiles.delete(filePath); // 성공 시 현재 처리 중인 파일에서 제거 } else if (status === 7) { // 실패 console.error(`❌ [FAILED] 처리 실패! 비디오 ID: ${videoId}.`); clearInterval(interval); processingFiles.delete(filePath); } else { console.log(`[STATUS] 비디오 ID ${videoId}: ${status_text} (${status})`); } } catch (error) { console.error(`[ERROR] 비디오 상태 가져오기 실패! 비디오 ID: ${videoId}:`, error.message); clearInterval(interval); processingFiles.delete(filePath); } }, 5000); // 5초마다 확인 }

이 스크립트는 서버 간의 상호 작용을 보여주고 있습니다. 클라이언트 측 브라우저 코드에 API 키를 노출하지 마세요.

3단계: 파일 감시 초기화

마지막으로, chokidar 로직을 스크립트의 끝에 추가합니다. 이 로직은 디렉터리를 모니터링하고 새 파일이 추가될 때 함수를 트리거합니다.

upload-watcher.js
// (스크립트의 끝에 코드 추가) function initializeWatcher() { console.log(`--- Snapencode Watch Folder Initialized ---`); console.log(`새 비디오 모니터링: ${path.resolve(WATCH_DIRECTORY)}`); if (!fs.existsSync(WATCH_DIRECTORY)) { console.log(`폴더 생성 중...`); fs.mkdirSync(WATCH_DIRECTORY, { recursive: true }); } const watcher = chokidar.watch(WATCH_DIRECTORY, { ignored: /(^|[\/\\])\../, // 점 파일 무시 persistent: true, ignoreInitial: true, // 시작 시 이미 존재하는 파일 업로드 무시 }); watcher.on('add', (filePath) => { if (processingFiles.has(filePath)) { return; // 현재 처리 중인 파일이면 건너뜁니다. } console.log(`[DETECTED] 새 파일: ${path.basename(filePath)}`); // 파일이 완전히 기록되기 전에 업로드를 기다립니다. setTimeout(async () => { const videoId = await uploadVideo(filePath); await monitorStatus(videoId, filePath); }, 2000); }); } initializeWatcher();

4단계: 감시 스크립트 실행

upload-watcher.js 파일이 완성되면 터미널에서 실행할 수 있습니다.

# 권장: API 키를 환경 변수로 설정 export Snapencode_API_KEY="sk_your_api_key_here" # 스크립트 실행 node upload-watcher.js

이제, ./videos-to-upload 디렉터리에 새 비디오 파일을 추가하면 자동으로 업로드되고 처리됩니다!