영상 견적계산기

여러 항목을 선택하면서 가장 합리적으로 견적을 맞추어 보세요.

* 30초 영상 기준

항목 항목설명 고객선택항목 단가
기획단계
작가 - 500,000원
연출 - 1,000,000원
편수대비 추가비용 몇편을 제작합니까?
촬영단계
촬영팀 어떤 카메라를 씁니까?
※ 사용할 카메라에 따른 촬영감독, 촬영팀에 대한 인건비
촬영장비비 선택한 카메라에 따른 장비비용 카메라 옵션에 따라 자동 선택
※ 카메라, 렌즈, 삼각대 등의 장비 사용비
특수촬영 카메라무빙이 필요합니까?
드론 드론촬영이 필요합니까?
조명팀 조명팀이 필요합니까?
※ 조명팀이 별도로 있을 경우, 전문적인 조명 셋팅으로 영상 퀄리티와 촬영 속도가 향상됩니다.
스튜디오 스튜디오가 필요합니까?
사운드녹음 배우대사가 있습니까?
출연료 한국인배우
외국인배우
단역
※ 유명배우가 필요한 경우에는 별도 상의
편집단계
편집비 몇 편을 제작합니까?
그래픽 몇 편을 제작합니까?
DI, 색보정 몇 편을 제작합니까?
3D 3D 작업이 필요합니까? 별도 협의
음악(사용권구입) 기존음원에 저작권을 구입합니다
음악(작곡) 영상을 위한 음악을 따로 만듭니다
성우·번역단계
번역비(영어) 영어 번역이 필요합니까?
번역비(그 외 언어) 몇 개 언어 별도 번역이 필요합니까?
성우(한국어/영어) 나레이션이 필요합니까?
성우(그 외 언어) 몇 개 언어 별도 나레이션이 필요합니까?
기타
진행비(예비비) 전체 예산의 5% 자동 계산
총 견적금액

import React, { useState } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Alert, AlertDescription } from '@/components/ui/alert'; import { Clock } from 'lucide-react'; const YouTubeScheduler = () => { // 내일 날짜를 기본값으로 설정 const getTomorrowDateTime = () => { const tomorrow = new Date(); tomorrow.setDate(tomorrow.getDate() + 1); tomorrow.setHours(9, 0, 0, 0); // 다음날 오전 9시로 설정 return tomorrow.toISOString().slice(0, 16); // YYYY-MM-DDTHH:mm 형식으로 변환 }; const [url, setUrl] = useState(''); const [scheduledTime, setScheduledTime] = useState(getTomorrowDateTime()); const [videoId, setVideoId] = useState(''); const [message, setMessage] = useState(''); const [isScheduled, setIsScheduled] = useState(false); // YouTube URL에서 video ID 추출 const extractVideoId = (url) => { const regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/; const match = url.match(regExp); return (match && match[7].length === 11) ? match[7] : null; }; // 스케줄 설정 const scheduleVideo = () => { const extractedId = extractVideoId(url); if (!extractedId) { setMessage('올바른 YouTube URL을 입력해주세요.'); return; } if (!scheduledTime) { setMessage('재생 시간을 설정해주세요.'); return; } const scheduledTimestamp = new Date(scheduledTime).getTime(); const now = new Date().getTime(); if (scheduledTimestamp <= now) { setMessage('미래 시간을 선택해주세요.'); return; } setVideoId(extractedId); setIsScheduled(true); const formattedTime = new Date(scheduledTime).toLocaleString('ko-KR', { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit' }); setMessage(`${formattedTime}에 재생이 예약되었습니다.`); // 예약된 시간에 실행될 타이머 설정 const timeUntilPlay = scheduledTimestamp - now; setTimeout(() => { setMessage('영상이 재생됩니다!'); // 실제 재생 로직은 여기에 구현 }, timeUntilPlay); }; return ( YouTube 예약 재생
setUrl(e.target.value)} className="w-full" />
setScheduledTime(e.target.value)} className="w-full" />
{message && ( {message} )} {videoId && (