php - 如何在视频上传时创建缩略图?

标签 php video upload ffmpeg

我正在使用 ffmpeg在上传视频文件时创建视频缩略图。我已经创建了这个 upload.php 文件,但它不起作用。它成功上传了 mp4文件但无法创建缩略图。

if(isset($_FILES["myfile"]) && $_FILES["myfile"]["error"]== UPLOAD_ERR_OK)
{
    $UploadDirectory    = 'uploads/';

    if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
        die();
    }

    $video = $UploadDirectory . escapeshellcmd($_FILES['myfile']['tmp_name']);
    $cmd = "ffmpeg -i $video 2>&1";
    $second = 1;
    if (preg_match('/Duration: ((\d+):(\d+):(\d+))/s', `$cmd`, $time)) {
    $total = ($time[2] * 3600) + ($time[3] * 60) + $time[4];
    $second = rand(1, ($total - 1));
    }

    $image  = 'thumbs/random_name.jpg';
    $cmd = "ffmpeg -i $video -deinterlace -an -ss $second -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg $image 2>&1";
    $do = `$cmd`;   

    $File_Name          = strtolower($_FILES['myfile']['name']);
    $File_Ext           = substr($File_Name, strrpos($File_Name, '.')); //get file extention
    $Random_Number      = rand(0, 9999999999); //Random number to be added to name.
    $NewFileName        = $Random_Number.$File_Ext; //new file name

    if(!is_array($_FILES["myfile"]["name"])) //single file
    {
        move_uploaded_file($_FILES["myfile"]["tmp_name"],$UploadDirectory.$NewFileName);

        $ret[]= $NewFileName;
    }
    echo json_encode($ret);
}
else
{
    die('Something wrong with upload! Is "upload_max_filesize" set correctly?');
}   

最佳答案

你必须使用函数exec();要在 php 中使用命令,我添加了 echo exec($cmd);代码里面
尝试这个:

if(isset($_FILES["myfile"]) && $_FILES["myfile"]["error"]== UPLOAD_ERR_OK)
{
$UploadDirectory    = 'uploads/';

if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
    die();
}

$video = $UploadDirectory . escapeshellcmd($_FILES['myfile']['tmp_name']);
$cmd = "ffmpeg -i $video 2>&1";
$second = 1;
if (preg_match('/Duration: ((\d+):(\d+):(\d+))/s', `$cmd`, $time)) {
$total = ($time[2] * 3600) + ($time[3] * 60) + $time[4];
$second = rand(1, ($total - 1));
}

$image  = 'thumbs/random_name.jpg';
$cmd = "ffmpeg  -itsoffset -0 -i uploads/" . $_FILES["myfile"]["name"] . " -vcodec mjpeg -vframes 0 -an -f rawvideo -s 200x200 " . $image;
echo exec($cmd);
$do = `$cmd`;   

$File_Name          = strtolower($_FILES['myfile']['name']);
$File_Ext           = substr($File_Name, strrpos($File_Name, '.')); //get file extention
$Random_Number      = rand(0, 9999999999); //Random number to be added to name.
$NewFileName        = $Random_Number.$File_Ext; //new file name

if(!is_array($_FILES["myfile"]["name"])) //single file
{
    move_uploaded_file($_FILES["myfile"]["tmp_name"],$UploadDirectory.$NewFileName);

    $ret[]= $NewFileName;
}
echo json_encode($ret);
}
else
{
die('Something wrong with upload! Is "upload_max_filesize" set correctly?');
}

关于php - 如何在视频上传时创建缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34384790/

相关文章:

php - 回显函数的特定结果

android - 是否可以手动更改 exoplayer 的分辨率?

java - 确实需要在 appEngine 中上传文件

python - 使用opencv和python从视频中提取帧

javascript - bxslider - 幻灯片重叠 - 在 1 帧中显示两张幻灯片

python - YouTube视频上传

python - 将文件从 Python 客户端上传到 Django 服务器

linux - Remi PHP-FPM 数据库

php - 使用 Laravel Eloquent 和 DB 填充下拉列表

php - 从另一个函数的范围访问变量?