176 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
require 'Database.php';
 | 
						|
require 'TMDBMovie.php';
 | 
						|
 | 
						|
$ffmpeg = 'ffmpeg'; //or: /usr/bin/ffmpeg , or /usr/local/bin/ffmpeg - depends on your installation (type which ffmpeg into a console to find the install path)
 | 
						|
$tmdb = new TMDBMovie();
 | 
						|
 | 
						|
$conn = Database::getInstance()->getConnection();
 | 
						|
 | 
						|
$scandir = "../videos/prn/";
 | 
						|
$arr = scandir($scandir);
 | 
						|
 | 
						|
$all = 0;
 | 
						|
$added = 0;
 | 
						|
$deleted = 0;
 | 
						|
$failed = 0;
 | 
						|
 | 
						|
foreach ($arr as $elem) {
 | 
						|
    if ($elem != "." && $elem != "..") {
 | 
						|
        if (strpos($elem, '.mp4') !== false) {
 | 
						|
            $moviename = substr($elem, 0, -4);
 | 
						|
 | 
						|
            $query = "SELECT * FROM videos WHERE movie_name = '" . mysqli_real_escape_string($conn, $moviename) . "'";
 | 
						|
            $result = $conn->query($query);
 | 
						|
 | 
						|
            // insert if not available in db
 | 
						|
            if (!mysqli_fetch_assoc($result)) {
 | 
						|
                // try to fetch data from TMDB
 | 
						|
                if (!is_null($dta = $tmdb->searchMovie($moviename))) {
 | 
						|
                    $pic = file_get_contents($tmdb->picturebase . $dta->poster_path);
 | 
						|
                } else {
 | 
						|
                    echo "nothing found with TMDB!\n";
 | 
						|
                    $pic = shell_exec("ffmpeg -hide_banner -loglevel panic -ss 00:04:00 -i \"../videos/prn/$elem\" -vframes 1 -q:v 2 -f singlejpeg pipe:1 2>/dev/null");
 | 
						|
                }
 | 
						|
 | 
						|
                $image_base64 = base64_encode($pic);
 | 
						|
 | 
						|
                $image = 'data:image/jpeg;base64,' . $image_base64;
 | 
						|
 | 
						|
                $video_attributes = _get_video_attributes($elem);
 | 
						|
 | 
						|
                $duration = 60 * $video_attributes['hours'] + $video_attributes['mins'];
 | 
						|
 | 
						|
                $query = "INSERT INTO videos(movie_name,movie_url,thumbnail,quality,length) 
 | 
						|
                            VALUES ('" . mysqli_real_escape_string($conn, $moviename) . "',
 | 
						|
                            '" . mysqli_real_escape_string($conn, 'videos/prn/' . $elem) . "',
 | 
						|
                            '$image',
 | 
						|
                            '" . $video_attributes['height'] . "',
 | 
						|
                            '$duration')";
 | 
						|
 | 
						|
                if ($conn->query($query) === TRUE) {
 | 
						|
                    echo('successfully added ' . $elem . " to video gravity\n");
 | 
						|
                    $last_id = $conn->insert_id;
 | 
						|
 | 
						|
                    // full hd
 | 
						|
                    if ($video_attributes['height'] >= 1080) {
 | 
						|
                        $query = "INSERT INTO video_tags(video_id,tag_id) VALUES ($last_id,2)";
 | 
						|
                        if ($conn->query($query) !== TRUE) {
 | 
						|
                            echo "failed to add default tag here.\n";
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
 | 
						|
                    if ($video_attributes['height'] >= 720 && $video_attributes['height'] < 1080) {
 | 
						|
                        $query = "INSERT INTO video_tags(video_id,tag_id) VALUES ($last_id,4)";
 | 
						|
                        if ($conn->query($query) !== TRUE) {
 | 
						|
                            echo "failed to add default tag here.\n";
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
 | 
						|
                    if ($video_attributes['height'] < 720) {
 | 
						|
                        $query = "INSERT INTO video_tags(video_id,tag_id) VALUES ($last_id,3)";
 | 
						|
                        if ($conn->query($query) !== TRUE) {
 | 
						|
                            echo "failed to add default tag here.\n";
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    $added++;
 | 
						|
                    $all++;
 | 
						|
                } else {
 | 
						|
                    echo('errored item: ' . $elem . "\n");
 | 
						|
                    echo('{"data":"' . $conn->error . '"}\n');
 | 
						|
                    $failed++;
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                $all++;
 | 
						|
            }
 | 
						|
        }else{
 | 
						|
            echo($elem . " does not contain a .mp4 extension! - skipping \n");
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
$query = "SELECT COUNT(*) as count FROM videos";
 | 
						|
$result = $conn->query($query);
 | 
						|
$r = mysqli_fetch_assoc($result);
 | 
						|
 | 
						|
if ($all < $r['count']) {
 | 
						|
    echo "should be in gravity: " . $all . "\n";
 | 
						|
    echo "really in gravity: " . $r['count'] . "\n";
 | 
						|
    echo "cleaning up gravity\n";
 | 
						|
 | 
						|
    $query = "SELECT movie_id,movie_url FROM videos";
 | 
						|
    $result = $conn->query($query);
 | 
						|
 | 
						|
    while ($r = mysqli_fetch_assoc($result)) {
 | 
						|
        if (!file_exists("../" . $r['movie_url'])) {
 | 
						|
            $query = "DELETE FROM videos WHERE movie_id='" . $r['movie_id'] . "'";
 | 
						|
            if ($conn->query($query) === TRUE) {
 | 
						|
                echo('successfully deleted ' . $r['movie_url'] . " from video gravity\n");
 | 
						|
                $deleted++;
 | 
						|
            } else {
 | 
						|
                echo "failed to delete " . $r['movie_url'] . " from gravity: " . $conn->error . "\n";
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
// calculate size of databse here
 | 
						|
$size = -1;
 | 
						|
$query = "SELECT table_schema AS \"Database\", 
 | 
						|
                        ROUND(SUM(data_length + index_length) / 1024 / 1024, 3) AS \"Size\" 
 | 
						|
                        FROM information_schema.TABLES 
 | 
						|
                        WHERE TABLE_SCHEMA='hub'
 | 
						|
                        GROUP BY table_schema;";
 | 
						|
$result = $conn->query($query);
 | 
						|
if ($result->num_rows == 1) {
 | 
						|
    $row = $result->fetch_assoc();
 | 
						|
    $size = $row["Size"];
 | 
						|
}
 | 
						|
 | 
						|
echo "Total gravity: " . $all . "\n";
 | 
						|
echo "Size of Databse is: " . $size . "MB\n";
 | 
						|
echo "added in this run: " . $added . "\n";
 | 
						|
echo "deleted in this run: " . $deleted . "\n";
 | 
						|
echo "errored in this run: " . $failed . "\n";
 | 
						|
 | 
						|
function _get_video_attributes($video)
 | 
						|
{
 | 
						|
    global $ffmpeg;
 | 
						|
 | 
						|
    $command = "$ffmpeg -i \"../videos/prn/$video\" -vstats 2>&1";
 | 
						|
    $output = shell_exec($command);
 | 
						|
 | 
						|
    $codec = "null";
 | 
						|
    $width = 0;
 | 
						|
    $height = 0;
 | 
						|
 | 
						|
    $regex_sizes = "/Video: ([^,]*), ([^,]*), ([0-9]{1,4})x([0-9]{1,4})/"; // or : $regex_sizes = "/Video: ([^\r\n]*), ([^,]*), ([0-9]{1,4})x([0-9]{1,4})/"; (code from @1owk3y)
 | 
						|
    if (preg_match($regex_sizes, $output, $regs)) {
 | 
						|
        $codec = $regs [1] ? $regs [1] : "null";
 | 
						|
        $width = $regs [3] ? $regs [3] : 0;
 | 
						|
        $height = $regs [4] ? $regs [4] : 0;
 | 
						|
    }
 | 
						|
 | 
						|
    $hours = 0;
 | 
						|
    $mins = 0;
 | 
						|
    $secs = 0;
 | 
						|
    $ms = 0;
 | 
						|
 | 
						|
    $regex_duration = "/Duration: ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}).([0-9]{1,2})/";
 | 
						|
    if (preg_match($regex_duration, $output, $regs)) {
 | 
						|
        $hours = $regs [1] ? $regs [1] : 0;
 | 
						|
        $mins = $regs [2] ? $regs [2] : 0;
 | 
						|
        $secs = $regs [3] ? $regs [3] : 0;
 | 
						|
        $ms = $regs [4] ? $regs [4] : 0;
 | 
						|
    }
 | 
						|
 | 
						|
    return array('codec' => $codec,
 | 
						|
        'width' => $width,
 | 
						|
        'height' => $height,
 | 
						|
        'hours' => $hours,
 | 
						|
        'mins' => $mins,
 | 
						|
        'secs' => $secs,
 | 
						|
        'ms' => $ms
 | 
						|
    );
 | 
						|
}
 |