eubottura's picture
<!DOCTYPE html>
fbc07de verified
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Editor de Vídeo Profissional - Geração Final com Áudio</title>
<link rel="stylesheet" href="style.css">
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
<script src="https://unpkg.com/feather-icons"></script>
</head>
<body>
<header class="header">
<div class="header-content">
<div class="logo">
<i data-feather="video"></i>
Editor de Vídeo Profissional
</div>
<div class="precision-indicator">
<i data-feather="crosshair"></i>
Geração Final com Áudio
</div>
</div>
</header>
<main class="main-container">
<div class="upload-grid">
<div class="upload-card">
<h2 class="section-title">
<i data-feather="file-text"></i>
Roteiro SRT
<span class="precision-badge">Obrigatório</span>
</h2>
<div class="upload-zone" id="srtZone">
<i data-feather="file-text upload-icon"></i>
<div class="upload-text">Arraste o arquivo SRT aqui</div>
<div class="upload-subtext">ou clique para selecionar</div>
</div>
<div class="file-list" id="srtFiles"></div>
<div class="srt-preview" id="srtPreview" style="display: none;">
<h4>
<i data-feather="eye"></i> Pré-visualização SRT:
</h4>
<div id="srtPreviewContent"></div>
</div>
</div>
<div class="upload-card audio-card">
<h2 class="section-title">
<i data-feather="mic"></i>
Áudio Original
<span class="audio-badge">Obrigatório</span>
</h2>
<div class="upload-zone audio-zone" id="audioZone">
<i data-feather="mic upload-icon audio-icon"></i>
<div class="upload-text">Arraste o áudio aqui</div>
<div class="upload-subtext">MP3, WAV, M4A • Transcrição Whisper</div>
</div>
<div class="file-list" id="audioFiles"></div>
</div>
<div class="upload-card">
<h2 class="section-title">
<i data-feather="film"></i>
Takes Brutos
<span class="precision-badge">Múltiplos</span>
</h2>
<div class="upload-zone" id="videoZone">
<i data-feather="film upload-icon"></i>
<div class="upload-text">Arraste os vídeos aqui</div>
<div class="upload-subtext">MP4, MOV, WEBM • Análise Frame-by-Frame</div>
</div>
<div class="file-list" id="videoFiles"></div>
</div>
<div class="upload-card audio-card">
<h2 class="section-title">
<i data-feather="brain"></i>
Whisper Large
<span class="audio-badge">API</span>
</h2>
<div class="upload-zone audio-zone" id="whisperZone" onclick="editor.configureWhisper()">
<i data-feather="brain upload-icon audio-icon"></i>
<div class="upload-text">Configurar Whisper API</div>
<div class="upload-subtext">Chave necessária para transcrição</div>
</div>
<div id="whisperConfig"></div>
</div>
</div>
<div class="control-panel">
<div class="info-banner audio-banner">
<h3><i data-feather="mic"></i> Geração Integrada com Áudio</h3>
<p>
<strong>Integração completa:</strong> O sistema agora processa o áudio original, utiliza Whisper Large para
transcrição automática e precisa, sincroniza com o roteiro SRT, e gera o vídeo final com áudio perfeitamente alinhado.
Todo o processo é automatizado com validação de qualidade e ajustes finos manuais quando necessário.
</p>
</div>
<div class="info-banner">
<h3><i data-feather="lightbulb"></i> Edição Flexível</h3>
<p>
<strong>Um ponto crucial sobre a edição:</strong> não precisamos necessariamente de um take para cada bloco.
Podemos usar um take que cubra vários blocos, desde que faça sentido com o que o narrador está dizendo.
O timing deve ser preciso e a escolha do take deve considerar o contexto, permitindo juntar blocos quando a edição ficar mais natural.
</p>
</div>
<h2 class="section-title">
<i data-feather="users"></i>
Público-Alvo
<span class="precision-badge">35+ Anos</span>
</h2>
<div class="audience-selector">
<div class="audience-option" data-audience="female35">
<div class="audience-title">
<i data-feather="female"></i>
Mulheres 35+
</div>
<div class="audience-desc">
Elegância, sofisticação, conforto, harmonia, cuidado com detalhes
</div>
</div>
<div class="audience-option" data-audience="male35">
<div class="audience-title">
<i data-feather="male"></i>
Homens 35+
</div>
<div class="audience-desc">
Resistência, funcionalidade, engenharia, durabilidade, estilo sóbrio
</div>
</div>
</div>
<button class="analyze-btn" id="analyzeBtn" disabled>
<i data-feather="brain"></i>
INICIAR ANÁLISE COMPLETA
</button>
</div>
<div class="transcription-status" id="transcriptionStatus">
<h3><i data-feather="brain"></i> Processando Transcrição Whisper</h3>
<div class="analysis-progress">
<div class="progress-bar">
<div class="progress-fill" id="transcriptionProgress" style="width: 0%"></div>
</div>
<div id="transcriptionText">0% - Iniciando transcrição...</div>
</div>
</div>
<div class="loading-section" id="loadingSection">
<h2 class="section-title">
<i data-feather="settings"></i>
Análise Completa com Integração de Áudio
</h2>
<div class="analysis-progress">
<div class="progress-bar">
<div class="progress-fill" id="progressFill" style="width: 0%"></div>
</div>
<div id="progressText">0% - Iniciando análise...</div>
</div>
<div class="analysis-steps">
<div class="step-card" id="step1">
<i data-feather="mic"></i>
<div>1. Transcrição Whisper</div>
</div>
<div class="step-card" id="step2">
<i data-feather="refresh-cw"></i>
<div>2. Sincronização Áudio-SRT</div>
</div>
<div class="step-card" id="step3">
<i data-feather="film"></i>
<div>3. Análise de Takes</div>
</div>
<div class="step-card" id="step4">
<i data-feather="search"></i>
<div>4. Análise Visual</div>
</div>
<div class="step-card" id="step5">
<i data-feather="layers"></i>
<div>5. Agrupamento Inteligente</div>
</div>
<div class="step-card" id="step6">
<i data-feather="link"></i>
<div>6. Otimização de Fluxo</div>
</div>
<div class="step-card" id="step7">
<i data-feather="clock"></i>
<div>7. Sincronização Precisa</div>
</div>
<div class="step-card" id="step8">
<i data-feather="heart"></i>
<div>8. Validação Emocional</div>
</div>
<div class="step-card" id="step9">
<i data-feather="scissors"></i>
<div>9. Montagem com Áudio</div>
</div>
<div class="step-card" id="step10">
<i data-feather="download"></i>
<div>10. Entrega Final</div>
</div>
</div>
</div>
<div class="results-section" id="resultsSection">
<h2 class="section-title">
<i data-feather="check-circle"></i>
Análise Concluída - Vídeo Final Gerado
</h2>
<div class="whisper-status">
<h3><i data-feather="brain"></i> Métricas da Transcrição Whisper</h3>
<div class="whisper-metrics" id="whisperMetrics">
<div class="whisper-metric">
<div class="whisper-metric-value" id="whisperAccuracy">0%</div>
<div class="whisper-metric-label">Precisão</div>
</div>
<div class="whisper-metric">
<div class="whisper-metric-value" id="whisperWords">0</div>
<div class="whisper-metric-label">Palavras</div>
</div>
<div class="whisper-metric">
<div class="whisper-metric-value" id="whisperDuration">0s</div>
<div class="whisper-metric-label">Duração</div>
</div>
<div class="whisper-metric">
<div class="whisper-metric-value" id="whisperConfidence">0%</div>
<div class="whisper-metric-label">Confiança</div>
</div>
</div>
</div>
<div class="stats-grid">
<div class="stat-card">
<div class="stat-number" id="totalBlocks">0</div>
<div class="stat-label">Blocos SRT</div>
</div>
<div class="stat-card">
<div class="stat-number" id="totalTakes">0</div>
<div class="stat-label">Takes Utilizados</div>
</div>
<div class="stat-card">
<div class="stat-number" id="groupedBlocks">0</div>
<div class="stat-label">Blocos Agrupados</div>
</div>
<div class="stat-card">
<div class="stat-number" id="flowScore">0%</div>
<div class="stat-label">Fluidez</div>
</div>
<div class="stat-card">
<div class="stat-number" id="syncAccuracy">100%</div>
<div class="stat-label">Sincronia Áudio</div>
</div>
<div class="stat-card">
<div class="stat-number" id="efficiency">0%</div>
<div class="stat-label">Eficiência</div>
</div>
<div class="stat-card">
<div class="stat-number" id="audioQuality">0%</div>
<div class="stat-label">Qualidade Áudio</div>
</div>
<div class="stat-card">
<div class="stat-number" id="finalDuration">0s</div>
<div class="stat-label">Duração Final</div>
</div>
</div>
<div class="timeline-container">
<div class="timeline-header">
<h3>Timeline Final com Áudio Sincronizado</h3>
<div>
<span class="precision-indicator-small">
<i data-feather="crosshair"></i>
±0.2s
</span>
<span class="flow-indicator">
<i data-feather="droplet"></i>
Fluxo Otimizado
</span>
<span class="audio-indicator-small">
<i data-feather="volume-2"></i>
Áudio Integrado
</span>
</div>
</div>
<div class="timeline-ruler" id="timelineRuler"></div>
<div class="timeline-takes" id="timelineTakes"></div>
</div>
<div class="blocks-container" id="blocksContainer"></div>
<div class="export-section">
<h3 class="section-title">
<i data-feather="download"></i>
Exportação Completa com Áudio
</h3>
<div class="export-buttons">
<button class="export-btn" onclick="editor.previewFinalVideo()">
<i data-feather="play"></i>
Preview Completo
</button>
<button class="export-btn audio-export" onclick="editor.exportFinalVideo()">
<i data-feather="video"></i>
Vídeo Final (.mp4)
</button>
<button class="export-btn audio-export" onclick="editor.exportAudioOnly()">
<i data-feather="music"></i>
Áudio Processado (.mp3)
</button>
<button class="export-btn" onclick="exportReport()">
<i data-feather="file-text"></i>
Relatório Completo
</button>
<button class="export-btn" onclick="exportTranscription()">
<i data-feather="message-square"></i>
Transcrição Whisper
</button>
<button class="export-btn" onclick="exportTimeline()">
<i data-feather="clock"></i>
Timeline Detalhada
</button>
<button class="export-btn" onclick="exportProjectFile()">
<i data-feather="folder"></i>
Projeto Completo
</button>
</div>
</div>
</div>
</main>
<div class="video-preview-modal" id="videoPreviewModal">
<div class="preview-content">
<div class="preview-header">
<h2><i data-feather="play-circle"></i> Preview do Vídeo Final Completo</h2>
<button onclick="editor.closePreview()">
<i data-feather="x"></i>
</button>
</div>
<div class="preview-video-container">
<video id="previewFinalVideo" class="preview-video" controls></video>
</div>
<div class="preview-controls">
<button class="export-btn audio-export" onclick="editor.exportFinalVideo()">
<i data-feather="download"></i>
Baixar Vídeo Completo
</button>
<button class="export-btn audio-export" onclick="editor.exportAudioOnly()">
<i data-feather="headphones"></i>
Baixar Áudio Separado
</button>
<button class="export-btn" onclick="exportProjectFile()">
<i data-feather="save"></i>
Salvar Projeto
</button>
</div>
</div>
</div>
<div class="export-progress" id="exportProgress">
<h3><i data-feather="settings"></i> Processando Exportação</h3>
<div class="analysis-progress" style="margin: 1.5rem 0;">
<div class="progress-bar">
<div class="progress-fill" id="exportProgressFill" style="width: 0%"></div>
</div>
<div id="exportProgressText">0% - Iniciando...</div>
</div>
</div>
<script src="script.js"></script>
<script>feather.replace();</script>
<script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
</body>
</html>