title: PHP Run FFMPEG in background, and find out when it's done
body: <blockquote>
    <p><strong>Possible Duplicate:</strong><br>
    <a href="https://stackoverflow.com/questions/1198052/run-a-ffmpeg-process-in-the-background">Run a ffmpeg process in the background</a>  </p>
  </blockquote>
  
  
  
  <p>I was wondering if there's any easy way to runn and ffmpeg process in the background so people can leave the page. And if you do that, then tell if the ffmpeg process is running, and when it's done, update the database to "finished". I'll post my code if I need to. Thanks!
  Here's the code on the processing page:</p>
  
  <pre><code>&lt;?php
  $name = $_FILES['upload_file']['name'];
  $type = $_FILES['upload_file']['type'];
  $size = $_FILES['upload_file']['size'];
  $tmpname = $_FILES['upload_file']['tmp_name'];
  
  if (!$title) {
      $title = $name;
  }
  
  if (!$description) {
      $description = "No description available.";
  }
  
  $string = substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',10)),0,10);
  $videoname = "$string.mp4";
  $date = date("F d, Y"); // October 09, 2010
  $srcFile = $tmpname;
  mkdir("users/$usercode/uploads/$string");
  mkdir("users/$usercode/uploads/$string/HD");
  mkdir("users/$usercode/uploads/$string/regular");
  mkdir("users/$usercode/uploads/$string/mobile_upload");
  mkdir("users/$usercode/uploads/$string/thumbnails");
  $destFile1 = "/users/$usercode/uploads/$string/HD/$string.mp4";
  $destFile2 = "/users/$usercode/uploads/$string/regular/$string.mp4";
  $destFile3 = "/users/$usercode/uploads/$string/mobile_upload/$string.mp4";
  $ffmpegPath = "/usr/local/bin/ffmpeg"; 
  $flvtool2Path = "/usr/bin/flvtool2";
  $yamdiPath = "/usr/bin/yamdi";
  $mp4boxPath = "/usr/local/bin/MP4Box";
  // Create our FFMPEG-PHP class 
  $ffmpegObj = new ffmpeg_movie($srcFile); 
  // Save our needed variables 
  $srcWidth = $ffmpegObj-&gt;getFrameWidth(); 
  $srcHeight = $ffmpegObj-&gt;getFrameHeight(); 
  $srcFPS = $ffmpegObj-&gt;getFrameRate(); 
  $srcAB = $ffmpegObj-&gt;getAudioBitRate();  
  $srcAR = $ffmpegObj-&gt;getAudioSampleRate(); 
  $res = $srcWidth . "x" . $srcHeight; 
  // Call our convert using exec() 
  $iphone1 = getcwd().$destFile1;
  $iphone2 = getcwd().$destFile2;
  $iphone3 = getcwd().$destFile3;
  $low = "854x480";
  $local_img = "/users/$usercode/uploads/$string/thumbnails/$string.jpg";
  $img = getcwd().$local_img;
  $img = preg_replace('/ /','\ ',$img); 
  $thumb = "$string.jpg"; 
  $cmd = "$ffmpegPath -i $tmpname 2&gt;&amp;1";  
  if (preg_match('/Duration: ((\d+):(\d+):(\d+))/s', `$cmd`, $time)) {  
      $total = ($time[2] * 3600) + ($time[3] * 60) + $time[4];  
      $interval = rand(0, $total);  
  }  
  
  $img = shell_exec("$ffmpegPath -ss $interval -i $tmpname 2&gt;&amp;1 -s 120x90 -f mjpeg -vframes 1 $img");
  
  
  if ($srcWidth &gt;= 1280 &amp;&amp; $srcHeight &gt;= 720) {
      $out1 = shell_exec("$ffmpegPath -i $tmpname -f mp4 -vcodec libx264 -vpre normal -ab $srcAB -ar $srcAR -b 5000k -r $srcFPS -s $res -acodec libfaac $iphone1");
      $out2 = shell_exec("$mp4boxPath -inter 0.5 $iphone1");
      $out3 = shell_exec("$ffmpegPath -i $tmpname -f mp4 -vcodec libx264 -vpre normal -ab $srcAB -ar $srcAR -b 2000k -r $srcFPS -s $low -acodec libfaac $iphone2");
      $out4 = shell_exec("$mp4boxPath -inter 0.5 $iphone2");
      $out5 = shell_exec("$ffmpegPath -i $tmpname -f mp4 -vcodec libx264 -vpre slow -ab 64k -ar 44100 -b 500k -r 30 -s $low -acodec libfaac $iphone3");
      $out6 = shell_exec("$mp4boxPath -inter 0.5 $iphone3");
      echo 1;
  }
  else {
      $out3 = shell_exec("$ffmpegPath -i $tmpname -f mp4 -vcodec libx264 -vpre normal -ab 64k -ar 44100 -b 500k -r 30 -s $low -acodec libfaac $iphone2");
      $out4 = shell_exec("$mp4boxPath -inter 0.5 $iphone2");
      $out5 = shell_exec("$ffmpegPath -i $tmpname -f mp4 -vcodec libx264 -vpre slow -ab 64k -ar 44100 -b 500k -r 30 -s $low -acodec libfaac $iphone3");
      $out6 = shell_exec("$mp4boxPath -inter 0.5 $iphone3");          
      echo 1;
  }
  function generate_random($number_of_characters)
  {
          $characters = array();
          $randomchar = "";
          $x = 0;
          for($i = 48; $i &lt; 123; $i++)
          {
                  if(ctype_alnum(chr($i)))
                  {
                          $characters[$x] = chr($i);
                          $x++;
                  }
          }
          for($i = 0; $i &lt; $number_of_characters; $i++)
          {
                  $randomchar .= $characters[rand(0, count($characters) - 1)];
          }
          return $randomchar;
  }
  ?&gt;
  </code></pre>