&1"); // Cek apakah format sudah pas $sudah_pas = false; if (strpos($cek_info, 'Video: h264') !== false && strpos($cek_info, 'Audio: aac') !== false) { $sudah_pas = true; } try { if ($sudah_pas) { // Langsung salin jika format sudah benar copy($file_input, $file_output_mp4); $pesan = "✅ Format video sudah sesuai, tidak perlu dikonversi."; } else { // KONVERSI OTOMATIS ke MP4 H.264 $pesan = "⌛ Sedang mengkonversi video ke format standar... Mohon tunggu."; $perintah = "\"$ffmpeg_path\" -i \"$file_input\" -c:v libx264 -preset fast -crf 23 -c:a aac -b:a 128k -movflags +faststart -y \"$file_output_mp4\""; shell_exec($perintah); // Cek hasil konversi if (!file_exists($file_output_mp4) || filesize($file_output_mp4) < 1024) { throw new Exception("Konversi gagal. File rusak atau tidak didukung."); } $pesan .= " ✅ Konversi selesai."; } // 3. BUAT THUMBNAIL OTOMATIS (Ambil gambar di detik ke 3) $file_thumb = $folder_thumb . $nama_acak . ".jpg"; $perintah_thumb = "\"$ffmpeg_path\" -i \"$file_output_mp4\" -ss 00:00:03 -vframes 1 -q:v 2 -y \"$file_thumb\""; shell_exec($perintah_thumb); // 4. ENKRIPSI FILE VIDEO & THUMBNAIL $nama_file_akhir = $nama_acak . ".enc"; $nama_thumb_akhir = $nama_acak . ".enc"; if (!enkripsiFile($file_output_mp4, $folder_video . $nama_file_akhir)) { throw new Exception("Gagal mengenkripsi file video."); } if (!enkripsiFile($file_thumb, $folder_thumb . $nama_thumb_akhir)) { throw new Exception("Gagal mengenkripsi thumbnail."); } // 5. HAPUS FILE MENTAH / SEMENTARA (Agar aman) @unlink($file_input); @unlink($file_output_mp4); @unlink($file_thumb); // 6. SIMPAN KE DATABASE $query = $db->prepare(" INSERT INTO video (judul, deskripsi, genre, negara, nama_file, nama_thumbnail, id_pengguna, diunggah_pada) VALUES (:judul, :deskripsi, :genre, :negara, :nama_file, :nama_thumbnail, :id_pengguna, NOW()) "); $query->bindParam(':judul', $judul); $query->bindParam(':deskripsi', $deskripsi); $query->bindParam(':genre', $genre); $query->bindParam(':negara', $negara); $query->bindParam(':nama_file', $nama_file_akhir); $query->bindParam(':nama_thumbnail', $nama_thumb_akhir); $query->bindParam(':id_pengguna', $id_pengguna); $query->execute(); // BERHASIL $pesan = "🎉 Video berhasil diunggah, diproses, dan disimpan!"; $pesanTipe = "sukses"; // Reset form jika sukses $judul = $deskripsi = $genre = $negara = ""; } catch (Exception $e) { $pesan = "❌ Terjadi kesalahan: " . $e->getMessage(); $pesanTipe = "gagal"; // Bersihkan file sampah jika ada error @unlink($file_input); @unlink($file_output_mp4); @unlink($file_thumb); } } } ?>