【问题标题】:Upload and encode video using php使用 php 上传和编码视频
【发布时间】:2017-03-03 12:02:26
【问题描述】:

我正在尝试在上传时对视频进行编码,但无法执行我想要的操作。这是我的上传代码。

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");

谁能给我提示!谢谢

【问题讨论】:

  • 转换视频需要大量资源和时间。您不想在您的主 Web 服务器上执行此操作,并且您肯定不想在 Web 服务器 PHP 请求中执行此操作。要以理智的方式执行此操作,您将需要一个专门用于此视频转换的服务器,在该服务器上运行单个工作程序(或您希望并行处理的许多编码),这需要要从作业队列转换的视频。编码将在后台异步发生。这一切如何协同工作过于宽泛,无法在此处详细解释。

标签: php mysql video upload encode


【解决方案1】:

目前还不是很清楚,代码的目标是什么。 我阅读了以下内容:

  1. 上传视频并将其移至特定目录
  2. 将视频转换为 flv 格式。
  3. 将信息保存到数据库

你可以试试这个:

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);
}

但要小心。当前,您将错误的扩展名保存到数据库中(avi 而不是 flv)。你应该在你的执行命令中使用绝对路径。

要回答 ffmmpeg-Command 应该是什么样子很难,因为这可能是非常动态的并且取决于源。 https://www.ffmpeg.org/documentation.html 应该对你有更多帮助。

【讨论】:

  • 你能告诉我在我的例子中我需要添加什么到 exec 函数、视频名称或什么......这就是我不明白的地方
  • 如果连续上传了少量的视频,这种幼稚的方法会很快杀死你的网络服务器,和/或如果视频不是很短并且可以转换,则会完全失败在 Web 服务器分配给 PHP 的超时时间内……
  • @DavorMiljkovic 以此为例:ffmpeg -i "/path/to/video.mpeg" -ar 44100 -ab 96 -f flv "/path/to/new/video.flv"。 -i 是输入文件,-ar 是音频频率,-ab 是音频比特率,-f 是强制这种格式,其余的是输出文件。但是这些值可以根据输入文件格式而改变。应该适用于 AVI、MOV、MPG、MP4 作为输入格式
猜你喜欢
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 2013-02-10
  • 2015-08-16
  • 1970-01-01
相关资源
最近更新 更多