1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Need ffmpeg help

Discussion in 'PHP & Perl' started by mylikes786, Apr 4, 2014.

  1. mylikes786

    mylikes786 Registered Member

    Joined:
    Oct 31, 2013
    Messages:
    80
    Likes Received:
    6
    I have a script to convert video and add water mark on video

    i dont want any change in bitrate, frequncy etc. i just want add watermark on video

    can any one edit it and remove option for converstion. i want only watermark option

    PHP:
    <?php
    include"init.php";
    ?>
    <?php
    if (isset($_GET['upload'])) {
        
    ?>
        <h2>Upload a video file <?php echo isset($_GET['direct']) ? ' ( Direct ) ' : (isset($_GET['url']) ? '( url ) ' ''); ?>
        </h2>
        <?php
        
    if (isset($_GET['direct'])) {
            if (isset(
    $_POST['upload'])) {
                
    $file $_FILES['file'];
                if (
    $file['error'] == && $file['size'] > 0) {
                    
    $name $default_destination str_replace(".""-"substr($file['name'], 0strripos($file['name'], "."))) . "." substr($file['name'], strripos($file['name'], ".") + 1);
                    if (
    in_array(strtolower(pathinfo($name4)), $allowed_extensionstrue)) {
                        if (!
    is_file($name)) {
                            
    move_uploaded_file($file['tmp_name'], $name);
                            echo 
    "<strong>" htmlspecialchars(basename($name)) . "</strong> has been uploaded.
                            <br />You may now load the file using the <a href='?loader'>loader</a>"
    ;
                        } else {
                            echo
    "That file is already uploaded... try another file name";
                        }
                    } else {
                        echo
    "Extension isn't allowed";
                    }
                } else {
                    echo
    "Error in uploading.. Try again.";
                }
            } else {
                
    ?>
                <form method='post' enctype='multipart/form-data' action='?upload&direct'>
                    <input type='file' name='file' />
                    <input type='submit' name='upload' value='upload' />
                    <br /><strong>Allowed extensions:</strong>  <?php echo strtolower(implode(","$allowed_extensions)); ?>
                </form>
                <?php
            
    }
        } elseif (isset(
    $_GET['url'])) {
            if (isset(
    $_POST['url'])) {
                
    $url $_POST['url'];
                
    $name = isset($_POST['name']) ? basename($_POST['name']) : basename($url);
                
    $name preg_replace("@[^a-z0-9\.]@is""-"$name);
                if (
    in_array(strtolower(pathinfo($name4)), $allowed_extensionstrue)) {
                    if (
    filter_var($urlFILTER_VALIDATE_URL)) {
                        echo 
    copy($url$default_destination $name) ? htmlspecialchars($name) . " has been UPLOADED... You may now load the file using the <a href='?loader'>loader</a>" "NOT DONE";
                    } else {
                        
    error("URL ISN'T VALID: " $url);
                    }
                } else {
                    
    error("EXTENSION ISN'T ALLOWED : " pathinfo($name4));
                }
            } else {
                
    ?>
                <form  method='POST' action='?upload&url'>
                    <b>Remote URL</b> : <input type='text' name='url' value='' size='60' />
                    <br /><b>Filename</b> : <input type='text' name='name' value='' size='20' />
                    <br />Allowed extensions:  <?php echo strtolower(implode(","$allowed_extensions)); ?>
                    <br /><input type='submit' value='Fetch' />
                </form>
                <?php
            
    }
        } else {
            echo
    "
    <center><a href='?upload&direct'>Direct upload</a>"
    ,
            
    " <strong>OR</strong> ",
            
    "<a href='?upload&url'>Fetch a link</a></center>
                        <strong>Direct upload:</strong> Upload a file from your computer.
                        <br />
                        <strong>URL upload:</strong> Upload a file from a http link."
    ;
        }
    } elseif (isset(
    $_GET['loader'])) {
        
    $dh opendir($default_destination);
        if (
    $dh) {
            echo 
    "<h3>List of files</h3>";
            while (
    $file readdir($dh)) {
                if (
    $file != "." && $file != ".." && in_array(strtolower(pathinfo($file4)), $allowed_extensionstrue)) {
                    echo 
    "
                <b>
    $file</b> (SIZE:" size(filesize($default_destination $file), 2) . ")
                <br />
                <a href='?process&file=
    $file'>Load</a>
                            <a href='?getscr&file=
    $file'>Screenshot</a>
                <a href='
    $default_destination$file'>Link</a><br />
                <hr noshade />
                <br />
                "
    ;
                }
            }
            
    closedir($dh);
        } else {
            
    error("CAN'T OPEN FOLDER FOR LISTING FILES.");
        }
        
    ?>
        <?php
    } elseif (isset($_GET['getscr']) && isset($_GET['file'])) {
        
    $file basename($_GET['file']);
        if (!
    is_file($default_destination $file)) {
            
    error("No such file exists !"true);
        } else {
            
    $file $default_destination $file;
            
    $exec_cmd "ffmpeg -i " escapeshellarg($file) . " 2>&1";
            
    ob_start();
            
    passthru($exec_cmd);
            
    $contents ob_get_contents();
            
    ob_end_clean();
            
    //echo $contents;
            
    $duration 0// Duration in seconds;
            
    if (preg_match('@Duration: ([0-9]+?):([0-9]+?):([0-9]+?)\.([0-9]+?),@i'$contents$match)) {
                
    $duration $match[1] * 3600 $match[2] * 60 $match[3];
            }
            
    //echo $duration;
            
    $mid_dist ceil($duration 2);
            if (isset(
    $_GET['dist']) && $_GET['dist'] > && $_GET['dist'] <= $duration) {
                
    $dist intval($_GET['dist']);
            } else {
                
    $dist $mid_dist;
            }
            
    //echo $dist;
            
    $imgfile $default_destination "ss/" basename($file) . "_" $dist ".jpg";
            if (!
    is_dir($default_destination 'ss')) {
                
    mkdir($default_destination 'ss'0755) or exit('Unable to create directory: ' $default_destination 'ss');
            }
            if (!
    is_file($imgfile)) {
                
    $exec_cmd "ffmpeg -i " escapeshellarg($file) . " -an -ss " escapeshellarg($dist) . " -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg " escapeshellarg($imgfile) . " 2>&1";
                
    $contents '';
                
    ob_start();
                
    passthru($exec_cmd);
                
    $contents ob_get_contents();
                
    ob_end_clean();
                
    //echo $contents;
            
    }
            echo 
    "<img src='$imgfile' />
            <br />
            <strong>Filename</strong>: " 
    basename($file) . "
            <br />
            <strong>Video duration</strong>: " 
    $duration " seconds
            <div id='slider1' class='slider'>
            <div class='handle'>»</div>
            </div>
            <script type='text/javascript'>
            var slider = new Slider('slider1', { 
            callback: function(value)
            {
                document.getElementById('dist').value = Math.round(
    $duration * value);
            }});
            slider.setValue(" 
    . ($dist $duration) . ");
            </script>
            <form method='GET'>
            <input type='hidden' name='getscr' value='1' />
            <input type='hidden' name='file' value='" 
    basename($file) . "' />
            <input type='submit' value='Generate Screenshot' /> at <input type='text' id='dist' name='dist' size='3' value='
    $dist' /> seconds
            </form>
            "
    ;
        }
    } elseif (isset(
    $_GET['process']) && isset($_GET['file'])) {
        
    $file basename($_GET['file']);
        if (!
    is_file($default_destination $file)) {
            
    error("No such file exists !"true);
        }
        if (isset(
    $_POST['submit'])) {
            
    $ext strtolower($_POST['ext']);
            if (!
    in_array($ext$allowed_extensionstrue)) {
                
    error("NO / INVALID OUTPUT EXTENSION SELECTED"true);
            }
            
    $sizeX escapeshellarg(intval($_POST['sizeX']));
            
    $sizeY escapeshellarg(intval($_POST['sizeY']));
            
    $vbr escapeshellarg(intval($_POST['vbr']));
            
    $abr escapeshellarg(intval($_POST['abr']));
            
    $afreq escapeshellarg(intval($_POST['afreq']));
            
    $channel escapeshellarg(intval($_POST['channel']));
            
    $fname_old escapeshellarg($default_destination $file);
            
    $fname_new $default_destination $_POST['name'] . "." $ext;
            if (
    is_file($fname_new)) {
                
    error("OUTPUT FILE ALREADY EXISTS. GO BACK AND CHOOSE ANOTHER NAME"true);
            }
            
    $fname_new escapeshellarg($fname_new);
            if (
    is_file($fname_new)) {
                
    error("CHOOSE DIFFERENT FILE NAME FOR OUTPUT BECAUSE IT ALREADY EXISTS"true);
            }
            
    $cmd "mencoder $fname_old -o $fname_new -ovc xvid -xvidencopts bitrate=$vbr -vf scale=$sizeX:$sizeY -oac mp3lame -lameopts cbr:mode=$channel:br=$abr -af resample=$afreq -srate $afreq";
            if (
    $ext == 'mp3') {
                
    $cmd "ffmpeg -i $fname_old -vn -acodec libmp3lame $fname_new";
            }
            
    /* LOGS */
            
    $time time();
            
    $srt $default_destination $time "_" md5($watermark) . "_.srt";
            
    $log $default_destination $time "_.txt";
            if (isset(
    $_POST['watermark']) && strlen($_POST['watermark']) > 0) {
                
    $watermark preg_replace("@[^a-z0-9 \.]@is"""$_POST['watermark']);
                if (
    strlen($watermark) > 0) {
                    
    $content "1\n00:00:0,001 --> 00:09:00,000\n$watermark";
                    
    file_put_contents($srt$content);
                    
    $cmd $cmd ' -sub ' escapeshellarg($srt) . ' -font verdana.ttf -subpos 98';
                }
            }
            
    ob_start();
            
    passthru($cmd);
            
    $content "Conversion initiated by: $_SESSION[user] \n\nConversion cmd: " $cmd "\n\n" ob_get_contents();
            
    ob_end_clean();
            
    file_put_contents($log$content);
            echo
    "
            <b>Conversion successful<b/>.
            <br />
            \"" 
    basename($fname_old) . " was converted to \"" basename($fname_new) . " successfully.
            <br /><br />
            <a href='?lister'>view list </a> <a href='
    $log'>View conversion log</a>";
        } else {
            
    ?>
            <h4>LOADED FILE : <?php echo $file?> </h4>
            <b>INSTRUCTIONS</b> : 
            <ul type="circle">
                <li> ENTER VIDEO CONVERSION OPTIONS PROPERLY.
                <li> WAIT FOR SOMETIME AFTER SUBMITTING THIS FORM ( VIDEO CONVERSION TAKES A LOT OF TIME )
                <li> LEAVE WATERMARK TEXT BOX EMPTY IF YOU DON'T WANT TO WATERMARK.
                <li> DON'T PUT TOO HIGH AUDIO/VIDEO BITRATE.
                <li> DON'T RESUMIT FORM IN ANY CASE.
            </ul>
            <form action='?process&file=<?php echo $file?>' method='post'>
                <b>OUTPUT FILE NAME</b> : <input type='text' name='name' value='' size='50' /> ( Use a simple filename. )
                <br /><b>OUTPUT FORMAT</b> : <?php foreach ($allowed_extensions as $ext)
                echo 
    "<input type='radio' name='ext' value='$ext' /> <b>$ext</b> "?>
                <br /><b>VIDEO BITRATE</b> : <input type='text' name='vbr' value='112' size='5' /> ( For eg if 112k then fill 112 )
                <br /><b>AUDIO BITRATE</b> : <input type='text' name='abr' value='32' size='5' /> ( For eg if 32k then fill as 32)
                <br /><b>SIZE X</b> : <input type='text' name='sizeX' value='320' size='5'/> ( For eg if 320x240 then 320 in this and 240 in the box below )
                <br /><b>SIZE Y</b> : <input type='text' name='sizeY' value='240' size='5' /> 
                <br /><b>AUDIO FREQUENCY</b> : <input type='text' name='afreq' value='22050' size='5' /> ( For eg. 22050 )
                <br /><b>CHANNEL</b> : <select name='channel'><option value='1'>Mono</option><option value='2' selected='selected'>Stereo</option></select>
                <br /><b>WATERMARK TEXT</b> : <input type='text' name='watermark' value='' size = '50' /> ( Leave blank for no watermarking )
                <p align='center'><input type='submit' name='submit' value='Convert video' /></p>
            </form>
            <?php
        
    }
    } elseif (isset(
    $_GET['logs'])) {
        
    $dh opendir($default_destination);
        if (
    $dh) {
            echo 
    "<h3>Conversion logs</h3>";
            while (
    $file readdir($dh)) {
                if (
    $file != "." && $file != ".." && strtolower(pathinfo($file4)) == 'txt') {
                    
    $time date("d.m.Y h:i:s"str_replace("_.txt"""$file));
                    echo 
    "<a href='$default_destination$file' target='_blank'>view</a> <b>$file</b> - TIME:$time - SIZE:" size(filesize($default_destination $file), 2) . 
                 <br />"
    ;
                }
            }
            
    closedir($dh);
        } else {
            
    error("CAN'T OPEN FOLDER FOR LISTING FILES.");
        }
    } else {
        
    ?>
        <b>WELCOME....</b>
        <ul type='circle'>
            <li> THIS PHP SCRIPT USES MENCODER/FFMPEG FOR VIDEO CONVERSION.
            <li> COPY VIDEOS FROM A REMOTE URL OR UPLOAD FROM YOUR PC.
            <li> VIEW LIST OF FILES.
            <li> LOAD YOUR FILE FOR CONVERSION.
            <li> ENTER PROPER CONVERSION OPTIONS.
            <li> SUBMIT FORM / CONVERSION WILL BEGIN.
            <li> WAIT FOR CONVERSION TO FINISH, DO NOT RELOAD THE PAGE.
            <li> AGAIN VIEW LIST OF FILES.
            <li> OBTAIN DIRECT LINK OF CONVERTED FILE.
            <li> WATERMARKING ALL VIDEOS IS NOT RECOMMENDED. 3GP WATERMARKING SHOULD BE AVOIDED.
            <li> CONVERT VIDEOS ONE BY ONE / DON'T OVERLOAD YOUR SERVER :P.
        </ul>
        <?php
    }
    echo 
    $footer;
    ?>
     
  2. MrBlue

    MrBlue Senior Member

    Joined:
    Dec 18, 2009
    Messages:
    950
    Likes Received:
    662
    Occupation:
    Web/Bot Developer
    This is the line of code that needs to be modified:
    Code:
     $cmd = "mencoder $fname_old -o $fname_new -ovc xvid -xvidencopts bitrate=$vbr -vf scale=$sizeX:$sizeY -oac mp3lame -lameopts cbr:mode=$channel:br=$abr -af resample=$afreq -srate $afreq";