php - 在后台运行 ffmpeg 以便可以更改页面

标签 php mysql linux ffmpeg

我有一个让我发疯的问题。我有一个将文件上传到目录的 php 脚本。然后我可以用 ffmpeg 转换它,但我不希望用户必须在该页面上等待,我希望他们能够在 ffmpeg 在文件上运行时更改页面。我怎样才能做到这一点,我是使用 batch 还是 cron 还是什么?处理文件后,我将如何与我的 Web 应用程序通信,我是否在 cmd 中运行 php 文件以添加 mysql 条目?

这是我的 ffmpeg,如果有人能给我一些清晰的信息,我将不胜感激。在这一点上,我愿意捐出我一半的积分。

$command = shell_exec('/usr/local/bin/ffmpeg -i /home/geoff/Desktop/cave.wmv -acodec libfaac -aq 100 -vcodec libx264 -preset slow -crf 22 -threads 0 /home/geoff/Desktop/newvideo.flv');

最佳答案

我会选择 crons 或者只是创建另一个 php 脚本来进行转换。用户提交表单后,处理表单并使用 $_POST 将数据发送到视频转换器脚本并在不等待响应的情况下执行。

这是我的框架的一个例子,你可以根据你的需要进行修改。

# Executing The Script
$data = array();
$data['start'] = 0;
$data['end'] = 20;

$url = SITE_ROOT.CRONS_DIR.$found->path."/".$found->name.".php";

$response = curlPost($url,$data,3,TRUE);

if ($response){
echo "<pre>";
echo htmlentities($response);
}

# curlPost function

function curlPost($url, $postArray = NULL, $timeout=2, $errorReport=FALSE) {
    # PREPARE THE POST STRING
    if ($postArray != NULL) {
        $postString = '';
        foreach ($postArray as $key => $val) {
            $postString .= urlencode($key) . '=' . urlencode($val) . '&';
        }
        $postString = rtrim($postString, '&');
    }

    # PREPARE THE CURL CALL
    $curl = curl_init();
    curl_setopt( $curl, CURLOPT_URL,            $url         );
    curl_setopt( $curl, CURLOPT_HEADER,         FALSE        );
    curl_setopt( $curl, CURLOPT_POST,           TRUE         );
    ($postArray != NULL) ? curl_setopt( $curl, CURLOPT_POSTFIELDS,     $postString ) : '';
    curl_setopt( $curl, CURLOPT_TIMEOUT,        $timeout     );
    curl_setopt( $curl, CURLOPT_RETURNTRANSFER, TRUE         );

    # EXECUTE THE CURL CALL
    $htm = curl_exec($curl);
    $err = curl_errno($curl);
    $inf = curl_getinfo($curl);

    # ON FAILURE
    if (!$htm) {
        # PROCESS ERRORS HERE
        if ($errorReport) {
            echo "CURL FAIL: {$url} TIMEOUT={$timeout}, CURL_ERRNO={$err}";
            echo "<pre>\n";
            var_dump($inf);
            echo "</pre>\n";
            createLog("CURL FAIL: {$url} TIMEOUT={$timeout}, CURL_ERRNO={$err}");
        }
        curl_close($curl);
        return FALSE;
    }

    # ON SUCCESS
    curl_close($curl);
    return $htm;
 }

编辑: 你可以阅读cURL manual .这与 $_FILE 无关。

让我用不同的方式向您解释;

  • 你有form.php;这是 用户看到表单的页面和 提交表格。
  • 您有 upload.phpform_process.php;这个页面正在进行 记录用户需要的任何数据 将表格提交到您的数据库。

在处理用户提交数据的页面中,将其记录到数据库,上传文件,上传文件后,准备$_POST数组或任何包含您需要转换文件的信息的数组。

例如;

$data['id'] = 100; //ID in the database
$url = "video_converter.php";
$response = curlPost($url, $data, 3, TRUE);

在video_converter.php -> 用$_GET获取ID,在数据库中找到记录后,转换文件,更新记录。

当然,正如我所说,您需要根据自己的需要修改我上面编写的 curlPost 函数。如果您对什么是 cURL 有疑问,我强烈建议您阅读 cURL manual第一的。如果您仍有疑问,可以随时提出另一个问题,对吗?

关于php - 在后台运行 ffmpeg 以便可以更改页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6296896/

相关文章:

php - 如何将集成 mysql 连接到其他后关系数据?

mysql - CloudFoundry MySQL Java 配置

PHPMyAdmin 如何处理数据类型关系集

php - 我们如何在 mysql 中使用列搜索条件(.. 和 ..or..)而不是行?

linux - 如何使用 CLI 禁用 Firefox 更新?

linux - 检查字符串索引是否存在

javascript - 在 node.js 中使用存储在 Memcached 中的 php 数组

php - Laravel-5 如何使用 id 值和 name 值从数据库中填充选择框

php - 编辑器中的 Slickgrid html 实体问题

mysql - 为什么 mySQL 在任何/所有端口连接