2016-10-21 9 views
-1

アップロード中にビデオをエンコードしようとしていますが、私がしたいことはできません。ここにアップロードのための私のコードです。PHPを使用してビデオをアップロードしてエンコードする

if(isset($_FILES['video_profile'])){ 
          $errors= array(); 

          $file_name = $_FILES['video_profile']['name']; 
          $ext = pathinfo($file_name, PATHINFO_EXTENSION); 
          $newName = time(); 

          $file_size =$_FILES['video_profile']['size']; 
          $file_tmp =$_FILES['video_profile']['tmp_name']; 
          $file_type =$_FILES['video_profile']['type']; 
          $file_ext =strtolower(end(explode('.',$_FILES['video_profile']['name']))); 

          $expensions = array("webm","mp4", "avi", "mov", "flv", "swf", "mpg", "mpeg", "mpeg-4", "wmv"); 

          if(in_array($file_ext,$expensions)=== false){ 
          $errors[]="extension not allowed, please choose a JPEG or PNG file."; 
          } 

          if($file_size > 524288000){ // 2097152 // 
          $errors[]='File size must be smaller than 500 MB'; 
          } 

          if(empty($errors)==true){ 
          move_uploaded_file($file_tmp,"upload_data/site_video/".$newName.'_video.'.$ext); 
          //var_dump($file_tmp,"upload_data/site_video/".$newName.'_video.'.$ext); 
          echo "<p class=\"success\">You have successfully uploaded video</p>"; 

          Db::query('INSERT INTO site_video SET table_name = "profile_video", user_id = '.$_SESSION['user']['id'].', video_name = "'.$newName.'_video.'.$ext.'" '); 

          $orderby = Db::insert_id(); 

          Db::query('UPDATE site_video SET orderby = '.$orderby.' WHERE id = '.$orderby); 
          } 
          else{ 
          //print_r($errors); 
          } 
         } 

私が検索し、私はどこかにこのコードを配置する必要がありますが、どこで、どのよう

exec("ffmpeg -i video.avi -ar 22050 -ab 32 -f flv -s 320x240 video.flv"); 

誰かが私にヒントを与えることを知っていないことが判明しました!ありがとうございました

+0

ビデオを変換すると、重大なリソースと時間がかかります。プライマリWebサーバーでこれを行う必要はなく、WebサーバーのPHP要求内でこれを実行したくないのは確かです。これを行うには、このビデオ変換用の専用サーバーが必要です。このサーバーでは、1人のワーカー(または並列処理する*多くのエンコーディング)が実行されます。ジョブキュー。エンコーディングはバックグラウンドで非同期的に発生します。これがどのように連携して動作するかは広すぎるため、ここで詳しく説明することはできません。 – deceze

答えて

1

コードであなたの目標は何ですか?

  1. はのFLV形式にするためにビデオを変換するビデオをアップロードし、特定のディレクトリ
  2. に移動: は、私は、次の読みください。あなたはこれを試すことができますデータベース

から

  • 保存に関する情報:

    if (move_uploaded_file($file_tmp,"upload_data/site_video/".$newName.'_video.'.$ext)) { 
        exec("ffmpeg -i video.avi -ar 22050 -ab 32 -f flv -s 320x240 video.flv"); 
        echo "<p class=\"success\">You have successfully uploaded video</p>"; 
    
        Db::query('INSERT INTO site_video SET table_name = "profile_video", user_id = '.$_SESSION['user']['id'].', video_name = "'.$newName.'_video.'.$ext.'" '); 
    
        $orderby = Db::insert_id(); 
        Db::query('UPDATE site_video SET orderby = '.$orderby.' WHERE id = '.$orderby); 
    } 
    

    しかし、注意してください。現在、間違った拡張子をデータベースに保存しています(flvではなくavi)。また、exec-commandで絶対パスを使用する必要があります。

    ffmmpeg-Commandがどのように見えるかは、非常に動的で、ソースに依存するため、答えは難しいです。 https://www.ffmpeg.org/documentation.htmlはあなたにもっと役立つはずです。

  • +0

    私はexec関数、ビデオ名、または何を私が理解できないものに追加する必要があるか私の例を教えていただけますか –

    +0

    少数以上の小さなものがある場合、ビデオが何か非常に短く、WebサーバによってPHPに割り当てられたタイムアウト時間内に変換できる場合、完全に失敗するでしょう... – deceze

    +0

    @DavorMiljkovicこれを例として使用してください:ffmpeg -i "/ path /to/video.mpeg "-ar 44100 -ab 96 -f flv" /path/to/new/video.flv "と入力します。 -iは入力ファイル、-arはオーディオ周波数、-abはオーディオビットレート、-fはこの形式を強制し、残りは出力ファイルです。しかし、これらの値はinput-file-formatに依存して変化する可能性があります。入力形式としてAVI、MOV、MPG、MP4で動作する必要があります – Oliver

    関連する問題