"use client"; import { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Card } from '@/components/ui/card'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { ArrowLeft, Upload, Loader2 } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { ModeEnum, ResolutionEnum } from "@/app/model/enums"; import { createScriptEpisode, CreateScriptEpisodeRequest, updateScriptEpisode, UpdateScriptEpisodeRequest } from "@/api/script_episode"; import { convertVideoToScene } from "@/api/video_flow"; import { getUploadToken, uploadToQiniu } from "@/api/common"; export function VideoToVideo() { const router = useRouter(); const [videoUrl, setVideoUrl] = useState(''); const [selectedMode, setSelectedMode] = useState(ModeEnum.AUTOMATIC); const [selectedResolution, setSelectedResolution] = useState(ResolutionEnum.HD_720P); const [isUploading, setIsUploading] = useState(false); const [isCreating, setIsCreating] = useState(false); const handleBack = () => { router.push('/create'); }; const handleUploadVideo = async () => { const input = document.createElement('input'); input.type = 'file'; input.accept = 'video/*'; input.onchange = async (e) => { const file = (e.target as HTMLInputElement).files?.[0]; if (file) { try { setIsUploading(true); // Get upload token const { token } = await getUploadToken(); // Upload to Qiniu const uploadedVideoUrl = await uploadToQiniu(file, token); setVideoUrl(uploadedVideoUrl); } catch (error) { console.error('Upload error:', error); alert('Upload failed, please try again'); } finally { setIsUploading(false); } } }; input.click(); }; const handleCreate = async () => { if (!videoUrl) { alert('请先上传视频'); return; } try { setIsCreating(true); // Create episode const episodeData: CreateScriptEpisodeRequest = { title: "Video Episode", script_id: 0, // This should come from a project status: 1, summary: "Video conversion" }; const episodeResponse = await createScriptEpisode(episodeData); if (episodeResponse.code !== 0) { alert(`创建剧集失败: ${episodeResponse.message}`); return; } const episodeId = episodeResponse.data.id; // Convert video to scenes const convertResponse = await convertVideoToScene(videoUrl, episodeId, 0); if (convertResponse.code === 0) { // Update episode with generated data const updateEpisodeData: UpdateScriptEpisodeRequest = { id: episodeId, atmosphere: convertResponse.data.atmosphere, summary: convertResponse.data.summary, scene: convertResponse.data.scene, characters: convertResponse.data.characters, }; await updateScriptEpisode(updateEpisodeData); // Navigate to workflow router.push(`/create/work-flow?episodeId=${episodeId}`); } else { alert(`转换失败: ${convertResponse.message}`); } } catch (error) { console.error('创建过程出错:', error); alert("创建项目时发生错误,请稍后重试"); } finally { setIsCreating(false); } }; return (
{/* Header */}

Video to Video

{/* Main Content */}
{/* Video Upload */}
{videoUrl ? (
) : (

Click to upload a video file

)}
{/* Settings */}
{/* Create Button */}
); }